[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = LF\nindent_style = space\nindent_size = 4\ninsert_final_newline = false\ntrim_trailing_whitespace = true\n\n[*.{sln,slnx}]\nindent_style = tab\n\n[*.{csproj,vbproj,vcxproj,vcxproj.filters}]\nindent_size = 2\n\n[*.{xml,config,props,targets,nuspec,ruleset}]\nindent_size = 2\n\n[*.{yml,yaml}]\nindent_size = 2\n\n[*.json]\nindent_size = 2\n\n[*.md]\ntrim_trailing_whitespace = false"
  },
  {
    "path": ".git-blame-ignore-revs",
    "content": "# Use file scoped namespace declarations\n7b2da0a4f63bf3ceab99d2c88535e74155f2b99c\n\n# fix line-endings\ne2ad4b1ea5555e701cda4fd400bb6592e318e1ff\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n\n*.cs       text    eol=lf\n*.md       text    eol=lf\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: [\"needs triage\"]\ntype: [\"bug\"]\nassignees: ''\n\n---\n\n**Information**\n - OS: [eg Windows/Linux/MacOS]\n - Version: [e.g. 0.33.0]\n - Terminal: [e.g Windows Terminal]\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Additional context**\nAdd any other context about the problem here.\n\n---\nPlease upvote :+1: this issue if you are interested in it."
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: [\"needs triage\"]\ntype: [\"feature\"]\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n\n---\nPlease upvote :+1: this issue if you are interested in it."
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "<!--\nDo NOT open a PR without discussing the changes on an open issue, first.\n\nAdd the issue number here. e.g. #123\n-->\nFixes #\n\n<!-- Formalities. These are not optional. -->\n\n- [ ] I have read the [Contribution Guidelines](https://github.com/spectreconsole/spectre.console/blob/main/CONTRIBUTING.md)\n- [ ] I have checked that there isn't already another pull request that solves the above issue\n- [ ] All newly added code is adequately covered by tests\n- [ ] All existing tests are still running without errors\n\n<!-- \nIf you have used generative AI to create this pull request, you will need to disclose this here,\ni.e. What AI agent you used and to what extent.\n-->\n\n## Changes\n\n<!-- Describe the changes you made. -->\n\n---\nPlease upvote :+1: this pull request if you are interested in it."
  },
  {
    "path": ".github/renovate.json",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:base\"\n  ],\n  \"dependencyDashboard\": false,\n  \"commitMessagePrefix\": \"chore:\",\n  \"labels\": [\"dependencies\"],\n  \"npm\": {\n    \"ignorePaths\": [\n      \"**/node_modules/**\",\n      \"**/bower_components/**\"\n    ]\n  },\n  \"ignorePaths\": [\n    \"resources/scripts/**\"\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "content": "# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json\nname: Pull Request\non: pull_request\n\nenv:\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\n\njobs:\n\n  ###################################################\n  # BUILD\n  ###################################################\n\n  build:\n    name: Build\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n\n      - name: Setup .NET SDK (global.json)\n        uses: actions/setup-dotnet@v5\n\n      - name: Build\n        shell: bash\n        run: |\n          dotnet tool restore\n          dotnet make\n\n      - name: Upload Verify Test Results\n        if: failure()\n        uses: actions/upload-artifact@v7\n        with:\n          name: verify-test-results\n          path: |\n            **/*.received.*"
  },
  {
    "path": ".github/workflows/publish.yaml",
    "content": "# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json\nname: Publish\n\non:\n  push:\n    tags:\n      - '*'\n    branches:\n      - main\n\npermissions:\n  id-token: write\n\nenv:\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\n\njobs:\n\n  ###################################################\n  # PUBLISH\n  ###################################################\n\n  build:\n    name: Publish NuGet Packages\n    runs-on: windows-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n\n      - name: Azure login\n        uses: azure/login@v3\n        with:\n          client-id: ${{ secrets.AZURE_CLIENT_ID }}\n          tenant-id: ${{ secrets.AZURE_TENANT_ID }}\n          allow-no-subscriptions: true\n\n      - name: Setup .NET SDK (global.json)\n        uses: actions/setup-dotnet@v5\n\n      - name: Publish\n        shell: bash\n        run: |\n          dotnet tool restore\n          dotnet make publish --sign \\\n            --nuget-key=\"${{secrets.NUGET_SIGNING_API_KEY}}\" \\\n            --keyvaultUrl=\"${{secrets.SIGN_KEYVAULT_URL}}\" \\\n            --keyvaultCertificate=\"${{secrets.SIGN_KEYVAULT_CERTIFICATE}}\""
  },
  {
    "path": ".github/workflows/top-issues-dashboard.yml",
    "content": "name: Top issues action.\non:\n  schedule:\n    - cron: '0 0 */1 * *'\n\njobs:\n  ShowAndLabelTopIssues:\n    name: Display and label top issues.\n    runs-on: ubuntu-latest\n    steps:\n      - name: Top Issues action\n        uses: rickstaa/top-issues-action@v1.3.101\n        env:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          top_list_size: 10\n          label: true\n          dashboard: true\n          dashboard_show_total_reactions: true\n          top_issues: true\n          top_bugs: true\n          top_features: true\n          feature_label: feature\n          top_pull_requests: true"
  },
  {
    "path": ".gitignore",
    "content": "# Misc folders\n[Bb]in/\n[Oo]bj/\n[Tt]emp/\n[Pp]ackages/\n/.artifacts/\n/[Tt]ools/\n.idea\n.DS_Store\n\n# Sign tool\n.sign\n\n# .NET Core CLI\n/.dotnet/\n/.packages/\ndotnet-install.sh*\n*.lock.json\n\n# Benchmarks\n**/BenchmarkDotNet.Artifacts/**/*.*\n!**/BenchmarkDotNet.Artifacts/**/*.md\n\n# Visual Studio\n.vs/\n.vscode/\nlaunchSettings.json\n*.sln.ide/\n\n# Rider\nsrc/.idea/**/workspace.xml\nsrc/.idea/**/tasks.xml\nsrc/.idea/dictionaries\nsrc/.idea/**/dataSources/\nsrc/.idea/**/dataSources.ids\nsrc/.idea/**/dataSources.xml\nsrc/.idea/**/dataSources.local.xml\nsrc/.idea/**/sqlDataSources.xml\nsrc/.idea/**/dynamic.xml\nsrc/.idea/**/uiDesigner.xml\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n*.userprefs\n*.GhostDoc.xml\n*StyleCop.Cache\n\n# Build results\n[Dd]ebug/\n[Rr]elease/\nx64/\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.log\n*.vspscc\n*.vssscc\n.builds\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# ReSharper is a .NET coding add-in\n_ReSharper*\n\n# NCrunch\n.*crunch*.local.xml\n_NCrunch_*\n\n# NuGet Packages Directory\npackages\n\n# Windows\nThumbs.db\n\n*.received.*\n\nnode_modules"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# 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 of\n  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 moderation\ndecisions 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 address,\nposting via an official social media account, or acting as an appointed\nrepresentative 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 at\nconduct@dotnetfoundation.org.\nAll complaints will 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 [Contributor Covenant][homepage],\nversion 2.1, available at\n[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].\n\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder][Mozilla CoC].\n\nFor answers to common questions about this code of conduct, see the FAQ at\n[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at\n[https://www.contributor-covenant.org/translations][translations].\n\n[homepage]: https://www.contributor-covenant.org\n[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html\n[Mozilla CoC]: https://github.com/mozilla/diversity\n[FAQ]: https://www.contributor-covenant.org/faq\n[translations]: https://www.contributor-covenant.org/translations"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guidelines\n\n* [Prerequisites](#prerequisites)\n* [Definition of trivial contributions](#definition-of-trivial-contributions)\n* [Code](#code)\n  * [Code style](#code-style)\n  * [Dependencies](#dependencies)\n  * [Unit tests](#unit-tests)\n* [Contributing process](#contributing-process)\n  * [Get buyoff or find open community issues or features](#get-buyoff-or-find-open-community-issues-or-features)\n  * [Set up your environment](#Set-up-your-environment)\n  * [Prepare commits](#prepare-commits)\n  * [Submit pull request](#Submit-pull-request)\n  * [Respond to feedback on pull request](#respond-to-feedback-on-pull-request)\n* [Other general information](#other-general-information)\n* [Acknowledgement](#acknowledgement)\n\n## Prerequisites\n\nBy contributing to Spectre.Console, you assert that:\n\n* The contribution is your own original work.\n* You have the right to assign the copyright for the work (it is not owned by your employer, or\n  you have been given copyright assignment in writing).\n* You [license](https://github.com/spectreconsole/spectre.console/blob/main/LICENSE) the contribution under the terms applied to the rest of the Spectre.Console project.\n* You agree to follow the [code of conduct](https://github.com/spectreconsole/spectre.console/blob/main/CODE_OF_CONDUCT.md).\n\n## Definition of trivial contributions\nIt's hard to define what is a trivial contribution. Sometimes even a 1 character change can be considered significant.\nUnfortunately because it can be subjective, the decision on what is trivial comes from the maintainers of the project\nand not from folks contributing to the project.\n\nWhat is generally considered trivial:\n\n* Fixing a typo.\n* Documentation changes.\n\n## Code\n### Code style\n\nNormal .NET coding guidelines apply.\nSee the [Framework Design Guidelines](https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/) for more information.\n\n### Dependencies\n\nThe assembly `Spectre.Console` should have no dependencies except the .NET BCL library.\n\n### Unit tests\n\nMake sure to run all unit tests before creating a pull request.\nAny new code should also have reasonable unit test coverage.\n\n## Contributing process\n### Get buyoff or find open community issues or features\n\n * Through GitHub, or through the [GitHub discussions](https://github.com/spectreconsole/spectre.console/discussions) (preferred),\n   you talk about a feature you would like to see (or a bug), and why it should be in Spectre.Console.\n   * If approved through the GitHub discussions, ensure an accompanying GitHub issue is created with\n     information and a link back to the discussion.\n  * Once you get a nod from someone in the Spectre.Console Team, you can start on the feature.\n  * Alternatively, if a feature is on the issues list with the\n   [good first issue](https://github.com/spectreconsole/spectre.console/labels/good%20first%20issue) label,\n   it is open for a community member (contributor) to patch. You should comment that you are signing up for it on\n   the issue so someone else doesn't also sign up for the work.\n\n### Set up your environment\n\n * You create, or update, a fork of `spectreconsole/spectre.console` under your GitHub account.\n * From there you create a branch named specific to the feature.\n * In the branch you do work specific to the feature.\n * Please also observe the following:\n    * No reformatting\n    * No changing files that are not specific to the feature.\n    * More covered below in the **Prepare commits** section.\n * Test your changes and please help us out by updating and implementing some automated tests.\n   It is recommended that all contributors spend some time looking over the tests in the source code.\n   You can't go wrong emulating one of the existing tests and then changing it specific to the behavior you are testing.\n * Please do not update your branch from the main branch unless we ask you to. See the responding to feedback section below.\n\n### Prepare commits\nThis section serves to help you understand what makes a good commit.\n\nA commit should observe the following:\n\n * A commit is a small logical unit that represents a change.\n * Should include new or changed tests relevant to the changes you are making.\n * No unnecessary whitespace. Check for whitespace with `git diff --check` and `git diff --cached --check` before commit.\n * You can stage parts of a file for commit.\n\n### Submit pull request\nPrerequisites:\n\n * You are making commits in a feature branch.\n * All code should compile without errors or warnings.\n * All tests should be passing.\n\nSubmitting PR:\n\n * Once you feel it is ready, submit the pull request to the `spectreconsole/spectre.console` repository against the `main` branch\n   unless specifically requested to submit it against another branch.\n   * In the case of a larger change that is going to require more discussion,\n     please submit a PR sooner. Waiting until you are ready may mean more changes than you are\n     interested in if the changes are taking things in a direction the maintainers do not want to go.\n * In the pull request, outline what you did and point to specific conversations (as in URLs)\n   and issues that you are resolving. This is a tremendous help for us in evaluation and acceptance.\n * Once the pull request is in, please do not delete the branch or close the pull request\n   (unless something is wrong with it).\n * One of the Spectre.Console team members, or one of the maintainers, will evaluate it within a\n   reasonable time period (which is to say usually within 1-3 weeks). Some things get evaluated\n   faster or fast tracked. We are human and we have active lives outside of open source so don't\n   fret if you haven't seen any activity on your pull request within a month or two.\n   We don't have a Service Level Agreement (SLA) for pull requests.\n   Just know that we will evaluate your pull request.\n\n### Respond to feedback on pull request\n\nWe may have feedback for you to fix or change some things. We generally like to see that pushed against\nthe same topic branch (it will automatically update the Pull Request). You can also fix/squash/rebase\ncommits and push the same topic branch with `--force` (it's generally acceptable to do this on topic\nbranches not in the main repository, it is generally unacceptable and should be avoided at all costs\nagainst the main repository).\n\nIf we have comments or questions when we do evaluate it and receive no response, it will probably\nlessen the chance of getting accepted. Eventually, this means it will be closed if it is not accepted.\nPlease know this doesn't mean we don't value your contribution, just that things go stale. If in the\nfuture you want to pick it back up, feel free to address our concerns/questions/feedback and reopen\nthe issue/open a new PR (referencing old one).\n\nSometimes we may need you to rebase your commit against the latest code before we can review it further.\nIf this happens, you can do the following:\n\n * `git fetch upstream` (upstream remote would be `spectreconsole/spectre.console`)\n * `git checkout main`\n * `git rebase upstream/main`\n * `git checkout your-branch`\n * `git rebase main`\n * Fix any merge conflicts\n * `git push origin your-branch` (origin would be your GitHub repo or `your-github-username/spectre.console` in this case).\n   You may need to `git push origin your-branch --force` to get the commits pushed.\n   This is generally acceptable with topic branches not in the mainstream repository.\n\nThe only reasons a pull request should be closed and resubmitted are as follows:\n\n * When the pull request is targeting the wrong branch (this doesn't happen as often).\n * When there are updates made to the original by someone other than the original contributor.\n   Then the old branch is closed with a note on the newer branch this supersedes #github_number.\n\n## Other general information\nIf you reformat code or hit core functionality without an approval from a person on the Spectre.Console Team,\nit's likely that no matter how awesome it looks afterwards, it will probably not get accepted.\nReformatting code makes it harder for us to evaluate exactly what was changed.\n\nIf you do these things, it will be make evaluation and acceptance easy.\nNow if you stray outside of the guidelines we have above, it doesn't mean we are going to ignore\nyour pull request. It will just make things harder for us.\nHarder for us roughly translates to a longer SLA for your pull request.\n\n## Acknowledgement\n\nThis contribution guide was taken from the [Chocolatey project](https://chocolatey.org/)\nwith permission and was edited to follow Spectre.Console's conventions and processes.\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2020 Patrik Svensson, Phil Scott, Nils Andresen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "NuGet.Config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />\n  </packageSources>\n</configuration>"
  },
  {
    "path": "README.fa.md",
    "content": "# `Spectre.Console`\n\n_[![Spectre.Console NuGet Version](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_\n\n<div dir=\"rtl\">\n\nیک کتابخانه .NET. که ایجاد Console Applicationهای زیبا و cross platform را آسان‌تر می‌کند.  \nاز کتابخانه عالی [Rich](https://github.com/willmcgugan/rich)  برای پایتون، بسیار الهام گرفته شده است.\n\n## فهرست\n\n1. [امکانات](#features)\n2. [نصب](#installing)\n3. [مستندات](#documentation)\n4. [مثال‌ها](#examples)\n5. [مجوز](#license)\n\n<h2 id=\"features\">امکانات</h2>\n\n* با در نظر گرفتن تست واحد نوشته شده است.\n* جداول، چارچوب‌ها، پنل‌ها و یک زبان نشانه گذاری که از [rich](https://github.com/willmcgugan/rich) الهام گرفته شده است را پشتیبانی می‌کند.\n* از رایج ترین پارامترهای SGR در هنگام فرم دهی متن مانند پررنگ، کم نور، اریب، زیرخط، خط زدن و چشمک زدن پشتیبانی می‌کند.\n* پشتیبانی از رنگ‌های 28/8/4/3-بیت در ترمینال.  \n  این کتابخانه توانایی ترمینال فعلی را تشخیص داده و در صورت لزوم رنگ‌ها را کاهش می‌دهد.\n\n\n![Example](resources/example.png)\n\n<h2 id=\"installing\">نصب</h2>\n\nسریع ترین راه برای شروع `Spectre.Console` نصب از طریق NuGet Package می‌باشد.\n\n<pre dir=\"ltr\">\ndotnet add package Spectre.Console\n</pre>\n\n<h2 id=\"documentation\">مستندات</h2>\n\nمستندات `Spectre.Console` را در اینجا می‌توایند پیدا کنید:\n\n<div dir=\"ltr\">\nhttps://spectreconsole.net/\n</div>\n\n<h2 id=\"examples\">مثال‌ها</h2>\n\nTo see `Spectre.Console` in action, please see the \n[examples repository](https://github.com/spectreconsole/examples).\n\n<h2 id=\"license\">مجوز</h2>\n\n<div dir=\"ltr\">\nCopyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray\n</div>\n\nهمانطور که Spectre.Console تحت مجوز MIT ارائه شده است؛ برای کسب اطلاعات بیشتر به مجوز مراجعه کنید.\n\n* برای SixLabors.ImageSharp، مشاهده کنید: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE\n\n</div>\n"
  },
  {
    "path": "README.jp.md",
    "content": "# `Spectre.Console`\n\n_[![Spectre.Console NuGet Version](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_\n\n綺麗なコンソールアプリケーションを簡単に作成するための.NETライブラリです。\nPython用の素晴らしい[Rich ライブラリ](https://github.com/willmcgugan/rich)に強く影響を受けています。\n\n## 目次\n\n1. [特徴](#特徴)\n2. [例](#例)\n3. [使用方法](#使用方法)  \n   3.1. [Static APIの利用](#static-apiの利用)  \n   3.2. [コンソールの作成](#コンソールの作成)\n4. [例の実行](#例の実行)\n5. [クイックスタート](#クイックスタート)\n6. [マークアップ](#マークアップ)\n7. [絵文字](#絵文字)\n8. [テーブル](#テーブル)\n9. [例外](#例外)\n\n## 特徴\n\n* ユニットテストを意識して書いています。\n* table、grid、panel、マークアップ言語に影響を受けた [rich](https://github.com/willmcgugan/rich) に対応しています。\n* 太字、薄字、斜字、下線、斜線、点滅などの一般的なSGR parameters に対応しています。\n* ターミナルで 3/4/8/24ビットカラーに対応しています。\n  ライブラリは現在のターミナルの性能を検知し、必要なカラーにダウングレードします\n\n## 例\n\n![Example](resources/example.png)\n\n## 使用方法\n\n`Spectre.Console` APIはステートフルで、スレッドセーフではありません。\n異なるスレッドからコンソールに書く必要がある場合、通常の`System.Console` APIを使用するときと同様、適切な注意を払ってください。\n\n現在の端末がANSIエスケープシーケンスに対応していない場合、\n`Spectre.Console`は、`System.Console` APIの利用に切り替わります。\n\n_メモ: このライブラリは現在開発中で、APIは1.0のリリースまでの間に変更されたり、\n削除されたりする可能性があります。_\n\n### Static APIの利用\n\n\n`System.Console` APIでするように、テキストを出力したいだけの時にはstatic APIが最適ですが、綺麗です。\n\n```csharp\nAnsiConsole.Foreground = Color.CornflowerBlue;\nAnsiConsole.Decoration = Decoration.Underline | Decoration.Bold;\nAnsiConsole.WriteLine(\"Hello World!\");\n\nAnsiConsole.Reset();\nAnsiConsole.MarkupLine(\"[bold yellow on red]{0}[/] [underline]world[/]!\", \"Goodbye\");\n```\n\nもし、デフォルトの`IAnsiConsole`への参照を取得したい場合、\n`AnsiConsole.Console`経由でアクセスできます。\n\n### コンソールの作成\n\n単体テスト中にコードの実行環境を制御したい場合など、\n特定の機能をもつコンソールを明示的に作成すると便利なことがあります。\n\n単体テストの一部としてコードで `AnsiConsole`を使わないことを推奨します。\n\n```csharp\nIAnsiConsole console = AnsiConsole.Create(\n    new AnsiConsoleSettings()\n    {\n        Ansi = AnsiSupport.Yes,\n        ColorSystem = ColorSystemSupport.TrueColor,\n        Out = new StringWriter(),\n    });\n```\n\n_メモ: 主導でコンソールを作成しているときに特定のカラーシステムを指定できたとしても、\nユーザーのターミナルでは使えないかもしれないことを覚えておいてください。\nテスト用にIAnsiConsoleを作成していない限り、\n常に`ColorSystemSupport.Detect` と `AnsiSupport.Detect`を使用してください。_\n\n## 例の実行\n\nSpectre.Consoleでできることを見るために、 \n[dotnet-example](https://github.com/patriksvensson/dotnet-example)グローバルツールをインストールします。\n\n\n```\n> dotnet tool restore\n```\n\nこのリポジトリで提供している例が一覧表示されます\n\n```\n> dotnet example\n\n╭────────────┬───────────────────────────────────────┬──────────────────────────────────────────────────────╮\n│ Name       │ Path                                  │ Description                                          │\n├────────────┼───────────────────────────────────────┼──────────────────────────────────────────────────────┤\n│ Borders    │ examples/Borders/Borders.csproj       │ Demonstrates the different kind of borders.          │\n│ Calendars  │ examples/Calendars/Calendars.csproj   │ Demonstrates how to render calendars.                │\n│ Colors     │ examples/Colors/Colors.csproj         │ Demonstrates how to use colors in the console.       │\n│ Columns    │ examples/Columns/Columns.csproj       │ Demonstrates how to render data into columns.        │\n│ Emojis     │ examples/Emojis/Emojis.csproj         │ Demonstrates how to render emojis.                   │\n│ Exceptions │ examples/Exceptions/Exceptions.csproj │ Demonstrates how to render formatted exceptions.     │\n│ Grids      │ examples/Grids/Grids.csproj           │ Demonstrates how to render grids in a console.       │\n│ Info       │ examples/Info/Info.csproj             │ Displays the capabilities of the current console.    │\n│ Links      │ examples/Links/Links.csproj           │ Demonstrates how to render links in a console.       │\n│ Panels     │ examples/Panels/Panels.csproj         │ Demonstrates how to render items in panels.          │\n│ Rules      │ examples/Rules/Rules.csproj           │ Demonstrates how to render horizontal rules (lines). │\n│ Tables     │ examples/Tables/Tables.csproj         │ Demonstrates how to render tables in a console.      │\n│ Trees      │ examples/Trees/Trees.csproj           │ Demonstrates how to render trees in a console.       │\n╰────────────┴───────────────────────────────────────┴──────────────────────────────────────────────────────╯\n```\n\nそして、例を実行します\n\n```\n> dotnet example tables\n┌──────────┬──────────┬────────┐\n│ Foo      │ Bar      │ Baz    │\n├──────────┼──────────┼────────┤\n│ Hello    │ World!   │        │\n│ Bonjour  │ le       │ monde! │\n│ Hej      │ Världen! │        │\n└──────────┴──────────┴────────┘\n```\n\n## クイックスタート\npectre.Consoleの利用を開始する最初の方法は、Nugetパッケージをインストールすることです。\n\n```shell\n> dotnet add package Spectre.Console\n```\n\nその後、`Spectre.Console`名前空間を参照する必要があります。一度参照したら、提供されている全ての機能を使用できます。\n\n```csharp\nusing Spectre.Console\n\npublic static class Program\n{\n    public static void Main(string[] args)\n    {\n        AnsiConsole.Markup(\"[underline red]Hello[/] World!\");\n    }\n}\n```\n\n## マークアップ\n`Markup`クラスは、コンソールにリッチなテキストを出力することができます。\n\n### 文法\n\nコンソールマークアップはbbcodeに影響を受けた文法を利用します。角括弧でスタイルを書いたら（スタイルを参照）、例えば、`[bold red]`\nは、`[/]`で閉じるまでスタイルが適用されます。\n\n```csharp\nAnsiConsole.Render(new Markup(\"[bold yellow]Hello[/] [red]World![/]\"));\n```\n\n`Markup` クラスは`IRenderable`を実装しており、table、grid、Panelを使用できることを意味します。\n`IRenderable`のレンダリングに対応している多くのクラスは、リッチテキストの描画を上書きます。\n\n```csharp\nvar table = new Table();\ntable.AddColumn(new TableColumn(new Markup(\"[yellow]Foo[/]\")));\ntable.AddColumn(new TableColumn(\"[blue]Bar[/]\"));\n```\n\n### 便利なメソッド\n\n`AnsiConsole`には、新しい`Markup`インスタンスをインスタンス化することなく、コンソールにマークアップテキストを書き込める便利なメソッドがあります。\n\n```csharp\nAnsiConsole.Markup(\"[underline green]Hello[/] \");\nAnsiConsole.MarkupLine(\"[bold]World[/]\");\n```\n\n### エスケープ文字列\n\n`[`を出力するために、 `[[`を利用し、`]`を出力するために`]]`を利用します。\n\n```csharp\nAnsiConsole.Markup(\"[[Hello]] \"); // [Hello]\nAnsiConsole.Markup(\"[red][[World]][/]\"); // [World]\n```\n\n`SafeMarkup`拡張メソッドを使用することもできます。\n\n```csharp\nAnsiConsole.Markup(\"[red]{0}[/]\", \"Hello [World]\".SafeMarkup());\n```\n\n### カラー\n\n`new Style(foreground: Color.Maroon)`のようなコード、または、`AnsiConsole.Markup(\"[maroon on blue]Hello[/]\")`のようなマークアップテキストで色を使用できます。\n\n### 背景色の設定\n\nカラー指定の際に、`on`を付けることで、マークアップで背景色を設定できます。\n\n```\n[bold yellow on blue]Hello[/]\n[default on blue]World[/]\n```\n\n### 絵文字の描画\n\nマークアップの一部として絵文字を出力するために、emojiショートコードが使用できます。\n\n```csharp\nAnsiConsole.MarkupLine(\"Hello :globe_showing_europe_africa:!\");\n```\n\nemojiのスタイルについては、付録の[Emoji](./appendix/emojis) を参照してください。\n\n### カラー\n\n上の例では、全ての色は名前で参照されています。\nしかし、16進数やRGB表現をマークダウンで色指定に使用できます。\n\n```csharp\nAnsiConsole.Markup(\"[red]Foo[/] \");\nAnsiConsole.Markup(\"[#ff0000]Bar[/] \");\nAnsiConsole.Markup(\"[rgb(255,0,0)]Baz[/] \");\n```\n\n## 絵文字\n\nどのような絵文字が使用できるかは、使用しているOSやターミナルに依存し、どのように表示されるかは保証されません。絵文字の幅計算は正確ではないため、表、パネル、グリッドで使用する場合は表示がずれるかもしれません。\n\n完全な互換性を確保するために、Unicode 13.0 より以前の`Emoji_Presentation`カテゴリにあるものだけを使用することを検討してください。\n公式の絵文字一覧\nhttps://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt\n\n\n```csharp\n// Markup\nAnsiConsole.MarkupLine(\"Hello :globe_showing_europe_africa:!\");\n\n// Constant\nvar hello = \"Hello \" + Emoji.Known.GlobeShowingEuropeAfrica;\n```\n\nテキスト内の絵文字を置き換えることができます。\n\n```csharp\nvar phrase = \"Mmmm :birthday_cake:\";\nvar rendered\n```\n\n既存の絵文字を別のものにしたり、完全に新しい物を追加したいことがあります。このために、`Emoji.Remap`メソッドを使用できます。\nこの方法は、マークアップ文字と`Emoji.Replace`の両方で動作します。\n\n```csharp\n// Remap the emoji\nEmoji.Remap(\"globe_showing_europe_africa\", \"😄\");\n\n// Render markup\nAnsiConsole.MarkupLine(\"Hello :globe_showing_europe_africa:!\");\n\n// Replace emojis in string\nvar phrase = \"Hello :globe_showing_europe_africa:!\";\nvar rendered = Emoji.Replace(phrase);\n```\n\n## テーブル\n\nテーブルはターミナルで表データを表示するのに完璧な方法です。\n`Spectre.Console` は、テーブルの描画にとても優れていて、全てのカラムは中に合わせて調整してくれます。\n`IRenderable`を実装しているものは、列ヘッダやセル、別のテーブルとして使用できます。\n\n### 使い方\n\nテーブルを描画するために、`Table`インスタンスを作成し、必要な数の列を追加し、行を追加します。\nテーブルをコンソールの`Render`メソッドに渡して終わりです。\n\n```csharp\n// テーブルの作成\nvar table = new Table();\n\n// 列の追加\ntable.AddColumn(\"Foo\");\ntable.AddColumn(new TableColumn(\"Bar\").Centered());\n\n// 行の追加\ntable.AddRow(\"Baz\", \"[green]Qux[/]\");\ntable.AddRow(new Markup(\"[blue]Corgi[/]\"), new Panel(\"Waldo\"));\n\n// コンソールにテーブルの描画\nAnsiConsole.Render(table);\n```\n\n### 罫線\n\n\n```csharp\n// 罫線を設定します\ntable.SetBorder(Border.None);\ntable.SetBorder(Border.Ascii);\ntable.SetBorder(Border.Square);\ntable.SetBorder(Border.Rounded);\n```\n\n### 拡大 / 縮小\n\n```csharp\n// テーブル幅を最大に設定します\ntable.Expand();\n\n// テーブル幅を最小に設定します\ntable.Collapse();\n```\n\n### ヘッダーを隠す\n\n```csharp\n// 全ての列のヘッダーを隠します\ntable.HideHeaders();\n```\n\n### テーブル幅の設定\n\n```csharp\n// テーブル幅50セルに設定します\ntable.SetWidth(50);\n```\n\n### 整列（アライメント）\n\n```csharp\n// 整列を明示的に設定する\ncolumn.SetAlignment(Justify.Right);\n```\n\n### パディング\n\n```csharp\n// 左と右のパディングを設定する\ncolumn.SetPadding(left: 3, right: 5);\n\n// 個別にパディングを設定する\ncolumn.PadLeft(3);\ncolumn.PadRight(5);\n```\n\n### 列改行の無効化\n\n```csharp\n// 列改行の無効化\ncolumn.NoWrap();\n```\n\n### 列幅の設定\n\n```csharp\n// 列幅の設定(これはまだ柔軟な拡張メソッドがありません)\ncolumn.Width = 15;\n```\n\n## 例外\n例外はターミナルで見たときに読みやすいとは限りません。\n`WriteException`メソッドを使用することで、例外をもう少し読みやすくすることができます。\n\n```csharp\nAnsiConsole.WriteException(ex);\n```\n\n### 例外の省略表示\n\n例外の特定部分を短くして、さらに読みやすくしたり、パスをクリック可能なハイパーリンクにすることもできます。\nハイパーリンクがクリックできるかはターミナル次第です。\n\n```csharp\nAnsiConsole.WriteException(ex, \n    ExceptionFormats.ShortenPaths | ExceptionFormats.ShortenTypes |\n    ExceptionFormats.ShortenMethods | ExceptionFormats.ShowLinks);\n```\n\n### 例外出力のカスタマイズ\n\n例外の特定部分を短縮するだけでなく、デフォルトのスタイルを上書きすることもできます。\n\n```csharp\nAnsiConsole.WriteException(ex, new ExceptionSettings\n{\n    Format = ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks,\n    Style = new ExceptionStyle\n    {\n        Exception = Style.WithForeground(Color.Grey),\n        Message = Style.WithForeground(Color.White),\n        NonEmphasized = Style.WithForeground(Color.Cornsilk1),\n        Parenthesis = Style.WithForeground(Color.Cornsilk1),\n        Method = Style.WithForeground(Color.Red),\n        ParameterName = Style.WithForeground(Color.Cornsilk1),\n        ParameterType = Style.WithForeground(Color.Red),\n        Path = Style.WithForeground(Color.Red),\n        LineNumber = Style.WithForeground(Color.Cornsilk1),\n    }\n});\n```"
  },
  {
    "path": "README.md",
    "content": "# `Spectre.Console`\n\n_[![Spectre.Console NuGet Version](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_ [![Netlify Status](https://api.netlify.com/api/v1/badges/1eaf215a-eb9c-45e4-8c64-c90b62963149/deploy-status)](https://app.netlify.com/sites/spectreconsole/deploys)\n\nA .NET library that makes it easier to create beautiful, cross platform, console applications.  \nIt is heavily inspired by the excellent Python library, [Rich](https://github.com/willmcgugan/rich). Detailed instructions for using `Spectre.Console` are located on the project website, https://spectreconsole.net\n\n## Table of Contents\n\n1. [Features](#features)\n1. [Installing](#installing)\n1. [Documentation](#documentation)\n1. [Examples](#examples)\n1. [Code of Conduct](#code-of-conduct)\n1. [.NET Foundation](#net-foundation)\n1. [License](#license)\n\n## Features\n\n* Supports tables, grids, panels, and a [Rich](https://github.com/willmcgugan/rich) inspired markup language.\n* Supports the most common SGR parameters when it comes to text \n  styling such as bold, dim, italic, underline, strikethrough, \n  and blinking text.\n* Supports 3/4/8/24-bit colors in the terminal.  \n  The library will detect the capabilities of the current terminal \n  and downgrade colors as needed.\n* Written with unit testing in mind.\n\n![Example](resources/example.png)\n\n## Important Notices\n\n> [!IMPORTANT]\\\n> We use the [Top Issues Dashboard](https://github.com/spectreconsole/spectre.console/issues/1517) for tracking community demand. Please upvote :+1: the issues and pull requests you are interested in.\n\n## Installing\n\nThe fastest way of getting started using `Spectre.Console` is to install the NuGet package.\n\n```csharp\ndotnet add package Spectre.Console\n```\n\n## Documentation\n\nThe documentation for `Spectre.Console` can be found at\nhttps://spectreconsole.net\n\n## Examples\n\nTo see `Spectre.Console` in action, please see the \n[examples repository](https://github.com/spectreconsole/examples).\n\n## Code of Conduct\n\nThis project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.\nFor more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).\n\n## .NET Foundation\n\nThis project is supported by the [.NET Foundation](https://dotnetfoundation.org).\n\n## License\n\nCopyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray\n\n`Spectre.Console` is provided as-is under the MIT license. For more information see LICENSE.\n\n* SixLabors.ImageSharp, a library which `Spectre.Console` relies upon, is licensed under Apache 2.0 when distributed as part of `Spectre.Console`. The Six Labors Split License covers all other usage, see: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE \n"
  },
  {
    "path": "README.pt-BR.md",
    "content": "# `Spectre.Console`\n\n_[![Spectre.Console NuGet Versão](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_\n\nUma biblioteca .NET que torna mais fácil criar aplicativos de console bonitos e multiplataforma. \nÉ fortemente inspirada na excelente [biblioteca Rich](https://github.com/willmcgugan/rich) \npara Python.\n\n## Índice de Conteúdo\n\n1. [Funcionalidades](#funcionalidades)\n1. [Instalação](#instalação)\n1. [Documentação](#documentação)\n1. [Exemplos](#exemplos)\n1. [Licença](#licença)\n\n## Funcionalidades\n\n* Desenvolvida com testes unitários em mente.\n* Suporta tabelas, grades, painéis, e uma linguagem de marcação inspirada em [rich](https://github.com/willmcgugan/rich).\n* Suporta os parâmetros SGR mais comuns quando se trata de estilo de texto, \n  como negrito, esmaecido, itálico, sublinhado, tachado \n  e texto piscando.\n* Suporta cores de 3/4/8/24 bits no terminal.\n  A biblioteca detectará os recursos do terminal atual \n  e reduz as cores conforme necessário.\n\n![Exemplo](resources/example.png)\n\n## Instalação\n\nA maneira mais rápida de começar a usar o `Spectre.Console` é instalar o pacote NuGet.\n\n```csharp\ndotnet add package Spectre.Console\n```\n\n## Documentação\n\nA documentação do `Spectre.Console` pode ser encontrada em \nhttps://spectreconsole.net/\n\n## Exemplos\n\nTo see `Spectre.Console` in action, please see the \n[examples repository](https://github.com/spectreconsole/examples).\n\n## Licença\n\nCopyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray\n\nSpectre.Console é fornecido no estado em que se encontra sob a licença do MIT. Para obter mais informações, consulte o arquivo [LICENSE](LICENSE.md).\n\n* Para SixLabors.ImageSharp, consulte https://github.com/SixLabors/ImageSharp/blob/master/LICENSE"
  },
  {
    "path": "README.zh.md",
    "content": "# `Spectre.Console`\n\n_[![Spectre.Console NuGet Version](https://img.shields.io/nuget/v/spectre.console.svg?style=flat&label=NuGet%3A%20Spectre.Console)](https://www.nuget.org/packages/spectre.console)_\n\n`Spectre.Console`是一个 .NET 的库，可以更轻松地创建美观的跨平台控制台应用程序。\n\n深受 [Rich](https://github.com/willmcgugan/rich) 这个Python优秀库的启发。\n\n## 目录\n\n1. [功能](#功能)\n1. [安装](#安装)\n1. [文档](#文档)\n1. [例子](#例子)\n1. [开源许可](#开源许可)\n\n## 功能\n\n* 编写时考虑到了单元测试。\n* 支持 tables、grid、panel 和 [rich](https://github.com/willmcgugan/rich) 所支持的标记语言。\n* 支持大部分的 SGR 参数，包括粗体、暗淡字、斜体、下划线、删除线和闪烁文本。\n* 支持终端显示 3/4/8/24 位色。自动检测终端类型，自适应颜色范围。\n\n![例子](resources/example.png)\n\n## 安装\n\n最快的安装方式，就是用NuGet包管理直接安装`Spectre.Console`。\n\n```csharp\ndotnet add package Spectre.Console\n```\n\n## 文档\n\n`Spectre.Console`的文档可以在这里查看\nhttps://spectreconsole.net/\n\n## 例子\n\nTo see `Spectre.Console` in action, please see the \n[examples repository](https://github.com/spectreconsole/examples).\n\n## 开源许可\n\n版权所有 © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray\n\nSpectre.Console 基于 MIT 协议提供。查看 LICENSE 文件了解更多信息。\n\n* SixLabors.ImageSharp 的协议请查看 https://github.com/SixLabors/ImageSharp/blob/master/LICENSE\n"
  },
  {
    "path": "build.cs",
    "content": "#:sdk Cake.Sdk@6.0.0\n\nvar solution = \"./src/Spectre.Console.slnx\";\n\n////////////////////////////////////////////////////////////////\n// Arguments\n\nvar target = Argument(\"target\", \"Default\");\nvar configuration = Argument(\"configuration\", \"Release\");\nvar noLinting = HasArgument(\"no-lint\");\n\n////////////////////////////////////////////////////////////////\n// Tasks\n\nTask(\"Clean\")\n    .Does(ctx =>\n{\n    ctx.CleanDirectory(\"./.artifacts\");\n});\n\nTask(\"Lint\")\n    .Does(ctx =>\n{\n    ctx.DotNetFormatStyle(solution, new DotNetFormatSettings\n    {\n        VerifyNoChanges = true,\n    });\n});\n\nTask(\"Build\")\n    .IsDependentOn(\"Clean\")\n    .Does(ctx =>\n{\n    ctx.DotNetBuild(solution, new DotNetBuildSettings\n    {\n        Configuration = configuration,\n        Verbosity = DotNetVerbosity.Minimal,\n        NoLogo = true,\n        NoIncremental = ctx.HasArgument(\"rebuild\"),\n        MSBuildSettings = new DotNetMSBuildSettings()\n            .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error)\n    });\n});\n\nTask(\"Test\")\n    .IsDependentOn(\"Build\")\n    .Does(ctx =>\n{\n    ctx.DotNetTest(solution, new DotNetTestSettings\n    {\n        Configuration = configuration,\n        Verbosity = DotNetVerbosity.Minimal,\n        NoLogo = true,\n        NoRestore = true,\n        NoBuild = true,\n    });\n});\n\nTask(\"Package\")\n    .IsDependentOn(\"Test\")\n    .Does(ctx =>\n{\n    ctx.DotNetPack(solution, new DotNetPackSettings\n    {\n        Configuration = configuration,\n        Verbosity = DotNetVerbosity.Minimal,\n        NoLogo = true,\n        NoRestore = true,\n        NoBuild = true,\n        OutputDirectory = \"./.artifacts\",\n        MSBuildSettings = new DotNetMSBuildSettings()\n            .TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error)\n    });\n});\n\nTask(\"Sign-Binaries\")\n    .IsDependentOn(\"Package\")\n    .WithCriteria(ctx => ctx.HasArgument(\"sign\"), \"Not signing binaries\")\n    .Does(ctx =>\n{\n    // Ensure the sign tool is installed\n    ctx.StartProcess(\"dotnet\", new ProcessSettings\n    {\n        Arguments = \"tool install --tool-path .sign --prerelease sign\"\n    });\n\n    var commandSettings = new CommandSettings\n    {\n        ToolExecutableNames = [\"sign\", \"sign.exe\"],\n        ToolName = \"sign\",\n        ToolPath = ResolveSignTool(\"sign.exe\")\n            ?? ResolveSignTool(\"sign\")\n            ?? throw new Exception(\"Failed to locate sign tool\"),\n    };\n\n    var files = ctx.GetFiles(\"./.artifacts/*.nupkg\");\n    foreach (var file in files)\n    {\n        ctx.Information(\"Signing {0}...\", file.FullPath);\n\n        var arguments = new ProcessArgumentBuilder()\n            .Append(\"code\")\n            .Append(\"azure-key-vault\")\n            .AppendQuoted(file.FullPath)\n            .AppendSwitchQuoted(\"--file-list\", ctx.MakeAbsolute(ctx.File(\"./resources/signclient.filter\")).FullPath)\n            .AppendSwitchQuoted(\"--publisher-name\", \"Spectre Console\")\n            .AppendSwitchQuoted(\"--description\", \"A .NET library that makes it easier to create beautiful console applications.\")\n            .AppendSwitchQuoted(\"--description-url\", \"https://spectreconsole.net\")\n            .AppendSwitchQuoted(\"--azure-credential-type\", \"azure-cli\")\n            .AppendSwitchQuotedSecret(\"--azure-key-vault-certificate\", Argument<string>(\"keyvaultCertificate\"))\n            .AppendSwitchQuotedSecret(\"--azure-key-vault-url\", Argument<string>(\"keyvaultUrl\"));\n\n        ctx.Command(commandSettings, arguments);\n        ctx.Information(\"Done signing {0}.\", file.FullPath);\n    }\n\n    FilePath? ResolveSignTool(string name)\n    {\n        var path = ctx.MakeAbsolute(ctx.Directory(\".sign\").Path.CombineWithFilePath(name));\n        return ctx.FileExists(path) ? path : null;\n    }\n});\n\nTask(\"Publish-NuGet\")\n    .WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, \"Not running on GitHub Actions\")\n    .IsDependentOn(\"Sign-Binaries\")\n    .Does(ctx =>\n{\n    var apiKey = Argument<string?>(\"nuget-key\", null);\n    if (string.IsNullOrWhiteSpace(apiKey))\n    {\n        throw new CakeException(\"No NuGet API key was provided.\");\n    }\n\n    foreach (var file in ctx.GetFiles(\"./.artifacts/*.nupkg\"))\n    {\n        ctx.Information(\"Publishing {0}...\", file.GetFilename().FullPath);\n        DotNetNuGetPush(file.FullPath, new DotNetNuGetPushSettings\n        {\n            Source = \"https://api.nuget.org/v3/index.json\",\n            ApiKey = apiKey,\n        });\n    }\n});\n\n////////////////////////////////////////////////////////////////\n// Targets\n\nTask(\"Publish\")\n    .IsDependentOn(\"Publish-NuGet\");\n\nTask(\"Default\")\n    .IsDependentOn(\"Package\");\n\n////////////////////////////////////////////////////////////////\n// Execution\n\nRunTarget(target);"
  },
  {
    "path": "dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"verify.tool\": {\n      \"version\": \"0.7.0\",\n      \"commands\": [\n        \"dotnet-verify\"\n      ],\n      \"rollForward\": false\n    },\n    \"make\": {\n      \"version\": \"0.11.0\",\n      \"commands\": [\n        \"dotnet-make\"\n      ],\n      \"rollForward\": false\n    }\n  }\n}"
  },
  {
    "path": "global.json",
    "content": "{\r\n  \"$schema\": \"http://json.schemastore.org/global\",\r\n  \"sdk\": {\r\n    \"version\": \"10.0.201\",\r\n    \"rollForward\": \"latestFeature\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "resources/nuget/Spectre.Console.Ansi.md",
    "content": "# `Spectre.Console.Ansi`"
  },
  {
    "path": "resources/nuget/Spectre.Console.ImageSharp.md",
    "content": "# `Spectre.Console.ImageSharp`\n\nA .NET library that extends [Spectre.Console](https://github.com/spectreconsole/spectre.console) with ImageSharp superpowers.\n\nDetailed instructions for using `Spectre.Console.ImageSharp` are located on the project website, https://spectreconsole.net/widgets/canvas-image"
  },
  {
    "path": "resources/nuget/Spectre.Console.Json.md",
    "content": "# `Spectre.Console.Json`\n\nA .NET library that extends [Spectre.Console](https://github.com/spectreconsole/spectre.console) with JSON superpowers.\n\nDetailed instructions for using this library is located on  the project website, https://spectreconsole.net/widgets/json"
  },
  {
    "path": "resources/nuget/Spectre.Console.Testing.md",
    "content": "# `Spectre.Console.Testing`\n\nA .NET library that makes it easier to write unit tests for [Spectre.Console](https://github.com/spectreconsole/spectre.console) applications.\n\nDetailed instructions for using this library is located on  the project website, https://spectreconsole.net"
  },
  {
    "path": "resources/nuget/Spectre.Console.md",
    "content": "# `Spectre.Console`\n\nA .NET library that makes it easier to create beautiful, cross platform, console applications. It is heavily inspired by the excellent Python library, [Rich](https://github.com/willmcgugan/rich).\n\nDetailed instructions for using this library is located on  the project website, https://spectreconsole.net"
  },
  {
    "path": "resources/scripts/.gitignore",
    "content": "Generated\nTemp"
  },
  {
    "path": "resources/scripts/Generate-Colors.ps1",
    "content": "#!/usr/local/bin/pwsh\n\n##########################################################\n# Script that generates known colors and lookup tables.\n##########################################################\n\n$Output = Join-Path $PSScriptRoot \"Temp\"\n$Generator = Join-Path $PSScriptRoot \"/../../src/Generator\" \n$Source = Join-Path $PSScriptRoot \"/../../src/Spectre.Console\"\n\nif(!(Test-Path $Output -PathType Container)) {\n    New-Item -ItemType Directory -Path $Output | Out-Null\n}\n\n# Generate the files\nPush-Location $Generator\n&dotnet run -- colors \"$Output\"\nif(!$?) { \n    Pop-Location\n    Throw \"An error occured when generating code.\"\n}\nPop-Location\n\n# Copy the files to the correct location\nCopy-Item  (Join-Path \"$Output\" \"Color.Generated.cs\") -Destination \"$Source/Color.Generated.cs\"\nCopy-Item  (Join-Path \"$Output\" \"ColorPalette.Generated.cs\") -Destination \"$Source/Internal/Colors/ColorPalette.Generated.cs\"\nCopy-Item  (Join-Path \"$Output\" \"ColorTable.Generated.cs\") -Destination \"$Source/Internal/Colors/ColorTable.Generated.cs\""
  },
  {
    "path": "resources/scripts/Generate-Emoji.ps1",
    "content": "#!/usr/local/bin/pwsh\n\n##########################################################\n# Script that generates the emoji lookup table.\n##########################################################\n\n$Output = Join-Path $PSScriptRoot \"Temp\"\n$Generator = Join-Path $PSScriptRoot \"/../../src/Generator\"\n$Source = Join-Path $PSScriptRoot \"/../../src/Spectre.Console\"\n\nif(!(Test-Path $Output -PathType Container)) {\n    New-Item -ItemType Directory -Path $Output | Out-Null\n}\n\n# Generate the files\nPush-Location $Generator\n&dotnet run -- emoji \"$Output\" --input $Output\nif(!$?) {\n    Pop-Location\n    Throw \"An error occured when generating code.\"\n}\nPop-Location\n\n# Copy the files to the correct location\nCopy-Item  (Join-Path \"$Output\" \"Emoji.Generated.cs\") -Destination \"$Source/Emoji.Generated.cs\""
  },
  {
    "path": "resources/scripts/Generate-Spinners.ps1",
    "content": "#!/usr/local/bin/pwsh\n\n##########################################################\n# Script that generates progress spinners.\n##########################################################\n\n$Output = Join-Path $PSScriptRoot \"Temp\"\n$Generator = Join-Path $PSScriptRoot \"/../../src/Generator\"\n$Source = Join-Path $PSScriptRoot \"/../../src/Spectre.Console\"\n\nif(!(Test-Path $Output -PathType Container)) {\n    New-Item -ItemType Directory -Path $Output | Out-Null\n}\n\n# Generate the files\nPush-Location $Generator\n&dotnet run -- spinners \"$Output\"\nif(!$?) {\n    Pop-Location\n    Throw \"An error occured when generating code.\"\n}\nPop-Location\n\n# Copy the files to the correct location\nCopy-Item  (Join-Path \"$Output\" \"Spinner.Generated.cs\") -Destination \"$Source/Live/Progress/Spinner.Generated.cs\"\n"
  },
  {
    "path": "resources/signclient.filter",
    "content": "**/Spectre.Console*"
  },
  {
    "path": "src/.editorconfig",
    "content": "[*.cs]\n# Prefer file scoped namespace declarations\ncsharp_style_namespace_declarations = file_scoped:warning\n\n# Sort using and Import directives with System.* appearing first\ndotnet_sort_system_directives_first = true\ndotnet_separate_import_directive_groups = false\n\n# Avoid \"this.\" and \"Me.\" if not necessary\ndotnet_style_qualification_for_field = false:refactoring\ndotnet_style_qualification_for_property = false:refactoring\ndotnet_style_qualification_for_method = false:refactoring\ndotnet_style_qualification_for_event = false:refactoring\n\n# Use language keywords instead of framework type names for type references\ndotnet_style_predefined_type_for_locals_parameters_members = true:suggestion\ndotnet_style_predefined_type_for_member_access = true:suggestion\n\n# Suggest more modern language features when available\ndotnet_style_object_initializer = true:suggestion\ndotnet_style_collection_initializer = true:suggestion\ndotnet_style_coalesce_expression = true:suggestion\ndotnet_style_null_propagation = true:suggestion\ndotnet_style_explicit_tuple_names = true:suggestion\n\n# Non-private static fields are PascalCase\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.symbols = non_private_static_fields\ndotnet_naming_rule.non_private_static_fields_should_be_pascal_case.style = non_private_static_field_style\ndotnet_naming_symbols.non_private_static_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_static_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_static_fields.required_modifiers = static\ndotnet_naming_style.non_private_static_field_style.capitalization = pascal_case\n\n# Non-private readonly fields are PascalCase\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.symbols = non_private_readonly_fields\ndotnet_naming_rule.non_private_readonly_fields_should_be_pascal_case.style = non_private_readonly_field_style\ndotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field\ndotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, protected, internal, protected_internal, private_protected\ndotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly\ndotnet_naming_style.non_private_readonly_field_style.capitalization = pascal_case\n\n# Constants are PascalCase\ndotnet_naming_rule.constants_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.constants_should_be_pascal_case.symbols = constants\ndotnet_naming_rule.constants_should_be_pascal_case.style = constant_style\ndotnet_naming_symbols.constants.applicable_kinds = field, local\ndotnet_naming_symbols.constants.required_modifiers = const\ndotnet_naming_style.constant_style.capitalization = pascal_case\n\n# Instance fields are camelCase and start with _\ndotnet_naming_rule.instance_fields_should_be_camel_case.severity = suggestion\ndotnet_naming_rule.instance_fields_should_be_camel_case.symbols = instance_fields\ndotnet_naming_rule.instance_fields_should_be_camel_case.style = instance_field_style\ndotnet_naming_symbols.instance_fields.applicable_kinds = field\ndotnet_naming_style.instance_field_style.capitalization = camel_case\ndotnet_naming_style.instance_field_style.required_prefix = _\n\n# Locals and parameters are camelCase\ndotnet_naming_rule.locals_should_be_camel_case.severity = suggestion\ndotnet_naming_rule.locals_should_be_camel_case.symbols = locals_and_parameters\ndotnet_naming_rule.locals_should_be_camel_case.style = camel_case_style\ndotnet_naming_symbols.locals_and_parameters.applicable_kinds = parameter, local\ndotnet_naming_style.camel_case_style.capitalization = camel_case\n\n# Local functions are PascalCase\ndotnet_naming_rule.local_functions_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.local_functions_should_be_pascal_case.symbols = local_functions\ndotnet_naming_rule.local_functions_should_be_pascal_case.style = local_function_style\ndotnet_naming_symbols.local_functions.applicable_kinds = local_function\ndotnet_naming_style.local_function_style.capitalization = pascal_case\n\n# By default, name items with PascalCase\ndotnet_naming_rule.members_should_be_pascal_case.severity = suggestion\ndotnet_naming_rule.members_should_be_pascal_case.symbols = all_members\ndotnet_naming_rule.members_should_be_pascal_case.style = pascal_case_style\ndotnet_naming_symbols.all_members.applicable_kinds = *\ndotnet_naming_style.pascal_case_style.capitalization = pascal_case\n\n# Newline settings\ncsharp_new_line_before_open_brace = all\ncsharp_new_line_before_else = true\ncsharp_new_line_before_catch = true\ncsharp_new_line_before_finally = true\ncsharp_new_line_before_members_in_object_initializers = true\ncsharp_new_line_before_members_in_anonymous_types = true\ncsharp_new_line_between_query_expression_clauses = true\n\n# Indentation preferences\ncsharp_indent_block_contents = true\ncsharp_indent_braces = false\ncsharp_indent_case_contents = true\ncsharp_indent_case_contents_when_block = true\ncsharp_indent_switch_labels = true\ncsharp_indent_labels = flush_left\n\n# Prefer \"var\" everywhere\ncsharp_style_var_for_built_in_types = true:suggestion\ncsharp_style_var_when_type_is_apparent = true:suggestion\ncsharp_style_var_elsewhere = true:suggestion\n\n# Prefer method-like constructs to have a block body\ncsharp_style_expression_bodied_methods = false:none\ncsharp_style_expression_bodied_constructors = false:none\ncsharp_style_expression_bodied_operators = false:none\n\n# Prefer property-like constructs to have an expression-body\ncsharp_style_expression_bodied_properties = true:none\ncsharp_style_expression_bodied_indexers = true:none\ncsharp_style_expression_bodied_accessors = true:none\n\n# Suggest more modern language features when available\ncsharp_style_pattern_matching_over_is_with_cast_check = true:suggestion\ncsharp_style_pattern_matching_over_as_with_null_check = true:suggestion\ncsharp_style_inlined_variable_declaration = true:suggestion\ncsharp_style_throw_expression = true:suggestion\ncsharp_style_conditional_delegate_call = true:suggestion\n\n# Space preferences\ncsharp_space_after_cast = false\ncsharp_space_after_colon_in_inheritance_clause = true\ncsharp_space_after_comma = true\ncsharp_space_after_dot = false\ncsharp_space_after_keywords_in_control_flow_statements = true\ncsharp_space_after_semicolon_in_for_statement = true\ncsharp_space_around_binary_operators = before_and_after\ncsharp_space_around_declaration_statements = do_not_ignore\ncsharp_space_before_colon_in_inheritance_clause = true\ncsharp_space_before_comma = false\ncsharp_space_before_dot = false\ncsharp_space_before_open_square_brackets = false\ncsharp_space_before_semicolon_in_for_statement = false\ncsharp_space_between_empty_square_brackets = false\ncsharp_space_between_method_call_empty_parameter_list_parentheses = false\ncsharp_space_between_method_call_name_and_opening_parenthesis = false\ncsharp_space_between_method_call_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_empty_parameter_list_parentheses = false\ncsharp_space_between_method_declaration_name_and_open_parenthesis = false\ncsharp_space_between_method_declaration_parameter_list_parentheses = false\ncsharp_space_between_parentheses = false\ncsharp_space_between_square_brackets = false\n\n# Blocks are allowed\ncsharp_prefer_braces = true:silent\ncsharp_preserve_single_line_blocks = true\ncsharp_preserve_single_line_statements = true\n\n# RS0037: PublicAPI.txt is missing '#nullable enable'\ndotnet_diagnostic.rs0037.severity = none\n\n# IDE0055: Fix formatting\ndotnet_diagnostic.ide0055.severity = warning\n\n# SA1101: Prefix local calls with this\ndotnet_diagnostic.sa1101.severity = none\n\n# SA1633: File should have header\ndotnet_diagnostic.sa1633.severity = none\n\n# SA1201: Elements should appear in the correct order\ndotnet_diagnostic.sa1201.severity = none\n\n# SA1202: Public members should come before private members\ndotnet_diagnostic.sa1202.severity = none\n\n# SA1309: Field names should not begin with underscore\ndotnet_diagnostic.sa1309.severity = none\n\n# SA1404: Code analysis suppressions should have justification\ndotnet_diagnostic.sa1404.severity = none\n\n# SA1516: Elements should be separated by a blank line\ndotnet_diagnostic.sa1516.severity = none\n\n# CA1303: Do not pass literals as localized parameters\ndotnet_diagnostic.ca1303.severity = none\n\n# CSA1204: Static members should appear before non-static members\ndotnet_diagnostic.sa1204.severity = none\n\n# IDE0052: Remove unread private members\ndotnet_diagnostic.ide0052.severity = warning\n\n# IDE0063: Use simple 'using' statement\ncsharp_prefer_simple_using_statement = false:suggestion\n\n# IDE0018: Variable declaration can be inlined\ndotnet_diagnostic.ide0018.severity = warning\n\n# SA1625: Element documenation should not be copied and pasted\ndotnet_diagnostic.sa1625.severity = none\n\n# IDE0005: Using directive is unnecessary\ndotnet_diagnostic.ide0005.severity = warning\n\n# SA1117: Parameters should be on same line or separate lines\ndotnet_diagnostic.sa1117.severity = none\n\n# SA1404: Code analysis suppression should have justification\ndotnet_diagnostic.sa1404.severity = none\n\n# SA1101: Prefix local calls with this\ndotnet_diagnostic.sa1101.severity = none\n\n# SA1633: File should have header\ndotnet_diagnostic.sa1633.severity = none\n\n# SA1649: File name should match first type name\ndotnet_diagnostic.sa1649.severity = none\n\n# SA1402: File may only contain a single type\ndotnet_diagnostic.sa1402.severity = none\n\n# CA1814: Prefer jagged arrays over multidimensional\ndotnet_diagnostic.ca1814.severity = none\n\n# RCS1194: Implement exception constructors.\ndotnet_diagnostic.rcs1194.severity = none\n\n# CA1032: Implement standard exception constructors\ndotnet_diagnostic.ca1032.severity = none\n\n# CA1826: Do not use Enumerable methods on indexable collections. Instead use the collection directly\ndotnet_diagnostic.ca1826.severity = none\n\n# RCS1079: Throwing of new NotImplementedException.\ndotnet_diagnostic.rcs1079.severity = warning\n\n# RCS1057: Add empty line between declarations.\ndotnet_diagnostic.rcs1057.severity = none\n\n# RCS1057: Validate arguments correctly\ndotnet_diagnostic.rcs1227.severity = none\n\n# IDE0004: Remove Unnecessary Cast\ndotnet_diagnostic.ide0004.severity = warning\n\n# CA1810: Initialize reference type static fields inline\ndotnet_diagnostic.ca1810.severity = none\n\n# IDE0044: Add readonly modifier\ndotnet_diagnostic.ide0044.severity = warning\n\n# RCS1047: Non-asynchronous method name should not end with 'Async'.\ndotnet_diagnostic.rcs1047.severity = none\n\n# RCS1090: Call 'ConfigureAwait(false)'.\ndotnet_diagnostic.rcs1090.severity = warning\n\n# SA1633: The file header is missing or not located at the top of the file\ndotnet_diagnostic.sa1633.severity = none\n\n# CA2016: Forward the CancellationToken parameter to methods that take one\ndotnet_diagnostic.ca2016.severity = warning\n\n# ReSharper properties\nresharper_trailing_comma_in_multiline_lists = true\nresharper_wrap_object_and_collection_initializer_style = chop_always\n"
  },
  {
    "path": "src/Benchmarks/BenchmarkDotNet.Artifacts/results/Benchmarks.AnsiBenchmarks-report-github.md",
    "content": "```\n\nBenchmarkDotNet v0.15.8, macOS Tahoe 26.2 (25C56) [Darwin 25.2.0]\nApple M3 Pro, 1 CPU, 11 logical and 11 physical cores\n.NET SDK 10.0.101\n  [Host]    : .NET 10.0.1 (10.0.1, 10.0.125.57005), Arm64 RyuJIT armv8.0-a\n  .NET 10.0 : .NET 10.0.1 (10.0.1, 10.0.125.57005), Arm64 RyuJIT armv8.0-a\n  .NET 8.0  : .NET 8.0.17 (8.0.17, 8.0.1725.26602), Arm64 RyuJIT armv8.0-a\n  .NET 9.0  : .NET 9.0.10 (9.0.10, 9.0.1025.47515), Arm64 RyuJIT armv8.0-a\n\n\n```\n| Method           | Job       | Runtime   | Mean     | Error   | StdDev  | Gen0   | Gen1   | Allocated |\n|----------------- |---------- |---------- |---------:|--------:|--------:|-------:|-------:|----------:|\n| RenderableToAnsi | .NET 10.0 | .NET 10.0 | 786.6 ns | 1.87 ns | 1.75 ns | 0.3662 | 0.0010 |   2.99 KB |\n| RenderableToAnsi | .NET 8.0  | .NET 8.0  | 897.3 ns | 2.21 ns | 1.96 ns | 0.3815 | 0.0010 |   3.12 KB |\n| RenderableToAnsi | .NET 9.0  | .NET 9.0  | 935.2 ns | 3.13 ns | 2.77 ns | 0.3700 | 0.0010 |   3.02 KB |\n"
  },
  {
    "path": "src/Benchmarks/BenchmarkDotNet.Artifacts/results/Benchmarks.RenderBenchmarks-report-github.md",
    "content": "```\n\nBenchmarkDotNet v0.15.8, macOS Tahoe 26.2 (25C56) [Darwin 25.2.0]\nApple M3 Pro, 1 CPU, 11 logical and 11 physical cores\n.NET SDK 10.0.101\n  [Host]    : .NET 10.0.1 (10.0.1, 10.0.125.57005), Arm64 RyuJIT armv8.0-a\n  .NET 10.0 : .NET 10.0.1 (10.0.1, 10.0.125.57005), Arm64 RyuJIT armv8.0-a\n  .NET 8.0  : .NET 8.0.17 (8.0.17, 8.0.1725.26602), Arm64 RyuJIT armv8.0-a\n  .NET 9.0  : .NET 9.0.10 (9.0.10, 9.0.1025.47515), Arm64 RyuJIT armv8.0-a\n\n\n```\n| Method | Job       | Runtime   | Mean     | Error   | StdDev  | Gen0   | Gen1   | Allocated |\n|------- |---------- |---------- |---------:|--------:|--------:|-------:|-------:|----------:|\n| Render | .NET 10.0 | .NET 10.0 | 723.8 ns | 4.00 ns | 3.74 ns | 0.2956 | 0.0124 |   2.42 KB |\n| Render | .NET 8.0  | .NET 8.0  | 842.7 ns | 9.63 ns | 8.54 ns | 0.3119 | 0.0124 |   2.55 KB |\n| Render | .NET 9.0  | .NET 9.0  | 859.7 ns | 6.40 ns | 4.99 ns | 0.3004 | 0.0124 |   2.46 KB |\n"
  },
  {
    "path": "src/Benchmarks/Benchmarks.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>\n    <IsPackable>true</IsPackable>\n    <IsAotCompatible>true</IsAotCompatible>\n    <IsPackable>false</IsPackable>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>false</GenerateDocumentationFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"BenchmarkDotNet\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Spectre.Console\\Spectre.Console.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Benchmarks/EmojiBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Jobs;\nusing Spectre.Console;\n\nnamespace Benchmarks;\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.Net10_0)]\npublic class EmojiBenchmarks\n{\n    [Benchmark]\n    public void Replace_NoEmoji()\n    {\n        Emoji.Replace(\"Hello Spectre.Console!\");\n    }\n\n    [Benchmark]\n    public void Replace_NoEmoji_ButColon()\n    {\n        Emoji.Replace(\"https://spectreconsole.net\");\n    }\n\n    [Benchmark]\n    public void Replace_Emoji()\n    {\n        Emoji.Replace(\"Hello :ghost:.Console!\");\n    }\n}"
  },
  {
    "path": "src/Benchmarks/MarkupBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Jobs;\nusing Spectre.Console;\n\nnamespace Benchmarks;\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.Net10_0)]\npublic class MarkupBenchmarks\n{\n    private const string Input = \"[yellow]Hello [italic][link=https://spectreconsole.net]Spectre.Console Docs[/][/]![/]\";\n\n    [Benchmark]\n    public void Markup_Constructor()\n    {\n        _ = new Markup(Input);\n    }\n\n    [Benchmark]\n    public void AnsiMarkup_Parse()\n    {\n        AnsiMarkup.Parse(Input);\n    }\n}"
  },
  {
    "path": "src/Benchmarks/ParagraphBenchmarks.cs",
    "content": "using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Jobs;\nusing Spectre.Console;\n\nnamespace Benchmarks;\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.Net10_0)]\npublic class ParagraphBenchmarks\n{\n    private const string TextOneLine = \"This string is all on one line.\";\n    private const string TextMultiLine = \"This string\\nhas multiple\\nlines.\";\n\n    public static IEnumerable<object[]> Arguments => [\n        [TextOneLine],\n        [TextMultiLine],\n    ];\n\n    [Benchmark]\n    [ArgumentsSource(nameof(Arguments))]\n    public void Append(string text)\n    {\n        new Paragraph().Append(text);\n    }\n}"
  },
  {
    "path": "src/Benchmarks/Program.cs",
    "content": "﻿using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Jobs;\nusing BenchmarkDotNet.Running;\nusing Spectre.Console;\nusing Spectre.Console.Rendering;\n\nnamespace Benchmarks;\n\npublic static class Program\n{\n    public static int Main(string[] args)\n    {\n        BenchmarkRunner.Run(typeof(Program).Assembly);\n        return 0;\n    }\n}\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.Net80)]\n[SimpleJob(RuntimeMoniker.Net90)]\n[SimpleJob(RuntimeMoniker.Net10_0)]\npublic class RenderBenchmarks\n{\n    private IAnsiConsole _console = null!;\n    private IRenderable _renderable = null!;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        _console =\n            AnsiConsole.Create(new AnsiConsoleSettings\n            {\n                Ansi = AnsiSupport.Detect,\n                ColorSystem = ColorSystemSupport.TrueColor,\n                Out = new AnsiConsoleOutput(new StringWriter()),\n                Interactive = InteractionSupport.No,\n                EnvironmentVariables = null\n            });\n\n        _renderable = new Markup(\"[yellow]Hello[/] [blue]World[/]\");\n    }\n\n    [Benchmark]\n    public void Render() => _console.Write(_renderable);\n}\n\n[MemoryDiagnoser]\n[SimpleJob(RuntimeMoniker.Net80)]\n[SimpleJob(RuntimeMoniker.Net90)]\n[SimpleJob(RuntimeMoniker.Net10_0)]\npublic class AnsiBenchmarks\n{\n    private IAnsiConsole _console = null!;\n    private IRenderable _renderable = null!;\n\n    [GlobalSetup]\n    public void Setup()\n    {\n        _console =\n            AnsiConsole.Create(new AnsiConsoleSettings\n            {\n                Ansi = AnsiSupport.Detect,\n                ColorSystem = ColorSystemSupport.TrueColor,\n                Out = new AnsiConsoleOutput(new StringWriter()),\n                Interactive = InteractionSupport.No,\n                EnvironmentVariables = null\n            });\n\n        _renderable = new Markup(\"[yellow]Hello[/] [blue]World[/]\");\n    }\n\n    [Benchmark]\n    public void RenderableToAnsi() => _console.ToAnsi(_renderable);\n}"
  },
  {
    "path": "src/Directory.Build.props",
    "content": "﻿<Project>\n  <PropertyGroup Label=\"Settings\">\n    <Deterministic>true</Deterministic>\n    <LangVersion>14</LangVersion>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>embedded</DebugType>\n    <PublishRepositoryUrl>true</PublishRepositoryUrl>\n    <EmbedUntrackedSources>true</EmbedUntrackedSources>\n    <MinVerSkip Condition=\"'$(Configuration)' == 'Debug'\">true</MinVerSkip>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <IsPackable>false</IsPackable>\n    <Nullable>enable</Nullable>\n    <NoWarn>$(NoWarn);SA1633</NoWarn>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)\\..\\resources\\spectre.snk</AssemblyOriginatorKeyFile>\n    <PublicKey>00240000048000009400000006020000002400005253413100040000010001006146d3789d31477cf4a3b508dcf772ff9ccad8613f6bd6b17b9c4a960a7a7b551ecd22e4f4119ced70ee8bbdf3ca0a117c99fd6248c16255ea9033110c2233d42e74e81bf4f3f7eb09bfe8b53ad399d957514f427171a86f5fe9fe0014be121d571c80c4a0cfc3531bdbf5a2900d936d93f2c94171b9134f7644a1ac3612a0d0</PublicKey>\n    <PolyArgumentExceptions>true</PolyArgumentExceptions>\n  </PropertyGroup>\n\n  <!-- Disable nullability for netstandard2.0 since polyfills are not -->\n  <!-- working correctly with nullability analysis. -->\n  <!-- This is no big deal since nullability is checked for other TFMs. -->\n  <PropertyGroup Condition=\"'$(TargetFramework)' == 'netstandard2.0'\">\n    <Nullable>disable</Nullable>\n    <NoWarn>$(NoWarn);CS8632</NoWarn>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(GITHUB_ACTIONS)' == 'true'\">\n    <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\"$(IsPackable)\">\n    <None Include=\"$(MSBuildThisFileDirectory)../resources/nuget/logo.png\">\n      <Pack>true</Pack>\n      <PackagePath>\\</PackagePath>\n      <Link>Properties/Package/Logo.png</Link>\n    </None>\n    <None Include=\"$(MSBuildThisFileDirectory)../resources/nuget/$(AssemblyName).md\">\n      <Pack>true</Pack>\n      <PackagePath>\\README.md</PackagePath>\n      <Link>Properties/Package/README.md</Link>\n    </None>\n  </ItemGroup>\n\n  <PropertyGroup>\n    <Description>A library that makes it easier to create beautiful console applications.</Description>\n    <Copyright>Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray</Copyright>\n    <Authors>Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray</Authors>\n    <RepositoryType>git</RepositoryType>\n    <RepositoryUrl>https://github.com/spectreconsole/spectre.console</RepositoryUrl>\n    <PackageIcon>logo.png</PackageIcon>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>\n    <PackageProjectUrl>https://github.com/spectreconsole/spectre.console</PackageProjectUrl>\n    <PackageLicenseExpression>MIT</PackageLicenseExpression>\n    <PackageReleaseNotes>https://github.com/spectreconsole/spectre.console/releases</PackageReleaseNotes>\n  </PropertyGroup>\n\n  <ItemGroup Condition=\"'$(UseBuildTimeTools)' != 'false'\">\n    <PackageReference Include=\"MinVer\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Microsoft.SourceLink.GitHub\" PrivateAssets=\"All\" />\n    <PackageReference Include=\"Roslynator.Analyzers\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "src/Directory.Packages.props",
    "content": "<Project>\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageVersion Include=\"Backport.System.Threading.Lock\" Version=\"3.1.6\" />\n    <PackageVersion Include=\"BenchmarkDotNet\" Version=\"0.15.8\" />\n    <PackageVersion Include=\"IsExternalInit\" Version=\"1.0.3\" />\n    <PackageVersion Include=\"Microsoft.NET.Test.Sdk\" Version=\"18.3.0\" />\n    <PackageVersion Include=\"Microsoft.SourceLink.GitHub\" PrivateAssets=\"All\" Version=\"10.0.201\" />\n    <PackageVersion Include=\"MinVer\" PrivateAssets=\"All\" Version=\"7.0.0\" />\n    <PackageVersion Include=\"Newtonsoft.Json\" Version=\"13.0.4\" />\n    <PackageVersion Include=\"Polyfill\" Version=\"9.21.0\" />\n    <PackageVersion Include=\"Roslynator.Analyzers\" PrivateAssets=\"All\" Version=\"4.15.0\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.CSharp\" Version=\"5.3.0\" />\n    <PackageVersion Include=\"Microsoft.CodeAnalysis.Analyzers\" Version=\"5.3.0\" />\n    <PackageVersion Include=\"System.Text.Json\" Version=\"10.0.5\" />\n    <PackageVersion Include=\"Shouldly\" Version=\"4.3.0\" />\n    <PackageVersion Include=\"SixLabors.ImageSharp\" Version=\"3.1.12\" />\n    <PackageVersion Include=\"Spectre.Verify.Extensions\" Version=\"28.16.0\" />\n    <PackageVersion Include=\"Microsoft.Bcl.TimeProvider\" Version=\"10.0.5\" />\n    <PackageVersion Include=\"System.Memory\" Version=\"4.6.3\" />\n    <PackageVersion Include=\"Verify.Xunit\" Version=\"31.9.4\" />\n    <PackageVersion Include=\"Wcwidth.Sources\" Version=\"4.0.1\" />\n    <PackageVersion Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageVersion Include=\"xunit.runner.visualstudio\" Version=\"3.1.5\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageVersion>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/Extensions/Spectre.Console.ImageSharp/CanvasImage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing SixLabors.ImageSharp;\nusing SixLabors.ImageSharp.PixelFormats;\nusing SixLabors.ImageSharp.Processing;\nusing SixLabors.ImageSharp.Processing.Processors.Transforms;\nusing Spectre.Console.Rendering;\n\nnamespace Spectre.Console;\n\n/// <summary>\n/// Represents a renderable image.\n/// </summary>\npublic sealed class CanvasImage : Renderable\n{\n    private static readonly IResampler _defaultResampler = KnownResamplers.Bicubic;\n\n    /// <summary>\n    /// Gets the image width.\n    /// </summary>\n    public int Width => Image.Width;\n\n    /// <summary>\n    /// Gets the image height.\n    /// </summary>\n    public int Height => Image.Height;\n\n    /// <summary>\n    /// Gets or sets the render width of the canvas.\n    /// </summary>\n    public int? MaxWidth { get; set; }\n\n    /// <summary>\n    /// Gets or sets the render width of the canvas.\n    /// </summary>\n    [Obsolete(\"Not used anymore. Will be removed in future update.\")]\n    public int PixelWidth { get; set; } = 2;\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"IResampler\"/> that should\n    /// be used when scaling the image. Defaults to bicubic sampling.\n    /// </summary>\n    public IResampler? Resampler { get; set; }\n\n    internal SixLabors.ImageSharp.Image<Rgba32> Image { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CanvasImage\"/> class.\n    /// </summary>\n    /// <param name=\"filename\">The image filename.</param>\n    public CanvasImage(string filename)\n    {\n        Image = SixLabors.ImageSharp.Image.Load<Rgba32>(filename);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CanvasImage\"/> class.\n    /// </summary>\n    /// <param name=\"data\">Buffer containing an image.</param>\n    public CanvasImage(ReadOnlySpan<byte> data)\n    {\n        Image = SixLabors.ImageSharp.Image.Load<Rgba32>(data);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CanvasImage\"/> class.\n    /// </summary>\n    /// <param name=\"data\">Stream containing an image.</param>\n    public CanvasImage(Stream data)\n    {\n        Image = SixLabors.ImageSharp.Image.Load<Rgba32>(data);\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var pixelWidth = options.Unicode ? 1 : 2;\n        var width = MaxWidth ?? Width;\n        if (maxWidth < width * pixelWidth)\n        {\n            return new Measurement(maxWidth, maxWidth);\n        }\n\n        return new Measurement(width * pixelWidth, width * pixelWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var image = Image;\n        var width = Width;\n        var height = Height;\n        var pixelWidth = options.Unicode ? 1 : 2;\n\n        // Got a max width?\n        if (MaxWidth != null)\n        {\n            height = (int)(height * ((float)MaxWidth.Value) / Width);\n            width = MaxWidth.Value;\n        }\n\n        // Exceed the max width when we take pixel width into account?\n        if (width * pixelWidth > maxWidth)\n        {\n            height = (int)(height * (maxWidth / (float)(width * pixelWidth)));\n            width = maxWidth / pixelWidth;\n        }\n\n        // Need to rescale the pixel buffer?\n        if (width != Width || height != Height)\n        {\n            var resampler = Resampler ?? _defaultResampler;\n            image = image.Clone(); // Clone the original image\n            image.Mutate(i => i.Resize(width, height, resampler));\n        }\n\n        var canvas = new Canvas(width, height)\n        {\n            MaxWidth = MaxWidth,\n            Scale = false,\n        };\n\n        for (var y = 0; y < image.Height; y++)\n        {\n            for (var x = 0; x < image.Width; x++)\n            {\n                if (image[x, y].A == 0)\n                {\n                    continue;\n                }\n\n                canvas.SetPixel(x, y, new Color(\n                    image[x, y].R, image[x, y].G, image[x, y].B));\n            }\n        }\n\n        return ((IRenderable)canvas).Render(options, maxWidth);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.ImageSharp/CanvasImageExtensions.cs",
    "content": "using System;\nusing SixLabors.ImageSharp.Processing;\n\nnamespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"CanvasImage\"/>.\n/// </summary>\npublic static class CanvasImageExtensions\n{\n    /// <summary>\n    /// Sets the maximum width of the rendered image.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <param name=\"maxWidth\">The maximum width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage MaxWidth(this CanvasImage image, int? maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.MaxWidth = maxWidth;\n        return image;\n    }\n\n    /// <summary>\n    /// Disables the maximum width of the rendered image.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage NoMaxWidth(this CanvasImage image)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.MaxWidth = null;\n        return image;\n    }\n\n    /// <summary>\n    /// Sets the pixel width.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <param name=\"width\">The pixel width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    [Obsolete(\"Not used anymore. Will be removed in future update.\")]\n    public static CanvasImage PixelWidth(this CanvasImage image, int width)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.PixelWidth = width;\n        return image;\n    }\n\n    /// <summary>\n    /// Mutates the underlying image.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <param name=\"action\">The action that mutates the underlying image.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage Mutate(this CanvasImage image, Action<IImageProcessingContext> action)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        ArgumentNullException.ThrowIfNull(action);\n\n        image.Image.Mutate(action);\n        return image;\n    }\n\n    /// <summary>\n    /// Uses a bicubic sampler that implements the bicubic kernel algorithm W(x).\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage BicubicResampler(this CanvasImage image)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.Resampler = KnownResamplers.Bicubic;\n        return image;\n    }\n\n    /// <summary>\n    /// Uses a bilinear sampler. This interpolation algorithm\n    /// can be used where perfect image transformation with pixel matching is impossible,\n    /// so that one can calculate and assign appropriate intensity values to pixels.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage BilinearResampler(this CanvasImage image)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.Resampler = KnownResamplers.Triangle;\n        return image;\n    }\n\n    /// <summary>\n    /// Uses a Nearest-Neighbour sampler that implements the nearest neighbor algorithm.\n    /// This uses a very fast, unscaled filter which will select the closest pixel to\n    /// the new pixels position.\n    /// </summary>\n    /// <param name=\"image\">The canvas image.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static CanvasImage NearestNeighborResampler(this CanvasImage image)\n    {\n        ArgumentNullException.ThrowIfNull(image);\n\n        image.Resampler = KnownResamplers.NearestNeighbor;\n        return image;\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>\n    <IsPackable>true</IsPackable>\n    <Description>A library that extends Spectre.Console with ImageSharp superpowers.</Description>\n  </PropertyGroup>\n  <PropertyGroup>\n    <IsAotCompatible Condition=\"'$(TargetFramework)' != 'netstandard2.0'\" >true</IsAotCompatible>\n    <PolySharpIncludeRuntimeSupportedAttributes>true</PolySharpIncludeRuntimeSupportedAttributes>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"SixLabors.ImageSharp\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Spectre.Console\\Spectre.Console.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/IJsonParser.cs",
    "content": "namespace Spectre.Console.Json;\n\n/// <summary>\n/// Represents a JSON parser.\n/// </summary>\npublic interface IJsonParser\n{\n    /// <summary>\n    /// Parses the provided JSON into an abstract syntax tree.\n    /// </summary>\n    /// <param name=\"json\">The JSON to parse.</param>\n    /// <returns>An <see cref=\"JsonSyntax\"/> instance.</returns>\n    JsonSyntax Parse(string json);\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonBuilder.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal sealed class JsonBuilderContext\n{\n    public Paragraph Paragraph { get; }\n    public int Level { get; set; }\n    public string Indentation { get; set; }\n    public JsonTextStyles Styling { get; }\n\n    public JsonBuilderContext(\n        JsonTextStyles styling, string indentation)\n    {\n        Paragraph = new Paragraph();\n        Styling = styling;\n        Indentation = indentation;\n    }\n\n    public void InsertIndentation()\n    {\n        for (var level = 0; level < Level; level++)\n        {\n            Paragraph.Append(Indentation);\n        }\n    }\n}\n\ninternal sealed class JsonBuilder : JsonSyntaxVisitor<JsonBuilderContext>\n{\n    public static JsonBuilder Shared { get; } = new JsonBuilder();\n\n    public override void VisitObject(JsonObject syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(\"{\", context.Styling.BracesStyle);\n        context.Paragraph.Append(\"\\n\");\n        context.Level++;\n\n        foreach (var (_, _, last, property) in syntax.Members.Enumerate())\n        {\n            context.InsertIndentation();\n            property.Accept(this, context);\n\n            if (!last)\n            {\n                context.Paragraph.Append(\",\", context.Styling.CommaStyle);\n            }\n\n            context.Paragraph.Append(\"\\n\");\n        }\n\n        context.Level--;\n        context.InsertIndentation();\n        context.Paragraph.Append(\"}\", context.Styling.BracesStyle);\n    }\n\n    public override void VisitArray(JsonArray syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(\"[\", context.Styling.BracketsStyle);\n        context.Paragraph.Append(\"\\n\");\n        context.Level++;\n\n        foreach (var (_, _, last, item) in syntax.Items.Enumerate())\n        {\n            context.InsertIndentation();\n            item.Accept(this, context);\n\n            if (!last)\n            {\n                context.Paragraph.Append(\",\", context.Styling.CommaStyle);\n            }\n\n            context.Paragraph.Append(\"\\n\");\n        }\n\n        context.Level--;\n        context.InsertIndentation();\n        context.Paragraph.Append(\"]\", context.Styling.BracketsStyle);\n    }\n\n    public override void VisitMember(JsonMember syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(syntax.Name, context.Styling.MemberStyle);\n        context.Paragraph.Append(\":\", context.Styling.ColonStyle);\n        context.Paragraph.Append(\" \");\n\n        syntax.Value.Accept(this, context);\n    }\n\n    public override void VisitNumber(JsonNumber syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(syntax.Lexeme, context.Styling.NumberStyle);\n    }\n\n    public override void VisitString(JsonString syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(syntax.Lexeme, context.Styling.StringStyle);\n    }\n\n    public override void VisitBoolean(JsonBoolean syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(syntax.Lexeme, context.Styling.BooleanStyle);\n    }\n\n    public override void VisitNull(JsonNull syntax, JsonBuilderContext context)\n    {\n        context.Paragraph.Append(syntax.Lexeme, context.Styling.NullStyle);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonParser.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal sealed class JsonParser : IJsonParser\n{\n    public static JsonParser Shared { get; } = new JsonParser();\n\n    public JsonSyntax Parse(string json)\n    {\n        try\n        {\n            var tokens = JsonTokenizer.Tokenize(json);\n            var reader = new JsonTokenReader(tokens);\n            return ParseElement(reader);\n        }\n        catch\n        {\n            throw new InvalidOperationException(\"Invalid JSON\");\n        }\n    }\n\n    private static JsonSyntax ParseElement(JsonTokenReader reader)\n    {\n        return ParseValue(reader);\n    }\n\n    private static List<JsonSyntax> ParseElements(JsonTokenReader reader)\n    {\n        var members = new List<JsonSyntax>();\n\n        while (!reader.Eof)\n        {\n            members.Add(ParseElement(reader));\n\n            if (reader.Peek()?.Type != JsonTokenType.Comma)\n            {\n                break;\n            }\n\n            reader.Consume(JsonTokenType.Comma);\n        }\n\n        return members;\n    }\n\n    private static JsonSyntax ParseValue(JsonTokenReader reader)\n    {\n        var current = reader.Peek();\n        if (current == null)\n        {\n            throw new InvalidOperationException(\"Could not parse value (EOF)\");\n        }\n\n        if (current.Type == JsonTokenType.LeftBrace)\n        {\n            return ParseObject(reader);\n        }\n\n        if (current.Type == JsonTokenType.LeftBracket)\n        {\n            return ParseArray(reader);\n        }\n\n        if (current.Type == JsonTokenType.Number)\n        {\n            reader.Consume(JsonTokenType.Number);\n            return new JsonNumber(current.Lexeme);\n        }\n\n        if (current.Type == JsonTokenType.String)\n        {\n            reader.Consume(JsonTokenType.String);\n            return new JsonString(current.Lexeme);\n        }\n\n        if (current.Type == JsonTokenType.Boolean)\n        {\n            reader.Consume(JsonTokenType.Boolean);\n            return new JsonBoolean(current.Lexeme);\n        }\n\n        if (current.Type == JsonTokenType.Null)\n        {\n            reader.Consume(JsonTokenType.Null);\n            return new JsonNull(current.Lexeme);\n        }\n\n        throw new InvalidOperationException($\"Unknown value token: {current.Type}\");\n    }\n\n    private static JsonSyntax ParseObject(JsonTokenReader reader)\n    {\n        reader.Consume(JsonTokenType.LeftBrace);\n\n        var result = new JsonObject();\n\n        if (reader.Peek()?.Type != JsonTokenType.RightBrace)\n        {\n            result.Members.AddRange(ParseMembers(reader));\n        }\n\n        reader.Consume(JsonTokenType.RightBrace);\n        return result;\n    }\n\n    private static JsonSyntax ParseArray(JsonTokenReader reader)\n    {\n        reader.Consume(JsonTokenType.LeftBracket);\n\n        var result = new JsonArray();\n\n        if (reader.Peek()?.Type != JsonTokenType.RightBracket)\n        {\n            result.Items.AddRange(ParseElements(reader));\n        }\n\n        reader.Consume(JsonTokenType.RightBracket);\n        return result;\n    }\n\n    private static List<JsonMember> ParseMembers(JsonTokenReader reader)\n    {\n        var members = new List<JsonMember>();\n\n        while (!reader.Eof)\n        {\n            members.Add(ParseMember(reader));\n\n            if (reader.Peek()?.Type != JsonTokenType.Comma)\n            {\n                break;\n            }\n\n            reader.Consume(JsonTokenType.Comma);\n        }\n\n        return members;\n    }\n\n    private static JsonMember ParseMember(JsonTokenReader reader)\n    {\n        var name = reader.Consume(JsonTokenType.String);\n        reader.Consume(JsonTokenType.Colon);\n        var value = ParseElement(reader);\n        return new JsonMember(name.Lexeme, value);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonText.cs",
    "content": "namespace Spectre.Console.Json;\n\n/// <summary>\n/// A renderable piece of JSON text.\n/// </summary>\npublic sealed class JsonText : JustInTimeRenderable\n{\n    private readonly string _json;\n    private JsonSyntax? _syntax;\n\n    /// <summary>\n    /// Gets or sets the style used for braces.\n    /// </summary>\n    public Style? BracesStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for brackets.\n    /// </summary>\n    public Style? BracketsStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for member names.\n    /// </summary>\n    public Style? MemberStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for colons.\n    /// </summary>\n    public Style? ColonStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for commas.\n    /// </summary>\n    public Style? CommaStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for string literals.\n    /// </summary>\n    public Style? StringStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for number literals.\n    /// </summary>\n    public Style? NumberStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for boolean literals.\n    /// </summary>\n    public Style? BooleanStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style used for <c>null</c> literals.\n    /// </summary>\n    public Style? NullStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the indentation.\n    /// Defaults to three spaces.\n    /// </summary>\n    public string Indentation { get; set; } = \"   \";\n\n    /// <summary>\n    /// Gets or sets the JSON parser.\n    /// </summary>\n    public IJsonParser? Parser\n    {\n        get;\n        set\n        {\n            _syntax = null;\n            field = value;\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonText\"/> class.\n    /// </summary>\n    /// <param name=\"json\">The JSON to render.</param>\n    public JsonText(string json)\n    {\n        _json = json ?? throw new ArgumentNullException(nameof(json));\n    }\n\n    /// <inheritdoc/>\n    protected override IRenderable Build()\n    {\n        _syntax ??= (Parser ?? JsonParser.Shared).Parse(_json);\n\n        var context = new JsonBuilderContext(\n            new JsonTextStyles\n            {\n                BracesStyle = BracesStyle ?? Color.Grey,\n                BracketsStyle = BracketsStyle ?? Color.Grey,\n                MemberStyle = MemberStyle ?? Color.Blue,\n                ColonStyle = ColonStyle ?? Color.Yellow,\n                CommaStyle = CommaStyle ?? Color.Grey,\n                StringStyle = StringStyle ?? Color.Red,\n                NumberStyle = NumberStyle ?? Color.Green,\n                BooleanStyle = BooleanStyle ?? Color.Green,\n                NullStyle = NullStyle ?? Color.Grey,\n            }, Indentation);\n\n        _syntax.Accept(JsonBuilder.Shared, context);\n        return context.Paragraph;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"JsonText\"/>.\n/// </summary>\npublic static class JsonTextExtensions\n{\n    /// <summary>\n    /// Sets the style used for braces.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BracesStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BracesStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for brackets.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BracketStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BracketsStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for member names.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText MemberStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.MemberStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for colons.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText ColonStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.ColonStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for commas.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText CommaStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.CommaStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for string literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText StringStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.StringStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for number literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText NumberStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.NumberStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for boolean literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BooleanStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BooleanStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the style used for <c>null</c> literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"style\">The style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText NullStyle(this JsonText text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.NullStyle = style;\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for braces.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BracesColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BracesStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for brackets.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BracketColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BracketsStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for member names.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText MemberColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.MemberStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for colons.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText ColonColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.ColonStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for commas.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText CommaColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.CommaStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for string literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText StringColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.StringStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for number literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText NumberColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.NumberStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for boolean literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText BooleanColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.BooleanStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the color used for <c>null</c> literals.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"color\">The color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText NullColor(this JsonText text, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.NullStyle = new Style(color);\n        return text;\n    }\n\n    /// <summary>\n    /// Sets the indentation.\n    /// </summary>\n    /// <param name=\"text\">The JSON text instance.</param>\n    /// <param name=\"indentation\">The indentation.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static JsonText Indentation(this JsonText text, string indentation = \"   \")\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.Indentation = indentation;\n        return text;\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonTextStyles.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal sealed class JsonTextStyles\n{\n    public Style? BracesStyle { get; set; }\n    public Style? BracketsStyle { get; set; }\n    public Style? MemberStyle { get; set; }\n    public Style? ColonStyle { get; set; }\n    public Style? CommaStyle { get; set; }\n    public Style? StringStyle { get; set; }\n    public Style? NumberStyle { get; set; }\n    public Style? BooleanStyle { get; set; }\n    public Style? NullStyle { get; set; }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonToken.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal sealed class JsonToken\n{\n    public JsonTokenType Type { get; }\n    public string Lexeme { get; }\n\n    public JsonToken(JsonTokenType type, string lexeme)\n    {\n        Type = type;\n        Lexeme = lexeme ?? throw new ArgumentNullException(nameof(lexeme));\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonTokenReader.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal sealed class JsonTokenReader\n{\n    private readonly List<JsonToken> _reader;\n    private readonly int _length;\n\n    public int Position { get; private set; }\n    public bool Eof => Position >= _length;\n\n    public JsonTokenReader(List<JsonToken> tokens)\n    {\n        _reader = tokens;\n        _length = tokens.Count;\n\n        Position = 0;\n    }\n\n    public JsonToken Consume(JsonTokenType type)\n    {\n        var read = Read();\n        if (read == null)\n        {\n            throw new InvalidOperationException(\"Could not read token\");\n        }\n\n        if (read.Type != type)\n        {\n            throw new InvalidOperationException($\"Expected '{type}' token, but found '{read.Type}'\");\n        }\n\n        return read;\n    }\n\n    public JsonToken? Peek()\n    {\n        if (Eof)\n        {\n            return null;\n        }\n\n        return _reader[Position];\n    }\n\n    public JsonToken? Read()\n    {\n        if (Eof)\n        {\n            return null;\n        }\n\n        Position++;\n        return _reader[Position - 1];\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonTokenType.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal enum JsonTokenType\n{\n    LeftBrace,\n    RightBrace,\n    LeftBracket,\n    RightBracket,\n    Colon,\n    Comma,\n    String,\n    Number,\n    Boolean,\n    Null,\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/JsonTokenizer.cs",
    "content": "namespace Spectre.Console.Json;\n\ninternal static class JsonTokenizer\n{\n    private static readonly Dictionary<char, JsonTokenType> _typeLookup;\n    private static readonly Dictionary<string, JsonTokenType> _keywords;\n    private static readonly HashSet<char> _allowedEscapedChars;\n\n    static JsonTokenizer()\n    {\n        _typeLookup = new Dictionary<char, JsonTokenType>\n        {\n            { '{', JsonTokenType.LeftBrace },\n            { '}', JsonTokenType.RightBrace },\n            { '[', JsonTokenType.LeftBracket },\n            { ']', JsonTokenType.RightBracket },\n            { ':', JsonTokenType.Colon },\n            { ',', JsonTokenType.Comma },\n        };\n\n        _keywords = new Dictionary<string, JsonTokenType>\n        {\n            { \"true\", JsonTokenType.Boolean },\n            { \"false\", JsonTokenType.Boolean },\n            { \"null\", JsonTokenType.Null },\n        };\n\n        _allowedEscapedChars =\n        [\n            '\\\"', '\\\\', '/', 'b', 'f', 'n', 'r', 't', 'u'\n        ];\n    }\n\n    public static List<JsonToken> Tokenize(string text)\n    {\n        var result = new List<JsonToken>();\n        var buffer = new StringBuffer(text);\n\n        while (!buffer.Eof)\n        {\n            var current = buffer.Peek();\n\n            if (_typeLookup.TryGetValue(current, out var tokenType))\n            {\n                buffer.Read(); // Consume\n                result.Add(new JsonToken(tokenType, current.ToString()));\n                continue;\n            }\n            else if (current == '\\\"')\n            {\n                result.Add(ReadString(buffer));\n            }\n            else if (current == '-' || current.IsDigit())\n            {\n                result.Add(ReadNumber(buffer));\n            }\n            else if (current is ' ' or '\\n' or '\\r' or '\\t')\n            {\n                buffer.Read(); // Consume\n            }\n            else if (char.IsLetter(current))\n            {\n                var accumulator = new StringBuilder();\n                while (!buffer.Eof)\n                {\n                    current = buffer.Peek();\n                    if (!char.IsLetter(current))\n                    {\n                        break;\n                    }\n\n                    buffer.Read(); // Consume\n                    accumulator.Append(current);\n                }\n\n                if (!_keywords.TryGetValue(accumulator.ToString(), out var keyword))\n                {\n                    throw new InvalidOperationException($\"Encountered invalid keyword '{keyword}'\");\n                }\n\n                result.Add(new JsonToken(keyword, accumulator.ToString()));\n            }\n            else\n            {\n                throw new InvalidOperationException(\"Invalid token\");\n            }\n        }\n\n        return result;\n    }\n\n    private static JsonToken ReadString(StringBuffer buffer)\n    {\n        var accumulator = new StringBuilder();\n        accumulator.Append(buffer.Expect('\\\"'));\n\n        while (!buffer.Eof)\n        {\n            var current = buffer.Peek();\n            if (current == '\\\"')\n            {\n                break;\n            }\n            else if (current == '\\\\')\n            {\n                buffer.Expect('\\\\');\n\n                if (buffer.Eof)\n                {\n                    break;\n                }\n\n                current = buffer.Read();\n                if (!_allowedEscapedChars.Contains(current))\n                {\n                    throw new InvalidOperationException(\"Invalid escape encountered\");\n                }\n\n                accumulator.Append('\\\\').Append(current);\n            }\n            else\n            {\n                accumulator.Append(current);\n                buffer.Read();\n            }\n        }\n\n        if (buffer.Eof)\n        {\n            throw new InvalidOperationException(\"Unterminated string literal\");\n        }\n\n        accumulator.Append(buffer.Expect('\\\"'));\n        return new JsonToken(JsonTokenType.String, accumulator.ToString());\n    }\n\n    private static JsonToken ReadNumber(StringBuffer buffer)\n    {\n        var accumulator = new StringBuilder();\n\n        // Minus?\n        if (buffer.Peek() == '-')\n        {\n            buffer.Read();\n            accumulator.Append(\"-\");\n        }\n\n        // Digits\n        var current = buffer.Peek();\n        if (current.IsDigit(min: 1))\n        {\n            ReadDigits(buffer, accumulator, min: 1);\n        }\n        else if (current == '0')\n        {\n            accumulator.Append(buffer.Expect('0'));\n        }\n        else\n        {\n            throw new InvalidOperationException(\"Invalid number\");\n        }\n\n        // Fractions\n        current = buffer.Peek();\n        if (current == '.')\n        {\n            accumulator.Append(buffer.Expect('.'));\n            ReadDigits(buffer, accumulator);\n        }\n\n        // Exponent\n        current = buffer.Peek();\n        if (current is 'e' or 'E')\n        {\n            accumulator.Append(buffer.Read());\n\n            current = buffer.Peek();\n            if (current is '+' or '-')\n            {\n                accumulator.Append(buffer.Read());\n            }\n\n            ReadDigits(buffer, accumulator);\n        }\n\n        return new JsonToken(JsonTokenType.Number, accumulator.ToString());\n    }\n\n    private static void ReadDigits(StringBuffer buffer, StringBuilder accumulator, int min = 0)\n    {\n        while (!buffer.Eof)\n        {\n            var current = buffer.Peek();\n            if (!current.IsDigit(min))\n            {\n                break;\n            }\n\n            buffer.Read(); // Consume\n            accumulator.Append(current);\n        }\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Properties/Usings.cs",
    "content": "global using System.Text;\nglobal using Spectre.Console.Json.Syntax;\nglobal using Spectre.Console.Rendering;"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>\n    <ImplicitUsings>true</ImplicitUsings>\n    <IsPackable>true</IsPackable>\n    <Description>A library that extends Spectre.Console with JSON superpowers.</Description>\n  </PropertyGroup>\n  <PropertyGroup>\n    <IsAotCompatible Condition=\"'$(TargetFramework)' != 'netstandard2.0'\" >true</IsAotCompatible>\n    <PolySharpIncludeRuntimeSupportedAttributes>true</PolySharpIncludeRuntimeSupportedAttributes>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\..\\Spectre.Console\\Extensions\\Bcl\\CharExtensions.cs\" Link=\"Internal\\CharExtensions.cs\" />\n    <Compile Include=\"..\\..\\Spectre.Console\\Extensions\\Bcl\\EnumerableExtensions.cs\" Link=\"Internal\\EnumerableExtensions.cs\" />\n    <Compile Include=\"..\\..\\Spectre.Console\\Internal\\Text\\StringBuffer.cs\" Link=\"Internal\\StringBuffer.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\Spectre.Console\\Spectre.Console.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Polyfill\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonArray.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents an array in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonArray : JsonSyntax\n{\n    /// <summary>\n    /// Gets the array items.\n    /// </summary>\n    public List<JsonSyntax> Items { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonArray\"/> class.\n    /// </summary>\n    public JsonArray()\n    {\n        Items = [];\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitArray(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonBoolean.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents a boolean literal in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonBoolean : JsonSyntax\n{\n    /// <summary>\n    /// Gets the lexeme.\n    /// </summary>\n    public string Lexeme { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonBoolean\"/> class.\n    /// </summary>\n    /// <param name=\"lexeme\">The lexeme.</param>\n    public JsonBoolean(string lexeme)\n    {\n        Lexeme = lexeme;\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitBoolean(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonMember.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents a member in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonMember : JsonSyntax\n{\n    /// <summary>\n    /// Gets the member name.\n    /// </summary>\n    public string Name { get; }\n\n    /// <summary>\n    /// Gets the member value.\n    /// </summary>\n    public JsonSyntax Value { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonMember\"/> class.\n    /// </summary>\n    /// <param name=\"name\">The name.</param>\n    /// <param name=\"value\">The value.</param>\n    public JsonMember(string name, JsonSyntax value)\n    {\n        Name = name;\n        Value = value;\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitMember(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonNull.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents a null literal in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonNull : JsonSyntax\n{\n    /// <summary>\n    /// Gets the lexeme.\n    /// </summary>\n    public string Lexeme { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonNull\"/> class.\n    /// </summary>\n    /// <param name=\"lexeme\">The lexeme.</param>\n    public JsonNull(string lexeme)\n    {\n        Lexeme = lexeme;\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitNull(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonNumber.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\ninternal sealed class JsonNumber : JsonSyntax\n{\n    public string Lexeme { get; }\n\n    public JsonNumber(string lexeme)\n    {\n        Lexeme = lexeme;\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitNumber(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonObject.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents an object in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonObject : JsonSyntax\n{\n    /// <summary>\n    /// Gets the object's members.\n    /// </summary>\n    public List<JsonMember> Members { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonObject\"/> class.\n    /// </summary>\n    public JsonObject()\n    {\n        Members = [];\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitObject(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonString.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents a string literal in the JSON abstract syntax tree.\n/// </summary>\npublic sealed class JsonString : JsonSyntax\n{\n    /// <summary>\n    /// Gets the lexeme.\n    /// </summary>\n    public string Lexeme { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"JsonString\"/> class.\n    /// </summary>\n    /// <param name=\"lexeme\">The lexeme.</param>\n    public JsonString(string lexeme)\n    {\n        Lexeme = lexeme;\n    }\n\n    internal override void Accept<T>(JsonSyntaxVisitor<T> visitor, T context)\n    {\n        visitor.VisitString(this, context);\n    }\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonSyntax.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\n/// <summary>\n/// Represents a syntax node in the JSON abstract syntax tree.\n/// </summary>\npublic abstract class JsonSyntax\n{\n    internal abstract void Accept<T>(JsonSyntaxVisitor<T> visitor, T context);\n}"
  },
  {
    "path": "src/Extensions/Spectre.Console.Json/Syntax/JsonSyntaxVisitor.cs",
    "content": "namespace Spectre.Console.Json.Syntax;\n\ninternal abstract class JsonSyntaxVisitor<T>\n{\n    public abstract void VisitObject(JsonObject syntax, T context);\n    public abstract void VisitArray(JsonArray syntax, T context);\n    public abstract void VisitMember(JsonMember syntax, T context);\n    public abstract void VisitNumber(JsonNumber syntax, T context);\n    public abstract void VisitString(JsonString syntax, T context);\n    public abstract void VisitBoolean(JsonBoolean syntax, T context);\n    public abstract void VisitNull(JsonNull syntax, T context);\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Exceptions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Writes an exception to the console.\n    /// </summary>\n    /// <param name=\"exception\">The exception to write to the console.</param>\n    /// <param name=\"format\">The exception format options.</param>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static void WriteException(Exception exception, ExceptionFormats format = ExceptionFormats.Default)\n    {\n        Console.WriteException(exception, format);\n    }\n\n    /// <summary>\n    /// Writes an exception to the console.\n    /// </summary>\n    /// <param name=\"exception\">The exception to write to the console.</param>\n    /// <param name=\"settings\">The exception settings.</param>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static void WriteException(Exception exception, ExceptionSettings settings)\n    {\n        Console.WriteException(exception, settings);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Live.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Creates a new <see cref=\"LiveDisplay\"/> instance.\n    /// </summary>\n    /// <param name=\"target\">The target renderable to update.</param>\n    /// <returns>A <see cref=\"LiveDisplay\"/> instance.</returns>\n    public static LiveDisplay Live(IRenderable target)\n    {\n        return Console.Live(target);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Markup.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Markup(string value)\n    {\n        Console.Markup(value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Markup(string format, params object[] args)\n    {\n        Console.Markup(format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// AnsiConsole.MarkupInterpolated($\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupInterpolated(FormattableString value)\n    {\n        Console.MarkupInterpolated(value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Markup(IFormatProvider provider, string format, params object[] args)\n    {\n        Console.Markup(provider, format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// AnsiConsole.MarkupInterpolated(CultureInfo.InvariantCulture, $\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupInterpolated(IFormatProvider provider, FormattableString value)\n    {\n        Console.MarkupInterpolated(provider, value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void MarkupLine(string value)\n    {\n        Console.MarkupLine(value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void MarkupLine(string format, params object[] args)\n    {\n        Console.MarkupLine(format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// AnsiConsole.MarkupLineInterpolated($\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupLineInterpolated(FormattableString value)\n    {\n        Console.MarkupLineInterpolated(value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void MarkupLine(IFormatProvider provider, string format, params object[] args)\n    {\n        Console.MarkupLine(provider, format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// AnsiConsole.MarkupLineInterpolated(CultureInfo.InvariantCulture, $\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupLineInterpolated(IFormatProvider provider, FormattableString value)\n    {\n        Console.MarkupLineInterpolated(provider, value);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Progress.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Creates a new <see cref=\"Progress\"/> instance.\n    /// </summary>\n    /// <returns>A <see cref=\"Progress\"/> instance.</returns>\n    public static Progress Progress()\n    {\n        return Console.Progress();\n    }\n\n    /// <summary>\n    /// Creates a new <see cref=\"Status\"/> instance.\n    /// </summary>\n    /// <returns>A <see cref=\"Status\"/> instance.</returns>\n    public static Status Status()\n    {\n        return Console.Status();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Prompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt to display.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Prompt<T>(IPrompt<T> prompt)\n    {\n        ArgumentNullException.ThrowIfNull(prompt);\n\n        return prompt.Show(Console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt to display.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> PromptAsync<T>(IPrompt<T> prompt, CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(prompt);\n\n        return prompt.ShowAsync(Console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Ask<T>(string prompt)\n    {\n        return new TextPrompt<T>(prompt).Show(Console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> AskAsync<T>(string prompt, CancellationToken cancellationToken = default)\n    {\n        return new TextPrompt<T>(prompt).ShowAsync(Console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user with a given default.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">The default value.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Ask<T>(string prompt, T defaultValue)\n    {\n        return new TextPrompt<T>(prompt)\n            .DefaultValue(defaultValue)\n            .Show(Console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user with a given default.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">The default value.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> AskAsync<T>(string prompt, T defaultValue, CancellationToken cancellationToken = default)\n    {\n        return new TextPrompt<T>(prompt)\n            .DefaultValue(defaultValue)\n            .ShowAsync(Console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt with two choices, yes or no.\n    /// </summary>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">Specifies the default answer.</param>\n    /// <returns><c>true</c> if the user selected \"yes\", otherwise <c>false</c>.</returns>\n    public static bool Confirm(string prompt, bool defaultValue = true)\n    {\n        return new ConfirmationPrompt(prompt)\n        {\n            DefaultValue = defaultValue,\n        }\n        .Show(Console);\n    }\n\n    /// <summary>\n    /// Displays a prompt with two choices, yes or no.\n    /// </summary>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">Specifies the default answer.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns><c>true</c> if the user selected \"yes\", otherwise <c>false</c>.</returns>\n    public static Task<bool> ConfirmAsync(string prompt, bool defaultValue = true, CancellationToken cancellationToken = default)\n    {\n        return new ConfirmationPrompt(prompt)\n        {\n            DefaultValue = defaultValue,\n        }\n        .ShowAsync(Console, cancellationToken);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Recording.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Starts recording the console output.\n    /// </summary>\n    public static void Record()\n    {\n        if (_recorder == null)\n        {\n            _recorder = new Recorder(Console);\n        }\n    }\n\n    /// <summary>\n    /// Exports all recorded console output as text.\n    /// </summary>\n    /// <returns>The recorded output as text.</returns>\n    public static string ExportText()\n    {\n        if (_recorder == null)\n        {\n            throw new InvalidOperationException(\"Cannot export text since a recording hasn't been started.\");\n        }\n\n        return _recorder.ExportText();\n    }\n\n    /// <summary>\n    /// Exports all recorded console output as HTML text.\n    /// </summary>\n    /// <returns>The recorded output as HTML text.</returns>\n    public static string ExportHtml()\n    {\n        if (_recorder == null)\n        {\n            throw new InvalidOperationException(\"Cannot export HTML since a recording hasn't been started.\");\n        }\n\n        return _recorder.ExportHtml();\n    }\n\n    /// <summary>\n    /// Exports all recorded console output using a custom encoder.\n    /// </summary>\n    /// <param name=\"encoder\">The encoder to use.</param>\n    /// <returns>The recorded output.</returns>\n    public static string ExportCustom(IAnsiConsoleEncoder encoder)\n    {\n        if (_recorder == null)\n        {\n            throw new InvalidOperationException(\"Cannot export HTML since a recording hasn't been started.\");\n        }\n\n        ArgumentNullException.ThrowIfNull(encoder);\n\n        return _recorder.Export(encoder);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Screen.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Switches to an alternate screen buffer if the terminal supports it.\n    /// </summary>\n    /// <param name=\"action\">The action to execute within the alternate screen buffer.</param>\n    public static void AlternateScreen(Action action)\n    {\n        Console.AlternateScreen(action);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.State.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    internal static Style CurrentStyle { get; private set; } = Style.Plain;\n    internal static bool Created { get; private set; }\n\n    /// <summary>\n    /// Gets or sets the foreground color.\n    /// </summary>\n    public static Color Foreground\n    {\n        get => CurrentStyle.Foreground;\n        set => CurrentStyle = CurrentStyle.Foreground(value);\n    }\n\n    /// <summary>\n    /// Gets or sets the background color.\n    /// </summary>\n    public static Color Background\n    {\n        get => CurrentStyle.Background;\n        set => CurrentStyle = CurrentStyle.Background(value);\n    }\n\n    /// <summary>\n    /// Gets or sets the text decoration.\n    /// </summary>\n    public static Decoration Decoration\n    {\n        get => CurrentStyle.Decoration;\n        set => CurrentStyle = CurrentStyle.Decoration(value);\n    }\n\n    /// <summary>\n    /// Resets colors and text decorations.\n    /// </summary>\n    public static void Reset()\n    {\n        ResetColors();\n        ResetDecoration();\n    }\n\n    /// <summary>\n    /// Resets the current applied text decorations.\n    /// </summary>\n    public static void ResetDecoration()\n    {\n        Decoration = Decoration.None;\n    }\n\n    /// <summary>\n    /// Resets the current applied foreground and background colors.\n    /// </summary>\n    public static void ResetColors()\n    {\n        CurrentStyle = Style.Plain;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.Write.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Renders the specified <see cref=\"IRenderable\"/> to the console.\n    /// </summary>\n    /// <param name=\"renderable\">The object to render.</param>\n    public static void Write(IRenderable renderable)\n    {\n        ArgumentNullException.ThrowIfNull(renderable);\n\n        Console.Write(renderable);\n    }\n\n    /// <summary>\n    /// Writes the specified string value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(string value)\n    {\n        Write(value, CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit\n    /// signed integer value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(int value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit\n    /// signed integer value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, int value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit\n    /// unsigned integer value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(uint value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit\n    /// unsigned integer value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, uint value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit\n    /// signed integer value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(long value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit\n    /// signed integer value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, long value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit\n    /// unsigned integer value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(ulong value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit\n    /// unsigned integer value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, ulong value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified single-precision\n    /// floating-point value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(float value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified single-precision\n    /// floating-point value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, float value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified double-precision\n    /// floating-point value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(double value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified double-precision\n    /// floating-point value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, double value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified decimal value, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(decimal value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified decimal value, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, decimal value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified boolean value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(bool value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified boolean value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, bool value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the specified Unicode character to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(char value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified Unicode character to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, char value)\n    {\n        Console.Write(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the specified array of Unicode characters to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(char[] value)\n    {\n        Write(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified array of Unicode characters to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Write(IFormatProvider provider, char[] value)\n    {\n        ArgumentNullException.ThrowIfNull(value);\n\n        for (var index = 0; index < value.Length; index++)\n        {\n            Console.Write(value[index].ToString(provider), CurrentStyle);\n        }\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified array of objects,\n    /// to the console using the specified format information.\n    /// </summary>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Write(string format, params object[] args)\n    {\n        Write(CultureInfo.CurrentCulture, format, args);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified array of objects,\n    /// to the console using the specified format information.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Write(IFormatProvider provider, string format, params object[] args)\n    {\n        Console.Write(string.Format(provider, format, args), CurrentStyle);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.WriteLine.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    /// <summary>\n    /// Writes an empty line to the console.\n    /// </summary>\n    public static void WriteLine()\n    {\n        Console.WriteLine();\n    }\n\n    /// <summary>\n    /// Writes the specified string value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(string value)\n    {\n        Console.WriteLine(value, CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit signed integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(int value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit signed integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, int value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit unsigned integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(uint value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 32-bit unsigned integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, uint value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit signed integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(long value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit signed integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, long value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit unsigned integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(ulong value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified 64-bit unsigned integer value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, ulong value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified single-precision floating-point\n    /// value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(float value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified single-precision floating-point\n    /// value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, float value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified double-precision floating-point\n    /// value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(double value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified double-precision floating-point\n    /// value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, double value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified decimal value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(decimal value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified decimal value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, decimal value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified boolean value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(bool value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified boolean value,\n    /// followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, bool value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the specified Unicode character, followed by the current\n    /// line terminator, value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(char value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified Unicode character, followed by the current\n    /// line terminator, value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, char value)\n    {\n        Console.WriteLine(value.ToString(provider), CurrentStyle);\n    }\n\n    /// <summary>\n    /// Writes the specified array of Unicode characters, followed by the current\n    /// line terminator, value to the console.\n    /// </summary>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(char[] value)\n    {\n        WriteLine(CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified array of Unicode characters, followed by the current\n    /// line terminator, value to the console.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void WriteLine(IFormatProvider provider, char[] value)\n    {\n        ArgumentNullException.ThrowIfNull(value);\n\n        for (var index = 0; index < value.Length; index++)\n        {\n            Console.Write(value[index].ToString(provider), CurrentStyle);\n        }\n\n        Console.WriteLine();\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified array of objects,\n    /// followed by the current line terminator, to the console\n    /// using the specified format information.\n    /// </summary>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void WriteLine(string format, params object[] args)\n    {\n        WriteLine(CultureInfo.CurrentCulture, format, args);\n    }\n\n    /// <summary>\n    /// Writes the text representation of the specified array of objects,\n    /// followed by the current line terminator, to the console\n    /// using the specified format information.\n    /// </summary>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void WriteLine(IFormatProvider provider, string format, params object[] args)\n    {\n        Console.WriteLine(string.Format(provider, format, args), CurrentStyle);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsole.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console capable of writing ANSI escape sequences.\n/// </summary>\npublic static partial class AnsiConsole\n{\n    private static Recorder? _recorder;\n    private static Lazy<IAnsiConsole> _console = new Lazy<IAnsiConsole>(\n        () =>\n        {\n            var console = Create(new AnsiConsoleSettings\n            {\n                Ansi = AnsiSupport.Detect,\n                ColorSystem = ColorSystemSupport.Detect,\n                Out = new AnsiConsoleOutput(System.Console.Out),\n            });\n\n            Created = true;\n            return console;\n        });\n\n    /// <summary>\n    /// Gets or sets the underlying <see cref=\"IAnsiConsole\"/>.\n    /// </summary>\n    public static IAnsiConsole Console\n    {\n        get\n        {\n            return _recorder ?? _console.Value;\n        }\n        set\n        {\n            _console = new Lazy<IAnsiConsole>(() => value);\n\n            if (_recorder != null)\n            {\n                // Recreate the recorder\n                _recorder = _recorder.Clone(value);\n            }\n\n            Created = true;\n        }\n    }\n\n    /// <summary>\n    /// Gets the <see cref=\"IAnsiConsoleCursor\"/>.\n    /// </summary>\n    public static IAnsiConsoleCursor Cursor => _recorder?.Cursor ?? _console.Value.Cursor;\n\n    /// <summary>\n    /// Gets the console profile.\n    /// </summary>\n    public static Profile Profile => Console.Profile;\n\n    /// <summary>\n    /// Creates a new <see cref=\"IAnsiConsole\"/> instance\n    /// from the provided settings.\n    /// </summary>\n    /// <param name=\"settings\">The settings to use.</param>\n    /// <returns>An <see cref=\"IAnsiConsole\"/> instance.</returns>\n    public static IAnsiConsole Create(AnsiConsoleSettings settings)\n    {\n        return AnsiConsoleFactory.Create(settings);\n    }\n\n    /// <summary>\n    /// Clears the console.\n    /// </summary>\n    public static void Clear()\n    {\n        Console.Clear();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsoleFactory.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Factory for creating an ANSI console.\n/// </summary>\ninternal sealed class AnsiConsoleFactory\n{\n    public static IAnsiConsole Create(AnsiConsoleSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(settings);\n\n        var output = settings.Out ?? new AnsiConsoleOutput(System.Console.Out);\n        if (output.Writer == null)\n        {\n            throw new InvalidOperationException(\"Output writer was null\");\n        }\n\n        // Get the capabilities of the terminal\n        var caps = Capabilities.Create(output.Writer, settings, out var encoding);\n\n        // Create a profile using the capabilities and enrich it\n        var profile = new Profile(output, caps, encoding);\n        ProfileEnricher.Enrich(\n            profile,\n            settings.Enrichment,\n            settings.EnvironmentVariables);\n\n        return new AnsiConsoleFacade(\n            profile,\n            settings.ExclusivityMode ?? new DefaultExclusivityMode());\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsoleOutput.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents console output.\n/// </summary>\npublic sealed class AnsiConsoleOutput : IAnsiConsoleOutput\n{\n    /// <inheritdoc/>\n    public TextWriter Writer { get; }\n\n    /// <inheritdoc/>\n    public bool IsTerminal\n    {\n        get\n        {\n            if (Writer.IsStandardOut())\n            {\n                return !System.Console.IsOutputRedirected;\n            }\n\n            if (Writer.IsStandardError())\n            {\n                return !System.Console.IsErrorRedirected;\n            }\n\n            return false;\n        }\n    }\n\n    /// <inheritdoc/>\n    public int Width => ConsoleHelper.GetSafeWidth();\n\n    /// <inheritdoc/>\n    public int Height => ConsoleHelper.GetSafeHeight();\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiConsoleOutput\"/> class.\n    /// </summary>\n    /// <param name=\"writer\">The output writer.</param>\n    public AnsiConsoleOutput(TextWriter writer)\n    {\n        Writer = writer ?? throw new ArgumentNullException(nameof(writer));\n    }\n\n    /// <inheritdoc/>\n    public void SetEncoding(Encoding encoding)\n    {\n        if (Writer.IsStandardOut() || Writer.IsStandardError())\n        {\n            System.Console.OutputEncoding = encoding;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/AnsiConsoleSettings.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Settings used when building a <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic sealed class AnsiConsoleSettings\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or\n    /// not ANSI escape sequences are supported.\n    /// </summary>\n    public AnsiSupport Ansi { get; set; }\n\n    /// <summary>\n    /// Gets or sets the color system to use.\n    /// </summary>\n    public ColorSystemSupport ColorSystem { get; set; } = ColorSystemSupport.Detect;\n\n    /// <summary>\n    /// Gets or sets the out buffer.\n    /// </summary>\n    public IAnsiConsoleOutput? Out { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the\n    /// terminal is interactive or not.\n    /// </summary>\n    public InteractionSupport Interactive { get; set; }\n\n    /// <summary>\n    /// Gets or sets the exclusivity mode.\n    /// </summary>\n    public IExclusivityMode? ExclusivityMode { get; set; }\n\n    /// <summary>\n    /// Gets or sets the profile enrichments settings.\n    /// </summary>\n    public ProfileEnrichment Enrichment { get; set; }\n\n    /// <summary>\n    /// Gets or sets the environment variables.\n    /// If not value is provided the default environment variables will be used.\n    /// </summary>\n    public Dictionary<string, string>? EnvironmentVariables { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiConsoleSettings\"/> class.\n    /// </summary>\n    public AnsiConsoleSettings()\n    {\n        Enrichment = new ProfileEnrichment();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/BoxBorder.Known.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a border.\n/// </summary>\npublic abstract partial class BoxBorder\n{\n    /// <summary>\n    /// Gets an invisible border.\n    /// </summary>\n    public static BoxBorder None { get; } = new NoBoxBorder();\n\n    /// <summary>\n    /// Gets an ASCII border.\n    /// </summary>\n    public static BoxBorder Ascii { get; } = new AsciiBoxBorder();\n\n    /// <summary>\n    /// Gets a double border.\n    /// </summary>\n    [SuppressMessage(\"Naming\", \"CA1720:Identifier contains type name\")]\n    public static BoxBorder Double { get; } = new DoubleBoxBorder();\n\n    /// <summary>\n    /// Gets a heavy border.\n    /// </summary>\n    public static BoxBorder Heavy { get; } = new HeavyBoxBorder();\n\n    /// <summary>\n    /// Gets a rounded border.\n    /// </summary>\n    public static BoxBorder Rounded { get; } = new RoundedBoxBorder();\n\n    /// <summary>\n    /// Gets a square border.\n    /// </summary>\n    public static BoxBorder Square { get; } = new SquareBoxBorder();\n}"
  },
  {
    "path": "src/Spectre.Console/BoxBorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a border.\n/// </summary>\npublic abstract partial class BoxBorder\n{\n    /// <summary>\n    /// Gets the safe border for this border or <c>null</c> if none exist.\n    /// </summary>\n    public virtual BoxBorder? SafeBorder { get; }\n\n    /// <summary>\n    /// Gets the string representation of the specified border part.\n    /// </summary>\n    /// <param name=\"part\">The part to get the character representation for.</param>\n    /// <returns>A character representation of the specified border part.</returns>\n    public abstract string GetPart(BoxBorderPart part);\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"BoxBorder\"/>.\n/// </summary>\npublic static class BoxExtensions\n{\n    /// <summary>\n    /// Gets the safe border for a border.\n    /// </summary>\n    /// <param name=\"border\">The border to get the safe border for.</param>\n    /// <param name=\"safe\">Whether or not to return the safe border.</param>\n    /// <returns>The safe border if one exist, otherwise the original border.</returns>\n    public static BoxBorder GetSafeBorder(this BoxBorder border, bool safe)\n    {\n        ArgumentNullException.ThrowIfNull(border);\n\n        if (safe && border.SafeBorder != null)\n        {\n            border = border.SafeBorder;\n        }\n\n        return border;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Capabilities.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents terminal capabilities.\n/// </summary>\npublic sealed class Capabilities : AnsiCapabilities, IReadOnlyCapabilities\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// this is a legacy console (cmd.exe) on an OS\n    /// prior to Windows 10.\n    /// </summary>\n    /// <remarks>\n    /// Only relevant when running on Microsoft Windows.\n    /// </remarks>\n    [Obsolete(\"This property will be removed in a future version\")]\n    public bool Legacy { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether\n    /// or not the console supports interaction.\n    /// </summary>\n    public bool Interactive { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether\n    /// or not the console supports Unicode.\n    /// </summary>\n    public bool Unicode { get; set; }\n\n    /// <summary>\n    /// Creates a <see cref=\"Capabilities\"/> instance from the provided arguments.\n    /// </summary>\n    /// <param name=\"writer\">The text writer to use.</param>\n    /// <param name=\"settings\">The settings to use.</param>\n    /// <param name=\"encoding\">The detected encoding.</param>\n    /// <returns>A <see cref=\"Capabilities\"/> instance.</returns>\n    public static Capabilities Create(TextWriter writer, AnsiConsoleSettings settings, out Encoding encoding)\n    {\n        ArgumentNullException.ThrowIfNull(writer);\n\n        var ansiCaps = AnsiCapabilities.Create(writer, new AnsiWriterSettings\n        {\n            Ansi = settings.Ansi,\n            ColorSystem = settings.ColorSystem,\n        });\n\n        // Use console encoding or fall back to provided encoding\n        encoding = writer.IsStandardOut() || writer.IsStandardError()\n            ? System.Console.OutputEncoding : writer.Encoding;\n\n        return new Capabilities\n        {\n            ColorSystem = ansiCaps.ColorSystem,\n            Ansi = ansiCaps.Ansi,\n            Links = ansiCaps.Links,\n#pragma warning disable CS0618 // Type or member is obsolete\n            Legacy = false,\n#pragma warning restore CS0618 // Type or member is obsolete\n            Interactive = InteractionDetector.IsInteractive(settings.Interactive),\n            Unicode = encoding.EncodingName.ContainsExact(\"Unicode\"),\n            AlternateBuffer = ansiCaps.AlternateBuffer,\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/CircularBuffer.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n\n// As this file is copied from dotnet/aspire we don't want to style it in our format to make diffing easier in the future\n#pragma warning disable SA1512 // Single-line comments should not be followed by blank line\n#pragma warning disable SA1513 // Closing brace should be followed by blank line\n#pragma warning disable SA1515 // Single-line comment should be preceded by blank line\n#pragma warning disable SA1028 // Code should not contain trailing whitespace\n#pragma warning disable SA1401 // Field should be private\n#pragma warning disable SA1503 // Braces should not be omitted\n#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member\n#pragma warning disable SA1507 // Code should not contain multiple blank lines in a row\n#pragma warning disable SA1618 // Generic type parameters should be documented\n#pragma warning disable SA1623 // Property summary documentation should match accessors\n#pragma warning disable SA1600 // Elements should be documented\n#pragma warning disable SA1128 // Put constructor initializers on their own line\n#pragma warning disable RCS1079 // Implement the functionality instead of throwing new NotImplementedException\n#pragma warning disable IDE0005 // Using directive is unnecessary\n\n// This was taken from https://github.com/dotnet/aspire/blob/a99edf17f50cbd2717f708706448e33a53825476/src/Shared/CircularBuffer.cs its license is also MIT.  This is the same exact circularbuffer that VS uses in Microsoft.VisualStudio.Utilities (at least a cursory decompiling shows it to be such): https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.utilities.circularbuffer-1?view=visualstudiosdk-2022. Minor fix for .netstandard 2.0\n\nusing System.Runtime.InteropServices;\n\nnamespace Spectre.Console;\n\n/// <summary>\n/// The circular buffer starts with an empty list and grows to a maximum size.\n/// When the buffer is full, adding or inserting a new item removes the first item in the buffer.\n/// </summary>\n[DebuggerDisplay(\"Count = {Count}\")]\n[DebuggerTypeProxy(typeof(CircularBuffer<>.CircularBufferDebugView))]\npublic sealed class CircularBuffer<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable\n{\n    // Internal for testing.\n    internal readonly List<T> _buffer;\n    internal int _start;\n    internal int _end;\n\n    public event Action<T>? ItemRemovedForCapacity;\n\n\n    public CircularBuffer(int capacity) : this(new List<T>(), capacity, start: 0, end: 0)\n    {\n    }\n\n    internal CircularBuffer(List<T> buffer, int capacity, int start, int end)\n    {\n        if (capacity < 1)\n        {\n            throw new ArgumentException(\"Circular buffer must have a capacity greater than 0.\", nameof(capacity));\n        }\n\n        _buffer = buffer;\n        Capacity = capacity;\n        _start = start;\n        _end = end;\n        UniqueRemovedCheck = !typeof(T).IsValueType;\n    }\n\n    /// <summary>\n    /// We have some debug.asserts to make sure items removed do not still appear in the buffer, but valuetypes can have equal items (or you may want to insert multiple copies of the same instance.  This is automatically set to false for valuetypes but you can override.\n    /// </summary>\n    public bool UniqueRemovedCheck { get; set; } = true;\n\n    public int Capacity { get; }\n\n    public bool IsFull => Count == Capacity;\n\n    public bool IsEmpty => Count == 0;\n\n    public int Count => _buffer.Count;\n\n    public bool IsReadOnly { get; }\n\n    public bool IsFixedSize { get; } = true;\n\n    public object SyncRoot { get; } = new object();\n\n    public bool IsSynchronized { get; }\n\n    public int IndexOf(T item)\n    {\n        for (var index = 0; index < Count; ++index)\n        {\n            if (Equals(this[index], item))\n            {\n                return index;\n            }\n        }\n        return -1;\n    }\n\n    public void Insert(int index, T item)\n    {\n        // TODO: There are a lot of branches in this method. Look into simplifying it.\n        if (index == Count)\n        {\n            Add(item);\n            return;\n        }\n\n        ValidateIndexInRange(index);\n\n        if (IsFull)\n        {\n            if (index == 0)\n            {\n                // When full, the item inserted at 0 is always the \"last\" in the buffer and is removed.\n                ItemRemovedForCapacity?.Invoke(item);\n                return;\n            }\n\n            var removedItem = this[0];\n\n            var internalIndex = InternalIndex(index);\n\n#if !NETSTANDARD2_0\n            var data = CollectionsMarshal.AsSpan(_buffer);\n#else\n            var data = _buffer.ToArray().AsSpan();\n#endif\n            // Shift data to make remove for insert.\n            if (internalIndex == 0)\n            {\n                data.Slice(0, _end).CopyTo(data.Slice(1));\n            }\n            else if (internalIndex > _end)\n            {\n                // Data is shifted forward so save the last item to copy to the front.\n                var overflowItem = data[data.Length - 1];\n\n                var shiftLength = data.Length - internalIndex - 1;\n                data.Slice(internalIndex, shiftLength).CopyTo(data.Slice(internalIndex + 1));\n                if (shiftLength > 0 || internalIndex == _buffer.Count - 1)\n                {\n                    data.Slice(0, _end).CopyTo(data.Slice(1));\n                }\n                data[0] = overflowItem;\n            }\n            else if (internalIndex < _end && _end < _buffer.Count - 1)\n            {\n                data.Slice(internalIndex, _end - internalIndex).CopyTo(data.Slice(internalIndex + 1));\n            }\n            else\n            {\n                data.Slice(internalIndex, data.Length - internalIndex - 1).CopyTo(data.Slice(internalIndex + 1));\n            }\n\n            // Set the actual item.\n            data[internalIndex] = item;\n\n            Increment(ref _end);\n            _start = _end;\n\n            if (UniqueRemovedCheck)\n            {\n                Debug.Assert(!_buffer.Contains(removedItem), \"Item was not correctly removed.\");\n            }\n            ItemRemovedForCapacity?.Invoke(removedItem);\n        }\n        else\n        {\n            var internalIndex = index + _start;\n            if (internalIndex > _buffer.Count)\n            {\n                internalIndex = internalIndex % _buffer.Count;\n            }\n\n            _buffer.Insert(internalIndex, item);\n            if (internalIndex < _end)\n            {\n                Increment(ref _end);\n                if (_end != _buffer.Count)\n                {\n                    _start = _end;\n                }\n            }\n        }\n    }\n\n    public void RemoveAt(int index)\n    {\n        ValidateIndexInRange(index);\n\n        var internalIndex = InternalIndex(index);\n        _buffer.RemoveAt(internalIndex);\n        if (internalIndex < _end)\n        {\n            Decrement(ref _end);\n            if (_start > 0)\n            {\n                _start = _end;\n            }\n        }\n    }\n\n    private void ValidateIndexInRange(int index)\n    {\n        if (index >= Count)\n        {\n            throw new InvalidOperationException($\"Cannot access index {index}. Buffer size is {Count}\");\n        }\n    }\n\n    public bool Remove(T item) => throw new NotImplementedException();\n\n    public T this[int index]\n    {\n        get\n        {\n            ValidateIndexInRange(index);\n            return _buffer[InternalIndex(index)];\n        }\n        set\n        {\n            ValidateIndexInRange(index);\n            _buffer[InternalIndex(index)] = value;\n        }\n    }\n\n    public void Add(T item)\n    {\n        if (IsFull)\n        {\n            var removedItem = this[0];\n\n            _buffer[_end] = item;\n            Increment(ref _end);\n            _start = _end;\n            if (UniqueRemovedCheck)\n            {\n                Debug.Assert(!_buffer.Contains(removedItem), \"Item was not correctly removed.\");\n            }\n            ItemRemovedForCapacity?.Invoke(removedItem);\n        }\n        else\n        {\n            _buffer.Insert(_end, item);\n            Increment(ref _end);\n            if (_end != _buffer.Count)\n            {\n                _start = _end;\n            }\n        }\n    }\n\n    public void Clear()\n    {\n        _start = 0;\n        _end = 0;\n        _buffer.Clear();\n    }\n\n    public bool Contains(T item) => IndexOf(item) != -1;\n\n    public void CopyTo(T[] array, int arrayIndex)\n    {\n        if (array.Length - arrayIndex < Count)\n        {\n            throw new ArgumentException(\"Array does not contain enough space for items\");\n        }\n\n        for (var index = 0; index < Count; ++index)\n        {\n            array[index + arrayIndex] = this[index];\n        }\n    }\n\n    public T[] ToArray()\n    {\n        if (IsEmpty)\n        {\n            return Array.Empty<T>();\n        }\n\n        var array = new T[Count];\n        for (var index = 0; index < Count; ++index)\n        {\n            array[index] = this[index];\n        }\n\n        return array;\n    }\n\n    public IEnumerator<T> GetEnumerator()\n    {\n        for (var i = 0; i < Count; ++i)\n        {\n            yield return this[i];\n        }\n    }\n\n    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();\n\n    private int InternalIndex(int index)\n    {\n        return (_start + index) % _buffer.Count;\n    }\n\n    private void Increment(ref int index)\n    {\n        if (++index < Capacity)\n        {\n            return;\n        }\n\n        index = 0;\n    }\n\n    private void Decrement(ref int index)\n    {\n        index = (index <= 0) ? Capacity - 1 : index - 1;\n    }\n\n    public CircularBuffer<T> Clone()\n    {\n        var buffer = new CircularBuffer<T>(_buffer.ToList(), Capacity, _start, _end);\n        buffer.ItemRemovedForCapacity = ItemRemovedForCapacity;\n\n        return buffer;\n    }\n\n    private sealed class CircularBufferDebugView(CircularBuffer<T> collection)\n    {\n        private readonly CircularBuffer<T> _collection = collection;\n\n        public T[] Items => _collection.ToArray();\n        public int Start => _collection._start;\n        public int End => _collection._end;\n        public int Capacity => _collection.Capacity;\n    }\n}\n\n#pragma warning restore SA1512 // Single-line comments should not be followed by blank line\n#pragma warning restore SA1513 // Closing brace should be followed by blank line\n#pragma warning restore SA1515 // Single-line comment should be preceded by blank line\n#pragma warning restore SA1028 // Code should not contain trailing whitespace\n#pragma warning restore SA1401 // Field should be private\n#pragma warning restore SA1503 // Braces should not be omitted\n#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member\n#pragma warning restore SA1507 // Code should not contain multiple blank lines in a row\n#pragma warning restore SA1618 // Generic type parameters should be documented\n#pragma warning restore SA1623 // Property summary documentation should match accessors\n#pragma warning restore SA1600 // Elements should be documented\n#pragma warning restore SA1128 // Put constructor initializers on their own line\n#pragma warning restore RCS1079 // Implement the functionality instead of throwing new NotImplementedException\n#pragma warning disable IDE0005 // Using directive is unnecessary"
  },
  {
    "path": "src/Spectre.Console/CursorDirection.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents cursor direction.\n/// </summary>\npublic enum CursorDirection\n{\n    /// <summary>\n    /// Moves cursor up.\n    /// </summary>\n    Up,\n\n    /// <summary>\n    /// Moves cursor down.\n    /// </summary>\n    Down,\n\n    /// <summary>\n    /// Moves cursor left.\n    /// </summary>\n    Left,\n\n    /// <summary>\n    /// Moves cursor right.\n    /// </summary>\n    Right,\n}"
  },
  {
    "path": "src/Spectre.Console/Data/emoji.json",
    "content": "[\n  {\n    \"label\": \"regional indicator A\",\n    \"hexcode\": \"1F1E6\",\n    \"emoji\": \"🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator B\",\n    \"hexcode\": \"1F1E7\",\n    \"emoji\": \"🇧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator C\",\n    \"hexcode\": \"1F1E8\",\n    \"emoji\": \"🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator D\",\n    \"hexcode\": \"1F1E9\",\n    \"emoji\": \"🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator E\",\n    \"hexcode\": \"1F1EA\",\n    \"emoji\": \"🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator F\",\n    \"hexcode\": \"1F1EB\",\n    \"emoji\": \"🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator G\",\n    \"hexcode\": \"1F1EC\",\n    \"emoji\": \"🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator H\",\n    \"hexcode\": \"1F1ED\",\n    \"emoji\": \"🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator I\",\n    \"hexcode\": \"1F1EE\",\n    \"emoji\": \"🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator J\",\n    \"hexcode\": \"1F1EF\",\n    \"emoji\": \"🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator K\",\n    \"hexcode\": \"1F1F0\",\n    \"emoji\": \"🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator L\",\n    \"hexcode\": \"1F1F1\",\n    \"emoji\": \"🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator M\",\n    \"hexcode\": \"1F1F2\",\n    \"emoji\": \"🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator N\",\n    \"hexcode\": \"1F1F3\",\n    \"emoji\": \"🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator O\",\n    \"hexcode\": \"1F1F4\",\n    \"emoji\": \"🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator P\",\n    \"hexcode\": \"1F1F5\",\n    \"emoji\": \"🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator Q\",\n    \"hexcode\": \"1F1F6\",\n    \"emoji\": \"🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator R\",\n    \"hexcode\": \"1F1F7\",\n    \"emoji\": \"🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator S\",\n    \"hexcode\": \"1F1F8\",\n    \"emoji\": \"🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator T\",\n    \"hexcode\": \"1F1F9\",\n    \"emoji\": \"🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator U\",\n    \"hexcode\": \"1F1FA\",\n    \"emoji\": \"🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator V\",\n    \"hexcode\": \"1F1FB\",\n    \"emoji\": \"🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator W\",\n    \"hexcode\": \"1F1FC\",\n    \"emoji\": \"🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator X\",\n    \"hexcode\": \"1F1FD\",\n    \"emoji\": \"🇽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator Y\",\n    \"hexcode\": \"1F1FE\",\n    \"emoji\": \"🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"regional indicator Z\",\n    \"hexcode\": \"1F1FF\",\n    \"emoji\": \"🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"version\": 0\n  },\n  {\n    \"label\": \"grinning face\",\n    \"hexcode\": \"1F600\",\n    \"tags\": [\n      \"cheerful\",\n      \"cheery\",\n      \"face\",\n      \"grin\",\n      \"grinning\",\n      \"happy\",\n      \"laugh\",\n      \"nice\",\n      \"smile\",\n      \"smiling\",\n      \"teeth\"\n    ],\n    \"emoji\": \"😀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 1\n  },\n  {\n    \"label\": \"grinning face with big eyes\",\n    \"hexcode\": \"1F603\",\n    \"tags\": [\n      \"awesome\",\n      \"big\",\n      \"eyes\",\n      \"face\",\n      \"grin\",\n      \"grinning\",\n      \"happy\",\n      \"mouth\",\n      \"open\",\n      \"smile\",\n      \"smiling\",\n      \"teeth\",\n      \"yay\"\n    ],\n    \"emoji\": \"😃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"grinning face with smiling eyes\",\n    \"hexcode\": \"1F604\",\n    \"tags\": [\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"grin\",\n      \"grinning\",\n      \"happy\",\n      \"laugh\",\n      \"lol\",\n      \"mouth\",\n      \"open\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6,\n    \"emoticon\": \":D\"\n  },\n  {\n    \"label\": \"beaming face with smiling eyes\",\n    \"hexcode\": \"1F601\",\n    \"tags\": [\n      \"beaming\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"grin\",\n      \"grinning\",\n      \"happy\",\n      \"nice\",\n      \"smile\",\n      \"smiling\",\n      \"teeth\"\n    ],\n    \"emoji\": \"😁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"grinning squinting face\",\n    \"hexcode\": \"1F606\",\n    \"tags\": [\n      \"closed\",\n      \"eyes\",\n      \"face\",\n      \"grinning\",\n      \"haha\",\n      \"hahaha\",\n      \"happy\",\n      \"laugh\",\n      \"lol\",\n      \"mouth\",\n      \"open\",\n      \"rofl\",\n      \"smile\",\n      \"smiling\",\n      \"squinting\"\n    ],\n    \"emoji\": \"😆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \"xD\",\n      \"XD\"\n    ]\n  },\n  {\n    \"label\": \"grinning face with sweat\",\n    \"hexcode\": \"1F605\",\n    \"tags\": [\n      \"cold\",\n      \"dejected\",\n      \"excited\",\n      \"face\",\n      \"grinning\",\n      \"mouth\",\n      \"nervous\",\n      \"open\",\n      \"smile\",\n      \"smiling\",\n      \"stress\",\n      \"stressed\",\n      \"sweat\"\n    ],\n    \"emoji\": \"😅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 6,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rolling on the floor laughing\",\n    \"hexcode\": \"1F923\",\n    \"tags\": [\n      \"crying\",\n      \"face\",\n      \"floor\",\n      \"funny\",\n      \"haha\",\n      \"happy\",\n      \"hehe\",\n      \"hilarious\",\n      \"joy\",\n      \"laugh\",\n      \"lmao\",\n      \"lol\",\n      \"rofl\",\n      \"roflmao\",\n      \"rolling\",\n      \"tear\"\n    ],\n    \"emoji\": \"🤣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 7,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 3,\n    \"emoticon\": \":'D\"\n  },\n  {\n    \"label\": \"face with tears of joy\",\n    \"hexcode\": \"1F602\",\n    \"tags\": [\n      \"crying\",\n      \"face\",\n      \"feels\",\n      \"funny\",\n      \"haha\",\n      \"happy\",\n      \"hehe\",\n      \"hilarious\",\n      \"joy\",\n      \"laugh\",\n      \"lmao\",\n      \"lol\",\n      \"rofl\",\n      \"roflmao\",\n      \"tear\"\n    ],\n    \"emoji\": \"😂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 8,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6,\n    \"emoticon\": \":')\"\n  },\n  {\n    \"label\": \"slightly smiling face\",\n    \"hexcode\": \"1F642\",\n    \"tags\": [\n      \"face\",\n      \"happy\",\n      \"slightly\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"🙂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 9,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 1,\n    \"emoticon\": \":)\"\n  },\n  {\n    \"label\": \"upside-down face\",\n    \"hexcode\": \"1F643\",\n    \"tags\": [\n      \"face\",\n      \"hehe\",\n      \"smile\",\n      \"upside-down\"\n    ],\n    \"emoji\": \"🙃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 10,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 1\n  },\n  {\n    \"label\": \"melting face\",\n    \"hexcode\": \"1FAE0\",\n    \"tags\": [\n      \"disappear\",\n      \"dissolve\",\n      \"embarrassed\",\n      \"face\",\n      \"haha\",\n      \"heat\",\n      \"hot\",\n      \"liquid\",\n      \"lol\",\n      \"melt\",\n      \"melting\",\n      \"sarcasm\",\n      \"sarcastic\"\n    ],\n    \"emoji\": \"🫠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 11,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 14\n  },\n  {\n    \"label\": \"winking face\",\n    \"hexcode\": \"1F609\",\n    \"tags\": [\n      \"face\",\n      \"flirt\",\n      \"heartbreaker\",\n      \"sexy\",\n      \"slide\",\n      \"tease\",\n      \"wink\",\n      \"winking\",\n      \"winks\"\n    ],\n    \"emoji\": \"😉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 12,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6,\n    \"emoticon\": \";)\"\n  },\n  {\n    \"label\": \"smiling face with smiling eyes\",\n    \"hexcode\": \"1F60A\",\n    \"tags\": [\n      \"blush\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"glad\",\n      \"satisfied\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 13,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 0.6,\n    \"emoticon\": \":>\"\n  },\n  {\n    \"label\": \"smiling face with halo\",\n    \"hexcode\": \"1F607\",\n    \"tags\": [\n      \"angel\",\n      \"angelic\",\n      \"angels\",\n      \"blessed\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"halo\",\n      \"happy\",\n      \"innocent\",\n      \"peaceful\",\n      \"smile\",\n      \"smiling\",\n      \"spirit\",\n      \"tale\"\n    ],\n    \"emoji\": \"😇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 14,\n    \"group\": 0,\n    \"subgroup\": 0,\n    \"version\": 1,\n    \"emoticon\": [\n      \"o:)\",\n      \"O:)\"\n    ]\n  },\n  {\n    \"label\": \"smiling face with hearts\",\n    \"hexcode\": \"1F970\",\n    \"tags\": [\n      \"3\",\n      \"adore\",\n      \"crush\",\n      \"face\",\n      \"heart\",\n      \"hearts\",\n      \"ily\",\n      \"love\",\n      \"romance\",\n      \"smile\",\n      \"smiling\",\n      \"you\"\n    ],\n    \"emoji\": \"🥰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 15,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 11\n  },\n  {\n    \"label\": \"smiling face with heart-eyes\",\n    \"hexcode\": \"1F60D\",\n    \"tags\": [\n      \"143\",\n      \"bae\",\n      \"eye\",\n      \"face\",\n      \"feels\",\n      \"heart-eyes\",\n      \"hearts\",\n      \"ily\",\n      \"kisses\",\n      \"love\",\n      \"romance\",\n      \"romantic\",\n      \"smile\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"😍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 16,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"star-struck\",\n    \"hexcode\": \"1F929\",\n    \"tags\": [\n      \"excited\",\n      \"eyes\",\n      \"face\",\n      \"grinning\",\n      \"smile\",\n      \"star\",\n      \"starry-eyed\",\n      \"wow\"\n    ],\n    \"emoji\": \"🤩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 17,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 5\n  },\n  {\n    \"label\": \"face blowing a kiss\",\n    \"hexcode\": \"1F618\",\n    \"tags\": [\n      \"adorbs\",\n      \"bae\",\n      \"blowing\",\n      \"face\",\n      \"flirt\",\n      \"heart\",\n      \"ily\",\n      \"kiss\",\n      \"love\",\n      \"lover\",\n      \"miss\",\n      \"muah\",\n      \"romantic\",\n      \"smooch\",\n      \"xoxo\",\n      \"you\"\n    ],\n    \"emoji\": \"😘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 18,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \":x\",\n      \":X\"\n    ]\n  },\n  {\n    \"label\": \"kissing face\",\n    \"hexcode\": \"1F617\",\n    \"tags\": [\n      \"143\",\n      \"date\",\n      \"dating\",\n      \"face\",\n      \"flirt\",\n      \"ily\",\n      \"kiss\",\n      \"love\",\n      \"smooch\",\n      \"smooches\",\n      \"xoxo\",\n      \"you\"\n    ],\n    \"emoji\": \"😗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 19,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 1\n  },\n  {\n    \"label\": \"smiling face\",\n    \"hexcode\": \"263A\",\n    \"tags\": [\n      \"face\",\n      \"happy\",\n      \"outlined\",\n      \"relaxed\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"☺️\",\n    \"text\": \"☺︎\",\n    \"type\": 0,\n    \"order\": 21,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"kissing face with closed eyes\",\n    \"hexcode\": \"1F61A\",\n    \"tags\": [\n      \"143\",\n      \"bae\",\n      \"blush\",\n      \"closed\",\n      \"date\",\n      \"dating\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"flirt\",\n      \"ily\",\n      \"kisses\",\n      \"kissing\",\n      \"smooches\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"😚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 22,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 0.6,\n    \"emoticon\": \":*\"\n  },\n  {\n    \"label\": \"kissing face with smiling eyes\",\n    \"hexcode\": \"1F619\",\n    \"tags\": [\n      \"143\",\n      \"closed\",\n      \"date\",\n      \"dating\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"flirt\",\n      \"ily\",\n      \"kiss\",\n      \"kisses\",\n      \"kissing\",\n      \"love\",\n      \"night\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 23,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 1\n  },\n  {\n    \"label\": \"smiling face with tear\",\n    \"hexcode\": \"1F972\",\n    \"tags\": [\n      \"face\",\n      \"glad\",\n      \"grateful\",\n      \"happy\",\n      \"joy\",\n      \"pain\",\n      \"proud\",\n      \"relieved\",\n      \"smile\",\n      \"smiley\",\n      \"smiling\",\n      \"tear\",\n      \"touched\"\n    ],\n    \"emoji\": \"🥲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 24,\n    \"group\": 0,\n    \"subgroup\": 1,\n    \"version\": 13\n  },\n  {\n    \"label\": \"face savoring food\",\n    \"hexcode\": \"1F60B\",\n    \"tags\": [\n      \"delicious\",\n      \"eat\",\n      \"face\",\n      \"food\",\n      \"full\",\n      \"hungry\",\n      \"savor\",\n      \"smile\",\n      \"smiling\",\n      \"tasty\",\n      \"um\",\n      \"yum\",\n      \"yummy\"\n    ],\n    \"emoji\": \"😋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 25,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"face with tongue\",\n    \"hexcode\": \"1F61B\",\n    \"tags\": [\n      \"awesome\",\n      \"cool\",\n      \"face\",\n      \"nice\",\n      \"party\",\n      \"stuck-out\",\n      \"sweet\",\n      \"tongue\"\n    ],\n    \"emoji\": \"😛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 26,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 1,\n    \"emoticon\": [\n      \":p\",\n      \":P\"\n    ]\n  },\n  {\n    \"label\": \"winking face with tongue\",\n    \"hexcode\": \"1F61C\",\n    \"tags\": [\n      \"crazy\",\n      \"epic\",\n      \"eye\",\n      \"face\",\n      \"funny\",\n      \"joke\",\n      \"loopy\",\n      \"nutty\",\n      \"party\",\n      \"stuck-out\",\n      \"tongue\",\n      \"wacky\",\n      \"weirdo\",\n      \"wink\",\n      \"winking\",\n      \"yolo\"\n    ],\n    \"emoji\": \"😜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 27,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \";p\",\n      \";P\"\n    ]\n  },\n  {\n    \"label\": \"zany face\",\n    \"hexcode\": \"1F92A\",\n    \"tags\": [\n      \"crazy\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"goofy\",\n      \"large\",\n      \"small\",\n      \"zany\"\n    ],\n    \"emoji\": \"🤪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 28,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 5\n  },\n  {\n    \"label\": \"squinting face with tongue\",\n    \"hexcode\": \"1F61D\",\n    \"tags\": [\n      \"closed\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"gross\",\n      \"horrible\",\n      \"omg\",\n      \"squinting\",\n      \"stuck-out\",\n      \"taste\",\n      \"tongue\",\n      \"whatever\",\n      \"yolo\"\n    ],\n    \"emoji\": \"😝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 29,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \"xp\",\n      \"xP\",\n      \"XP\"\n    ]\n  },\n  {\n    \"label\": \"money-mouth face\",\n    \"hexcode\": \"1F911\",\n    \"tags\": [\n      \"face\",\n      \"money\",\n      \"money-mouth\",\n      \"mouth\",\n      \"paid\"\n    ],\n    \"emoji\": \"🤑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 30,\n    \"group\": 0,\n    \"subgroup\": 2,\n    \"version\": 1\n  },\n  {\n    \"label\": \"smiling face with open hands\",\n    \"hexcode\": \"1F917\",\n    \"tags\": [\n      \"face\",\n      \"hands\",\n      \"hug\",\n      \"hugging\",\n      \"open\",\n      \"smiling\"\n    ],\n    \"emoji\": \"🤗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 31,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 1\n  },\n  {\n    \"label\": \"face with hand over mouth\",\n    \"hexcode\": \"1F92D\",\n    \"tags\": [\n      \"face\",\n      \"giggle\",\n      \"giggling\",\n      \"hand\",\n      \"mouth\",\n      \"oops\",\n      \"realization\",\n      \"secret\",\n      \"shock\",\n      \"sudden\",\n      \"surprise\",\n      \"whoops\"\n    ],\n    \"emoji\": \"🤭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 32,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 5\n  },\n  {\n    \"label\": \"face with open eyes and hand over mouth\",\n    \"hexcode\": \"1FAE2\",\n    \"tags\": [\n      \"amazement\",\n      \"awe\",\n      \"disbelief\",\n      \"embarrass\",\n      \"eyes\",\n      \"face\",\n      \"gasp\",\n      \"hand\",\n      \"mouth\",\n      \"omg\",\n      \"open\",\n      \"over\",\n      \"quiet\",\n      \"scared\",\n      \"shock\",\n      \"surprise\"\n    ],\n    \"emoji\": \"🫢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 33,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 14\n  },\n  {\n    \"label\": \"face with peeking eye\",\n    \"hexcode\": \"1FAE3\",\n    \"tags\": [\n      \"captivated\",\n      \"embarrass\",\n      \"eye\",\n      \"face\",\n      \"hide\",\n      \"hiding\",\n      \"peek\",\n      \"peeking\",\n      \"peep\",\n      \"scared\",\n      \"shy\",\n      \"stare\"\n    ],\n    \"emoji\": \"🫣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 34,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 14\n  },\n  {\n    \"label\": \"shushing face\",\n    \"hexcode\": \"1F92B\",\n    \"tags\": [\n      \"face\",\n      \"quiet\",\n      \"shh\",\n      \"shush\",\n      \"shushing\"\n    ],\n    \"emoji\": \"🤫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 35,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 5\n  },\n  {\n    \"label\": \"thinking face\",\n    \"hexcode\": \"1F914\",\n    \"tags\": [\n      \"chin\",\n      \"consider\",\n      \"face\",\n      \"hmm\",\n      \"ponder\",\n      \"pondering\",\n      \"thinking\",\n      \"wondering\"\n    ],\n    \"emoji\": \"🤔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 36,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 1,\n    \"emoticon\": [\n      \":l\",\n      \":L\"\n    ]\n  },\n  {\n    \"label\": \"saluting face\",\n    \"hexcode\": \"1FAE1\",\n    \"tags\": [\n      \"face\",\n      \"good\",\n      \"luck\",\n      \"ma’am\",\n      \"ok\",\n      \"respect\",\n      \"salute\",\n      \"saluting\",\n      \"sir\",\n      \"troops\",\n      \"yes\"\n    ],\n    \"emoji\": \"🫡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 37,\n    \"group\": 0,\n    \"subgroup\": 3,\n    \"version\": 14\n  },\n  {\n    \"label\": \"zipper-mouth face\",\n    \"hexcode\": \"1F910\",\n    \"tags\": [\n      \"face\",\n      \"keep\",\n      \"mouth\",\n      \"quiet\",\n      \"secret\",\n      \"shut\",\n      \"zip\",\n      \"zipper\",\n      \"zipper-mouth\"\n    ],\n    \"emoji\": \"🤐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 38,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 1,\n    \"emoticon\": [\n      \":z\",\n      \":Z\"\n    ]\n  },\n  {\n    \"label\": \"face with raised eyebrow\",\n    \"hexcode\": \"1F928\",\n    \"tags\": [\n      \"disapproval\",\n      \"disbelief\",\n      \"distrust\",\n      \"emoji\",\n      \"eyebrow\",\n      \"face\",\n      \"hmm\",\n      \"mild\",\n      \"raised\",\n      \"skeptic\",\n      \"skeptical\",\n      \"skepticism\",\n      \"surprise\",\n      \"what\"\n    ],\n    \"emoji\": \"🤨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 39,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 5\n  },\n  {\n    \"label\": \"neutral face\",\n    \"hexcode\": \"1F610\",\n    \"tags\": [\n      \"awkward\",\n      \"blank\",\n      \"deadpan\",\n      \"expressionless\",\n      \"face\",\n      \"fine\",\n      \"jealous\",\n      \"meh\",\n      \"neutral\",\n      \"oh\",\n      \"shade\",\n      \"straight\",\n      \"unamused\",\n      \"unhappy\",\n      \"unimpressed\",\n      \"whatever\"\n    ],\n    \"emoji\": \"😐️\",\n    \"text\": \"😐︎\",\n    \"type\": 1,\n    \"order\": 40,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 0.7,\n    \"emoticon\": \":|\"\n  },\n  {\n    \"label\": \"expressionless face\",\n    \"hexcode\": \"1F611\",\n    \"tags\": [\n      \"awkward\",\n      \"dead\",\n      \"expressionless\",\n      \"face\",\n      \"fine\",\n      \"inexpressive\",\n      \"jealous\",\n      \"meh\",\n      \"not\",\n      \"oh\",\n      \"omg\",\n      \"straight\",\n      \"uh\",\n      \"unhappy\",\n      \"unimpressed\",\n      \"whatever\"\n    ],\n    \"emoji\": \"😑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 41,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 1\n  },\n  {\n    \"label\": \"face without mouth\",\n    \"hexcode\": \"1F636\",\n    \"tags\": [\n      \"awkward\",\n      \"blank\",\n      \"expressionless\",\n      \"face\",\n      \"mouth\",\n      \"mouthless\",\n      \"mute\",\n      \"quiet\",\n      \"secret\",\n      \"silence\",\n      \"silent\",\n      \"speechless\"\n    ],\n    \"emoji\": \"😶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 42,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 1,\n    \"emoticon\": \":#\"\n  },\n  {\n    \"label\": \"dotted line face\",\n    \"hexcode\": \"1FAE5\",\n    \"tags\": [\n      \"depressed\",\n      \"disappear\",\n      \"dotted\",\n      \"face\",\n      \"hidden\",\n      \"hide\",\n      \"introvert\",\n      \"invisible\",\n      \"line\",\n      \"meh\",\n      \"whatever\",\n      \"wtv\"\n    ],\n    \"emoji\": \"🫥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 43,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 14\n  },\n  {\n    \"label\": \"face in clouds\",\n    \"hexcode\": \"1F636-200D-1F32B-FE0F\",\n    \"tags\": [\n      \"absentminded\",\n      \"clouds\",\n      \"face\",\n      \"fog\",\n      \"head\"\n    ],\n    \"emoji\": \"😶‍🌫️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 44,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 13.1\n  },\n  {\n    \"label\": \"smirking face\",\n    \"hexcode\": \"1F60F\",\n    \"tags\": [\n      \"boss\",\n      \"dapper\",\n      \"face\",\n      \"flirt\",\n      \"homie\",\n      \"kidding\",\n      \"leer\",\n      \"shade\",\n      \"slick\",\n      \"sly\",\n      \"smirk\",\n      \"smug\",\n      \"snicker\",\n      \"suave\",\n      \"suspicious\",\n      \"swag\"\n    ],\n    \"emoji\": \"😏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 46,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 0.6,\n    \"emoticon\": \":j\"\n  },\n  {\n    \"label\": \"unamused face\",\n    \"hexcode\": \"1F612\",\n    \"tags\": [\n      \"...\",\n      \"bored\",\n      \"face\",\n      \"fine\",\n      \"jealous\",\n      \"jel\",\n      \"jelly\",\n      \"pissed\",\n      \"smh\",\n      \"ugh\",\n      \"uhh\",\n      \"unamused\",\n      \"unhappy\",\n      \"weird\",\n      \"whatever\"\n    ],\n    \"emoji\": \"😒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 47,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 0.6,\n    \"emoticon\": \":?\"\n  },\n  {\n    \"label\": \"face with rolling eyes\",\n    \"hexcode\": \"1F644\",\n    \"tags\": [\n      \"eyeroll\",\n      \"eyes\",\n      \"face\",\n      \"rolling\",\n      \"shade\",\n      \"ugh\",\n      \"whatever\"\n    ],\n    \"emoji\": \"🙄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 48,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 1\n  },\n  {\n    \"label\": \"grimacing face\",\n    \"hexcode\": \"1F62C\",\n    \"tags\": [\n      \"awk\",\n      \"awkward\",\n      \"dentist\",\n      \"face\",\n      \"grimace\",\n      \"grimacing\",\n      \"grinning\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 49,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 1,\n    \"emoticon\": \"8D\"\n  },\n  {\n    \"label\": \"face exhaling\",\n    \"hexcode\": \"1F62E-200D-1F4A8\",\n    \"tags\": [\n      \"blow\",\n      \"blowing\",\n      \"exhale\",\n      \"exhaling\",\n      \"exhausted\",\n      \"face\",\n      \"gasp\",\n      \"groan\",\n      \"relief\",\n      \"sigh\",\n      \"smiley\",\n      \"smoke\",\n      \"whisper\",\n      \"whistle\"\n    ],\n    \"emoji\": \"😮‍💨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 50,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 13.1\n  },\n  {\n    \"label\": \"lying face\",\n    \"hexcode\": \"1F925\",\n    \"tags\": [\n      \"face\",\n      \"liar\",\n      \"lie\",\n      \"lying\",\n      \"pinocchio\"\n    ],\n    \"emoji\": \"🤥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 51,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 3\n  },\n  {\n    \"label\": \"shaking face\",\n    \"hexcode\": \"1FAE8\",\n    \"tags\": [\n      \"crazy\",\n      \"daze\",\n      \"earthquake\",\n      \"face\",\n      \"omg\",\n      \"panic\",\n      \"shaking\",\n      \"shock\",\n      \"surprise\",\n      \"vibrate\",\n      \"whoa\",\n      \"wow\"\n    ],\n    \"emoji\": \"🫨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 52,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 15\n  },\n  {\n    \"label\": \"head shaking horizontally\",\n    \"hexcode\": \"1F642-200D-2194-FE0F\",\n    \"tags\": [\n      \"head\",\n      \"horizontally\",\n      \"no\",\n      \"shake\",\n      \"shaking\"\n    ],\n    \"emoji\": \"🙂‍↔️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 53,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"head shaking vertically\",\n    \"hexcode\": \"1F642-200D-2195-FE0F\",\n    \"tags\": [\n      \"head\",\n      \"nod\",\n      \"shaking\",\n      \"vertically\",\n      \"yes\"\n    ],\n    \"emoji\": \"🙂‍↕️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 55,\n    \"group\": 0,\n    \"subgroup\": 4,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"relieved face\",\n    \"hexcode\": \"1F60C\",\n    \"tags\": [\n      \"calm\",\n      \"face\",\n      \"peace\",\n      \"relief\",\n      \"relieved\",\n      \"zen\"\n    ],\n    \"emoji\": \"😌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 57,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pensive face\",\n    \"hexcode\": \"1F614\",\n    \"tags\": [\n      \"awful\",\n      \"bored\",\n      \"dejected\",\n      \"died\",\n      \"disappointed\",\n      \"face\",\n      \"losing\",\n      \"lost\",\n      \"pensive\",\n      \"sad\",\n      \"sucks\"\n    ],\n    \"emoji\": \"😔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 58,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sleepy face\",\n    \"hexcode\": \"1F62A\",\n    \"tags\": [\n      \"crying\",\n      \"face\",\n      \"good\",\n      \"night\",\n      \"sad\",\n      \"sleep\",\n      \"sleeping\",\n      \"sleepy\",\n      \"tired\"\n    ],\n    \"emoji\": \"😪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 59,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"drooling face\",\n    \"hexcode\": \"1F924\",\n    \"tags\": [\n      \"drooling\",\n      \"face\"\n    ],\n    \"emoji\": \"🤤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 60,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 3\n  },\n  {\n    \"label\": \"sleeping face\",\n    \"hexcode\": \"1F634\",\n    \"tags\": [\n      \"bed\",\n      \"bedtime\",\n      \"face\",\n      \"good\",\n      \"goodnight\",\n      \"nap\",\n      \"night\",\n      \"sleep\",\n      \"sleeping\",\n      \"tired\",\n      \"whatever\",\n      \"yawn\",\n      \"zzz\"\n    ],\n    \"emoji\": \"😴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 61,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 1\n  },\n  {\n    \"label\": \"face with bags under eyes\",\n    \"hexcode\": \"1FAE9\",\n    \"tags\": [\n      \"bags\",\n      \"bored\",\n      \"exhausted\",\n      \"eyes\",\n      \"face\",\n      \"fatigued\",\n      \"late\",\n      \"sleepy\",\n      \"tired\",\n      \"weary\"\n    ],\n    \"emoji\": \"🫩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 62,\n    \"group\": 0,\n    \"subgroup\": 5,\n    \"version\": 16\n  },\n  {\n    \"label\": \"face with medical mask\",\n    \"hexcode\": \"1F637\",\n    \"tags\": [\n      \"cold\",\n      \"dentist\",\n      \"dermatologist\",\n      \"doctor\",\n      \"dr\",\n      \"face\",\n      \"germs\",\n      \"mask\",\n      \"medical\",\n      \"medicine\",\n      \"sick\"\n    ],\n    \"emoji\": \"😷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 63,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"face with thermometer\",\n    \"hexcode\": \"1F912\",\n    \"tags\": [\n      \"face\",\n      \"ill\",\n      \"sick\",\n      \"thermometer\"\n    ],\n    \"emoji\": \"🤒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 64,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 1\n  },\n  {\n    \"label\": \"face with head-bandage\",\n    \"hexcode\": \"1F915\",\n    \"tags\": [\n      \"bandage\",\n      \"face\",\n      \"head-bandage\",\n      \"hurt\",\n      \"injury\",\n      \"ouch\"\n    ],\n    \"emoji\": \"🤕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 65,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 1\n  },\n  {\n    \"label\": \"nauseated face\",\n    \"hexcode\": \"1F922\",\n    \"tags\": [\n      \"face\",\n      \"gross\",\n      \"nasty\",\n      \"nauseated\",\n      \"sick\",\n      \"vomit\"\n    ],\n    \"emoji\": \"🤢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 66,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 3,\n    \"emoticon\": \"%(\"\n  },\n  {\n    \"label\": \"face vomiting\",\n    \"hexcode\": \"1F92E\",\n    \"tags\": [\n      \"barf\",\n      \"ew\",\n      \"face\",\n      \"gross\",\n      \"puke\",\n      \"sick\",\n      \"spew\",\n      \"throw\",\n      \"up\",\n      \"vomit\",\n      \"vomiting\"\n    ],\n    \"emoji\": \"🤮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 67,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 5\n  },\n  {\n    \"label\": \"sneezing face\",\n    \"hexcode\": \"1F927\",\n    \"tags\": [\n      \"face\",\n      \"fever\",\n      \"flu\",\n      \"gesundheit\",\n      \"sick\",\n      \"sneeze\",\n      \"sneezing\"\n    ],\n    \"emoji\": \"🤧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 68,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 3\n  },\n  {\n    \"label\": \"hot face\",\n    \"hexcode\": \"1F975\",\n    \"tags\": [\n      \"dying\",\n      \"face\",\n      \"feverish\",\n      \"heat\",\n      \"hot\",\n      \"panting\",\n      \"red-faced\",\n      \"stroke\",\n      \"sweating\",\n      \"tongue\"\n    ],\n    \"emoji\": \"🥵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 69,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 11\n  },\n  {\n    \"label\": \"cold face\",\n    \"hexcode\": \"1F976\",\n    \"tags\": [\n      \"blue\",\n      \"blue-faced\",\n      \"cold\",\n      \"face\",\n      \"freezing\",\n      \"frostbite\",\n      \"icicles\",\n      \"subzero\",\n      \"teeth\"\n    ],\n    \"emoji\": \"🥶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 70,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 11\n  },\n  {\n    \"label\": \"woozy face\",\n    \"hexcode\": \"1F974\",\n    \"tags\": [\n      \"dizzy\",\n      \"drunk\",\n      \"eyes\",\n      \"face\",\n      \"intoxicated\",\n      \"mouth\",\n      \"tipsy\",\n      \"uneven\",\n      \"wavy\",\n      \"woozy\"\n    ],\n    \"emoji\": \"🥴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 71,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 11,\n    \"emoticon\": \":&\"\n  },\n  {\n    \"label\": \"face with crossed-out eyes\",\n    \"hexcode\": \"1F635\",\n    \"tags\": [\n      \"crossed-out\",\n      \"dead\",\n      \"dizzy\",\n      \"eyes\",\n      \"face\",\n      \"feels\",\n      \"knocked\",\n      \"out\",\n      \"sick\",\n      \"tired\"\n    ],\n    \"emoji\": \"😵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 72,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \"xo\",\n      \"XO\"\n    ]\n  },\n  {\n    \"label\": \"face with spiral eyes\",\n    \"hexcode\": \"1F635-200D-1F4AB\",\n    \"tags\": [\n      \"confused\",\n      \"dizzy\",\n      \"eyes\",\n      \"face\",\n      \"hypnotized\",\n      \"omg\",\n      \"smiley\",\n      \"spiral\",\n      \"trouble\",\n      \"whoa\",\n      \"woah\",\n      \"woozy\"\n    ],\n    \"emoji\": \"😵‍💫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 73,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 13.1\n  },\n  {\n    \"label\": \"exploding head\",\n    \"hexcode\": \"1F92F\",\n    \"tags\": [\n      \"blown\",\n      \"explode\",\n      \"exploding\",\n      \"head\",\n      \"mind\",\n      \"mindblown\",\n      \"no\",\n      \"shocked\",\n      \"way\"\n    ],\n    \"emoji\": \"🤯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 74,\n    \"group\": 0,\n    \"subgroup\": 6,\n    \"version\": 5\n  },\n  {\n    \"label\": \"cowboy hat face\",\n    \"hexcode\": \"1F920\",\n    \"tags\": [\n      \"cowboy\",\n      \"cowgirl\",\n      \"face\",\n      \"hat\"\n    ],\n    \"emoji\": \"🤠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 75,\n    \"group\": 0,\n    \"subgroup\": 7,\n    \"version\": 3\n  },\n  {\n    \"label\": \"partying face\",\n    \"hexcode\": \"1F973\",\n    \"tags\": [\n      \"bday\",\n      \"birthday\",\n      \"celebrate\",\n      \"celebration\",\n      \"excited\",\n      \"face\",\n      \"happy\",\n      \"hat\",\n      \"hooray\",\n      \"horn\",\n      \"party\",\n      \"partying\"\n    ],\n    \"emoji\": \"🥳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 76,\n    \"group\": 0,\n    \"subgroup\": 7,\n    \"version\": 11\n  },\n  {\n    \"label\": \"disguised face\",\n    \"hexcode\": \"1F978\",\n    \"tags\": [\n      \"disguise\",\n      \"eyebrow\",\n      \"face\",\n      \"glasses\",\n      \"incognito\",\n      \"moustache\",\n      \"mustache\",\n      \"nose\",\n      \"person\",\n      \"spy\",\n      \"tache\",\n      \"tash\"\n    ],\n    \"emoji\": \"🥸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 77,\n    \"group\": 0,\n    \"subgroup\": 7,\n    \"version\": 13\n  },\n  {\n    \"label\": \"smiling face with sunglasses\",\n    \"hexcode\": \"1F60E\",\n    \"tags\": [\n      \"awesome\",\n      \"beach\",\n      \"bright\",\n      \"bro\",\n      \"chilling\",\n      \"cool\",\n      \"face\",\n      \"rad\",\n      \"relaxed\",\n      \"shades\",\n      \"slay\",\n      \"smile\",\n      \"style\",\n      \"sunglasses\",\n      \"swag\",\n      \"win\"\n    ],\n    \"emoji\": \"😎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 78,\n    \"group\": 0,\n    \"subgroup\": 8,\n    \"version\": 1,\n    \"emoticon\": \"8)\"\n  },\n  {\n    \"label\": \"nerd face\",\n    \"hexcode\": \"1F913\",\n    \"tags\": [\n      \"brainy\",\n      \"clever\",\n      \"expert\",\n      \"face\",\n      \"geek\",\n      \"gifted\",\n      \"glasses\",\n      \"intelligent\",\n      \"nerd\",\n      \"smart\"\n    ],\n    \"emoji\": \"🤓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 79,\n    \"group\": 0,\n    \"subgroup\": 8,\n    \"version\": 1,\n    \"emoticon\": \":B\"\n  },\n  {\n    \"label\": \"face with monocle\",\n    \"hexcode\": \"1F9D0\",\n    \"tags\": [\n      \"classy\",\n      \"face\",\n      \"fancy\",\n      \"monocle\",\n      \"rich\",\n      \"stuffy\",\n      \"wealthy\"\n    ],\n    \"emoji\": \"🧐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 80,\n    \"group\": 0,\n    \"subgroup\": 8,\n    \"version\": 5\n  },\n  {\n    \"label\": \"confused face\",\n    \"hexcode\": \"1F615\",\n    \"tags\": [\n      \"befuddled\",\n      \"confused\",\n      \"confusing\",\n      \"dunno\",\n      \"face\",\n      \"frown\",\n      \"hm\",\n      \"meh\",\n      \"not\",\n      \"sad\",\n      \"sorry\",\n      \"sure\"\n    ],\n    \"emoji\": \"😕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 81,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1,\n    \"emoticon\": \":/\"\n  },\n  {\n    \"label\": \"face with diagonal mouth\",\n    \"hexcode\": \"1FAE4\",\n    \"tags\": [\n      \"confused\",\n      \"confusion\",\n      \"diagonal\",\n      \"disappointed\",\n      \"doubt\",\n      \"doubtful\",\n      \"face\",\n      \"frustrated\",\n      \"frustration\",\n      \"meh\",\n      \"mouth\",\n      \"skeptical\",\n      \"unsure\",\n      \"whatever\",\n      \"wtv\"\n    ],\n    \"emoji\": \"🫤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 82,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 14\n  },\n  {\n    \"label\": \"worried face\",\n    \"hexcode\": \"1F61F\",\n    \"tags\": [\n      \"anxious\",\n      \"butterflies\",\n      \"face\",\n      \"nerves\",\n      \"nervous\",\n      \"sad\",\n      \"stress\",\n      \"stressed\",\n      \"surprised\",\n      \"worried\",\n      \"worry\"\n    ],\n    \"emoji\": \"😟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 83,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1\n  },\n  {\n    \"label\": \"slightly frowning face\",\n    \"hexcode\": \"1F641\",\n    \"tags\": [\n      \"face\",\n      \"frown\",\n      \"frowning\",\n      \"sad\",\n      \"slightly\"\n    ],\n    \"emoji\": \"🙁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 84,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1\n  },\n  {\n    \"label\": \"frowning face\",\n    \"hexcode\": \"2639\",\n    \"tags\": [\n      \"face\",\n      \"frown\",\n      \"frowning\",\n      \"sad\"\n    ],\n    \"emoji\": \"☹️\",\n    \"text\": \"☹︎\",\n    \"type\": 0,\n    \"order\": 86,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.7,\n    \"emoticon\": \":(\"\n  },\n  {\n    \"label\": \"face with open mouth\",\n    \"hexcode\": \"1F62E\",\n    \"tags\": [\n      \"believe\",\n      \"face\",\n      \"forgot\",\n      \"mouth\",\n      \"omg\",\n      \"open\",\n      \"shocked\",\n      \"surprised\",\n      \"sympathy\",\n      \"unbelievable\",\n      \"unreal\",\n      \"whoa\",\n      \"wow\",\n      \"you\"\n    ],\n    \"emoji\": \"😮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 87,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hushed face\",\n    \"hexcode\": \"1F62F\",\n    \"tags\": [\n      \"epic\",\n      \"face\",\n      \"hushed\",\n      \"omg\",\n      \"stunned\",\n      \"surprised\",\n      \"whoa\",\n      \"woah\"\n    ],\n    \"emoji\": \"😯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 88,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1\n  },\n  {\n    \"label\": \"astonished face\",\n    \"hexcode\": \"1F632\",\n    \"tags\": [\n      \"astonished\",\n      \"cost\",\n      \"face\",\n      \"no\",\n      \"omg\",\n      \"shocked\",\n      \"totally\",\n      \"way\"\n    ],\n    \"emoji\": \"😲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 89,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \":o\",\n      \":O\"\n    ]\n  },\n  {\n    \"label\": \"flushed face\",\n    \"hexcode\": \"1F633\",\n    \"tags\": [\n      \"amazed\",\n      \"awkward\",\n      \"crazy\",\n      \"dazed\",\n      \"dead\",\n      \"disbelief\",\n      \"embarrassed\",\n      \"face\",\n      \"flushed\",\n      \"geez\",\n      \"heat\",\n      \"hot\",\n      \"impressed\",\n      \"jeez\",\n      \"what\",\n      \"wow\"\n    ],\n    \"emoji\": \"😳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 90,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \":$\"\n  },\n  {\n    \"label\": \"distorted face\",\n    \"hexcode\": \"1FAEA\",\n    \"tags\": [\n      \"anxiety\",\n      \"bloated\",\n      \"panic\",\n      \"shocked\",\n      \"surprised\",\n      \"vulnerable\"\n    ],\n    \"emoji\": \"🫪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 91,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 17\n  },\n  {\n    \"label\": \"pleading face\",\n    \"hexcode\": \"1F97A\",\n    \"tags\": [\n      \"begging\",\n      \"big\",\n      \"eyes\",\n      \"face\",\n      \"mercy\",\n      \"not\",\n      \"pleading\",\n      \"please\",\n      \"pretty\",\n      \"puppy\",\n      \"sad\",\n      \"why\"\n    ],\n    \"emoji\": \"🥺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 92,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 11\n  },\n  {\n    \"label\": \"face holding back tears\",\n    \"hexcode\": \"1F979\",\n    \"tags\": [\n      \"admiration\",\n      \"aww\",\n      \"back\",\n      \"cry\",\n      \"embarrassed\",\n      \"face\",\n      \"feelings\",\n      \"grateful\",\n      \"gratitude\",\n      \"holding\",\n      \"joy\",\n      \"please\",\n      \"proud\",\n      \"resist\",\n      \"sad\",\n      \"tears\"\n    ],\n    \"emoji\": \"🥹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 93,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 14\n  },\n  {\n    \"label\": \"frowning face with open mouth\",\n    \"hexcode\": \"1F626\",\n    \"tags\": [\n      \"caught\",\n      \"face\",\n      \"frown\",\n      \"frowning\",\n      \"guard\",\n      \"mouth\",\n      \"open\",\n      \"scared\",\n      \"scary\",\n      \"surprise\",\n      \"what\",\n      \"wow\"\n    ],\n    \"emoji\": \"😦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 94,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1\n  },\n  {\n    \"label\": \"anguished face\",\n    \"hexcode\": \"1F627\",\n    \"tags\": [\n      \"anguished\",\n      \"face\",\n      \"forgot\",\n      \"scared\",\n      \"scary\",\n      \"stressed\",\n      \"surprise\",\n      \"unhappy\",\n      \"what\",\n      \"wow\"\n    ],\n    \"emoji\": \"😧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 95,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 1,\n    \"emoticon\": [\n      \":s\",\n      \":S\"\n    ]\n  },\n  {\n    \"label\": \"fearful face\",\n    \"hexcode\": \"1F628\",\n    \"tags\": [\n      \"afraid\",\n      \"anxious\",\n      \"blame\",\n      \"face\",\n      \"fear\",\n      \"fearful\",\n      \"scared\",\n      \"worried\"\n    ],\n    \"emoji\": \"😨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 96,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"anxious face with sweat\",\n    \"hexcode\": \"1F630\",\n    \"tags\": [\n      \"anxious\",\n      \"blue\",\n      \"cold\",\n      \"eek\",\n      \"face\",\n      \"mouth\",\n      \"nervous\",\n      \"open\",\n      \"rushed\",\n      \"scared\",\n      \"sweat\",\n      \"yikes\"\n    ],\n    \"emoji\": \"😰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 97,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sad but relieved face\",\n    \"hexcode\": \"1F625\",\n    \"tags\": [\n      \"anxious\",\n      \"call\",\n      \"close\",\n      \"complicated\",\n      \"disappointed\",\n      \"face\",\n      \"not\",\n      \"relieved\",\n      \"sad\",\n      \"sweat\",\n      \"time\",\n      \"whew\"\n    ],\n    \"emoji\": \"😥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 98,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"crying face\",\n    \"hexcode\": \"1F622\",\n    \"tags\": [\n      \"awful\",\n      \"cry\",\n      \"crying\",\n      \"face\",\n      \"feels\",\n      \"miss\",\n      \"sad\",\n      \"tear\",\n      \"triste\",\n      \"unhappy\"\n    ],\n    \"emoji\": \"😢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 99,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \":'(\"\n  },\n  {\n    \"label\": \"loudly crying face\",\n    \"hexcode\": \"1F62D\",\n    \"tags\": [\n      \"bawling\",\n      \"cry\",\n      \"crying\",\n      \"face\",\n      \"loudly\",\n      \"sad\",\n      \"sob\",\n      \"tear\",\n      \"tears\",\n      \"unhappy\"\n    ],\n    \"emoji\": \"😭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 100,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \":'o\"\n  },\n  {\n    \"label\": \"face screaming in fear\",\n    \"hexcode\": \"1F631\",\n    \"tags\": [\n      \"epic\",\n      \"face\",\n      \"fear\",\n      \"fearful\",\n      \"munch\",\n      \"scared\",\n      \"scream\",\n      \"screamer\",\n      \"screaming\",\n      \"shocked\",\n      \"surprised\",\n      \"woah\"\n    ],\n    \"emoji\": \"😱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 101,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \"Dx\"\n  },\n  {\n    \"label\": \"confounded face\",\n    \"hexcode\": \"1F616\",\n    \"tags\": [\n      \"annoyed\",\n      \"confounded\",\n      \"confused\",\n      \"cringe\",\n      \"distraught\",\n      \"face\",\n      \"feels\",\n      \"frustrated\",\n      \"mad\",\n      \"sad\"\n    ],\n    \"emoji\": \"😖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 102,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \"x(\",\n      \"X(\"\n    ]\n  },\n  {\n    \"label\": \"persevering face\",\n    \"hexcode\": \"1F623\",\n    \"tags\": [\n      \"concentrate\",\n      \"concentration\",\n      \"face\",\n      \"focus\",\n      \"headache\",\n      \"persevere\",\n      \"persevering\"\n    ],\n    \"emoji\": \"😣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 103,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"disappointed face\",\n    \"hexcode\": \"1F61E\",\n    \"tags\": [\n      \"awful\",\n      \"blame\",\n      \"dejected\",\n      \"disappointed\",\n      \"face\",\n      \"fail\",\n      \"losing\",\n      \"sad\",\n      \"unhappy\"\n    ],\n    \"emoji\": \"😞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 104,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"downcast face with sweat\",\n    \"hexcode\": \"1F613\",\n    \"tags\": [\n      \"close\",\n      \"cold\",\n      \"downcast\",\n      \"face\",\n      \"feels\",\n      \"headache\",\n      \"nervous\",\n      \"sad\",\n      \"scared\",\n      \"sweat\",\n      \"yikes\"\n    ],\n    \"emoji\": \"😓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 105,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \":<\"\n  },\n  {\n    \"label\": \"weary face\",\n    \"hexcode\": \"1F629\",\n    \"tags\": [\n      \"crying\",\n      \"face\",\n      \"fail\",\n      \"feels\",\n      \"hungry\",\n      \"mad\",\n      \"nooo\",\n      \"sad\",\n      \"sleepy\",\n      \"tired\",\n      \"unhappy\",\n      \"weary\"\n    ],\n    \"emoji\": \"😩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 106,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": \"D:\"\n  },\n  {\n    \"label\": \"tired face\",\n    \"hexcode\": \"1F62B\",\n    \"tags\": [\n      \"cost\",\n      \"face\",\n      \"feels\",\n      \"nap\",\n      \"sad\",\n      \"sneeze\",\n      \"tired\"\n    ],\n    \"emoji\": \"😫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 107,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 0.6,\n    \"emoticon\": [\n      \":c\",\n      \":C\"\n    ]\n  },\n  {\n    \"label\": \"yawning face\",\n    \"hexcode\": \"1F971\",\n    \"tags\": [\n      \"bedtime\",\n      \"bored\",\n      \"face\",\n      \"goodnight\",\n      \"nap\",\n      \"night\",\n      \"sleep\",\n      \"sleepy\",\n      \"tired\",\n      \"whatever\",\n      \"yawn\",\n      \"yawning\",\n      \"zzz\"\n    ],\n    \"emoji\": \"🥱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 108,\n    \"group\": 0,\n    \"subgroup\": 9,\n    \"version\": 12\n  },\n  {\n    \"label\": \"face with steam from nose\",\n    \"hexcode\": \"1F624\",\n    \"tags\": [\n      \"anger\",\n      \"angry\",\n      \"face\",\n      \"feels\",\n      \"fume\",\n      \"fuming\",\n      \"furious\",\n      \"fury\",\n      \"mad\",\n      \"nose\",\n      \"steam\",\n      \"triumph\",\n      \"unhappy\",\n      \"won\"\n    ],\n    \"emoji\": \"😤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 109,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"enraged face\",\n    \"hexcode\": \"1F621\",\n    \"tags\": [\n      \"anger\",\n      \"angry\",\n      \"enraged\",\n      \"face\",\n      \"feels\",\n      \"mad\",\n      \"maddening\",\n      \"pouting\",\n      \"rage\",\n      \"red\",\n      \"shade\",\n      \"unhappy\",\n      \"upset\"\n    ],\n    \"emoji\": \"😡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 110,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 0.6,\n    \"emoticon\": \">:/\"\n  },\n  {\n    \"label\": \"angry face\",\n    \"hexcode\": \"1F620\",\n    \"tags\": [\n      \"anger\",\n      \"angry\",\n      \"blame\",\n      \"face\",\n      \"feels\",\n      \"frustrated\",\n      \"mad\",\n      \"maddening\",\n      \"rage\",\n      \"shade\",\n      \"unhappy\",\n      \"upset\"\n    ],\n    \"emoji\": \"😠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 111,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"face with symbols on mouth\",\n    \"hexcode\": \"1F92C\",\n    \"tags\": [\n      \"censor\",\n      \"cursing\",\n      \"cussing\",\n      \"face\",\n      \"mad\",\n      \"mouth\",\n      \"pissed\",\n      \"swearing\",\n      \"symbols\"\n    ],\n    \"emoji\": \"🤬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 112,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 5,\n    \"emoticon\": \":@\"\n  },\n  {\n    \"label\": \"smiling face with horns\",\n    \"hexcode\": \"1F608\",\n    \"tags\": [\n      \"demon\",\n      \"devil\",\n      \"evil\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"horns\",\n      \"purple\",\n      \"shade\",\n      \"smile\",\n      \"smiling\",\n      \"tale\"\n    ],\n    \"emoji\": \"😈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 113,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 1,\n    \"emoticon\": \">:)\"\n  },\n  {\n    \"label\": \"angry face with horns\",\n    \"hexcode\": \"1F47F\",\n    \"tags\": [\n      \"angry\",\n      \"demon\",\n      \"devil\",\n      \"evil\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"horns\",\n      \"imp\",\n      \"mischievous\",\n      \"purple\",\n      \"shade\",\n      \"tale\"\n    ],\n    \"emoji\": \"👿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 114,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 0.6,\n    \"emoticon\": \">:(\"\n  },\n  {\n    \"label\": \"skull\",\n    \"hexcode\": \"1F480\",\n    \"tags\": [\n      \"body\",\n      \"dead\",\n      \"death\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"i’m\",\n      \"lmao\",\n      \"monster\",\n      \"tale\",\n      \"yolo\"\n    ],\n    \"emoji\": \"💀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 115,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"skull and crossbones\",\n    \"hexcode\": \"2620\",\n    \"tags\": [\n      \"bone\",\n      \"crossbones\",\n      \"dead\",\n      \"death\",\n      \"face\",\n      \"monster\",\n      \"skull\"\n    ],\n    \"emoji\": \"☠️\",\n    \"text\": \"☠︎\",\n    \"type\": 0,\n    \"order\": 117,\n    \"group\": 0,\n    \"subgroup\": 10,\n    \"version\": 1\n  },\n  {\n    \"label\": \"pile of poo\",\n    \"hexcode\": \"1F4A9\",\n    \"tags\": [\n      \"bs\",\n      \"comic\",\n      \"doo\",\n      \"dung\",\n      \"face\",\n      \"fml\",\n      \"monster\",\n      \"pile\",\n      \"poo\",\n      \"poop\",\n      \"smelly\",\n      \"smh\",\n      \"stink\",\n      \"stinks\",\n      \"stinky\",\n      \"turd\"\n    ],\n    \"emoji\": \"💩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 118,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clown face\",\n    \"hexcode\": \"1F921\",\n    \"tags\": [\n      \"clown\",\n      \"face\"\n    ],\n    \"emoji\": \"🤡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 119,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 3\n  },\n  {\n    \"label\": \"ogre\",\n    \"hexcode\": \"1F479\",\n    \"tags\": [\n      \"creature\",\n      \"devil\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"mask\",\n      \"monster\",\n      \"scary\",\n      \"tale\"\n    ],\n    \"emoji\": \"👹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 120,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6,\n    \"emoticon\": \">0)\"\n  },\n  {\n    \"label\": \"goblin\",\n    \"hexcode\": \"1F47A\",\n    \"tags\": [\n      \"angry\",\n      \"creature\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"mask\",\n      \"mean\",\n      \"monster\",\n      \"tale\"\n    ],\n    \"emoji\": \"👺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 121,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ghost\",\n    \"hexcode\": \"1F47B\",\n    \"tags\": [\n      \"boo\",\n      \"creature\",\n      \"excited\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"halloween\",\n      \"haunting\",\n      \"monster\",\n      \"scary\",\n      \"silly\",\n      \"tale\"\n    ],\n    \"emoji\": \"👻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 122,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"alien\",\n    \"hexcode\": \"1F47D\",\n    \"tags\": [\n      \"creature\",\n      \"extraterrestrial\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"monster\",\n      \"space\",\n      \"tale\",\n      \"ufo\"\n    ],\n    \"emoji\": \"👽️\",\n    \"text\": \"👽︎\",\n    \"type\": 1,\n    \"order\": 123,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"alien monster\",\n    \"hexcode\": \"1F47E\",\n    \"tags\": [\n      \"alien\",\n      \"creature\",\n      \"extraterrestrial\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"game\",\n      \"gamer\",\n      \"games\",\n      \"monster\",\n      \"pixelated\",\n      \"space\",\n      \"tale\",\n      \"ufo\"\n    ],\n    \"emoji\": \"👾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 124,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"robot\",\n    \"hexcode\": \"1F916\",\n    \"tags\": [\n      \"face\",\n      \"monster\"\n    ],\n    \"emoji\": \"🤖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 125,\n    \"group\": 0,\n    \"subgroup\": 11,\n    \"version\": 1\n  },\n  {\n    \"label\": \"grinning cat\",\n    \"hexcode\": \"1F63A\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"grinning\",\n      \"mouth\",\n      \"open\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 126,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"grinning cat with smiling eyes\",\n    \"hexcode\": \"1F638\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"grin\",\n      \"grinning\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 127,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cat with tears of joy\",\n    \"hexcode\": \"1F639\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"joy\",\n      \"laugh\",\n      \"laughing\",\n      \"lol\",\n      \"tear\",\n      \"tears\"\n    ],\n    \"emoji\": \"😹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 128,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"smiling cat with heart-eyes\",\n    \"hexcode\": \"1F63B\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"eye\",\n      \"face\",\n      \"heart\",\n      \"heart-eyes\",\n      \"love\",\n      \"smile\",\n      \"smiling\"\n    ],\n    \"emoji\": \"😻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 129,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cat with wry smile\",\n    \"hexcode\": \"1F63C\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"ironic\",\n      \"smile\",\n      \"wry\"\n    ],\n    \"emoji\": \"😼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 130,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"kissing cat\",\n    \"hexcode\": \"1F63D\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"closed\",\n      \"eye\",\n      \"eyes\",\n      \"face\",\n      \"kiss\",\n      \"kissing\"\n    ],\n    \"emoji\": \"😽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 131,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6,\n    \"emoticon\": \":3\"\n  },\n  {\n    \"label\": \"weary cat\",\n    \"hexcode\": \"1F640\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"oh\",\n      \"surprised\",\n      \"weary\"\n    ],\n    \"emoji\": \"🙀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 132,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"crying cat\",\n    \"hexcode\": \"1F63F\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"cry\",\n      \"crying\",\n      \"face\",\n      \"sad\",\n      \"tear\"\n    ],\n    \"emoji\": \"😿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 133,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pouting cat\",\n    \"hexcode\": \"1F63E\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"pouting\"\n    ],\n    \"emoji\": \"😾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 134,\n    \"group\": 0,\n    \"subgroup\": 12,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"see-no-evil monkey\",\n    \"hexcode\": \"1F648\",\n    \"tags\": [\n      \"embarrassed\",\n      \"evil\",\n      \"face\",\n      \"forbidden\",\n      \"forgot\",\n      \"gesture\",\n      \"hide\",\n      \"monkey\",\n      \"no\",\n      \"omg\",\n      \"prohibited\",\n      \"scared\",\n      \"secret\",\n      \"smh\",\n      \"watch\"\n    ],\n    \"emoji\": \"🙈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 135,\n    \"group\": 0,\n    \"subgroup\": 13,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hear-no-evil monkey\",\n    \"hexcode\": \"1F649\",\n    \"tags\": [\n      \"animal\",\n      \"ears\",\n      \"evil\",\n      \"face\",\n      \"forbidden\",\n      \"gesture\",\n      \"hear\",\n      \"listen\",\n      \"monkey\",\n      \"no\",\n      \"not\",\n      \"prohibited\",\n      \"secret\",\n      \"shh\",\n      \"tmi\"\n    ],\n    \"emoji\": \"🙉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 136,\n    \"group\": 0,\n    \"subgroup\": 13,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"speak-no-evil monkey\",\n    \"hexcode\": \"1F64A\",\n    \"tags\": [\n      \"animal\",\n      \"evil\",\n      \"face\",\n      \"forbidden\",\n      \"gesture\",\n      \"monkey\",\n      \"no\",\n      \"not\",\n      \"oops\",\n      \"prohibited\",\n      \"quiet\",\n      \"secret\",\n      \"speak\",\n      \"stealth\"\n    ],\n    \"emoji\": \"🙊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 137,\n    \"group\": 0,\n    \"subgroup\": 13,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"love letter\",\n    \"hexcode\": \"1F48C\",\n    \"tags\": [\n      \"heart\",\n      \"letter\",\n      \"love\",\n      \"mail\",\n      \"romance\",\n      \"valentine\"\n    ],\n    \"emoji\": \"💌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 138,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heart with arrow\",\n    \"hexcode\": \"1F498\",\n    \"tags\": [\n      \"143\",\n      \"adorbs\",\n      \"arrow\",\n      \"cupid\",\n      \"date\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"romance\",\n      \"valentine\"\n    ],\n    \"emoji\": \"💘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 139,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heart with ribbon\",\n    \"hexcode\": \"1F49D\",\n    \"tags\": [\n      \"143\",\n      \"anniversary\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"kisses\",\n      \"ribbon\",\n      \"valentine\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"💝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 140,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sparkling heart\",\n    \"hexcode\": \"1F496\",\n    \"tags\": [\n      \"143\",\n      \"emotion\",\n      \"excited\",\n      \"good\",\n      \"heart\",\n      \"ily\",\n      \"kisses\",\n      \"morning\",\n      \"night\",\n      \"sparkle\",\n      \"sparkling\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"💖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 141,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"growing heart\",\n    \"hexcode\": \"1F497\",\n    \"tags\": [\n      \"143\",\n      \"emotion\",\n      \"excited\",\n      \"growing\",\n      \"heart\",\n      \"heartpulse\",\n      \"ily\",\n      \"kisses\",\n      \"muah\",\n      \"nervous\",\n      \"pulse\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"💗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 142,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"beating heart\",\n    \"hexcode\": \"1F493\",\n    \"tags\": [\n      \"143\",\n      \"beating\",\n      \"cardio\",\n      \"emotion\",\n      \"heart\",\n      \"heartbeat\",\n      \"ily\",\n      \"love\",\n      \"pulsating\",\n      \"pulse\"\n    ],\n    \"emoji\": \"💓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 143,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"revolving hearts\",\n    \"hexcode\": \"1F49E\",\n    \"tags\": [\n      \"143\",\n      \"adorbs\",\n      \"anniversary\",\n      \"emotion\",\n      \"heart\",\n      \"hearts\",\n      \"revolving\"\n    ],\n    \"emoji\": \"💞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 144,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"two hearts\",\n    \"hexcode\": \"1F495\",\n    \"tags\": [\n      \"143\",\n      \"anniversary\",\n      \"date\",\n      \"dating\",\n      \"emotion\",\n      \"heart\",\n      \"hearts\",\n      \"ily\",\n      \"kisses\",\n      \"love\",\n      \"loving\",\n      \"two\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"💕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 145,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heart decoration\",\n    \"hexcode\": \"1F49F\",\n    \"tags\": [\n      \"143\",\n      \"decoration\",\n      \"emotion\",\n      \"heart\",\n      \"hearth\",\n      \"purple\",\n      \"white\"\n    ],\n    \"emoji\": \"💟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 146,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heart exclamation\",\n    \"hexcode\": \"2763\",\n    \"tags\": [\n      \"exclamation\",\n      \"heart\",\n      \"heavy\",\n      \"mark\",\n      \"punctuation\"\n    ],\n    \"emoji\": \"❣️\",\n    \"text\": \"❣︎\",\n    \"type\": 0,\n    \"order\": 148,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 1\n  },\n  {\n    \"label\": \"broken heart\",\n    \"hexcode\": \"1F494\",\n    \"tags\": [\n      \"break\",\n      \"broken\",\n      \"crushed\",\n      \"emotion\",\n      \"heart\",\n      \"heartbroken\",\n      \"lonely\",\n      \"sad\"\n    ],\n    \"emoji\": \"💔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 149,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6,\n    \"emoticon\": \"</3\"\n  },\n  {\n    \"label\": \"heart on fire\",\n    \"hexcode\": \"2764-FE0F-200D-1F525\",\n    \"tags\": [\n      \"burn\",\n      \"fire\",\n      \"heart\",\n      \"love\",\n      \"lust\",\n      \"sacred\"\n    ],\n    \"emoji\": \"❤️‍🔥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 150,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 13.1\n  },\n  {\n    \"label\": \"mending heart\",\n    \"hexcode\": \"2764-FE0F-200D-1FA79\",\n    \"tags\": [\n      \"healthier\",\n      \"heart\",\n      \"improving\",\n      \"mending\",\n      \"recovering\",\n      \"recuperating\",\n      \"well\"\n    ],\n    \"emoji\": \"❤️‍🩹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 152,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 13.1\n  },\n  {\n    \"label\": \"red heart\",\n    \"hexcode\": \"2764\",\n    \"tags\": [\n      \"emotion\",\n      \"heart\",\n      \"love\",\n      \"red\"\n    ],\n    \"emoji\": \"❤️\",\n    \"text\": \"❤︎\",\n    \"type\": 0,\n    \"order\": 155,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6,\n    \"emoticon\": \"<3\"\n  },\n  {\n    \"label\": \"pink heart\",\n    \"hexcode\": \"1FA77\",\n    \"tags\": [\n      \"143\",\n      \"adorable\",\n      \"cute\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"like\",\n      \"love\",\n      \"pink\",\n      \"special\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🩷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 156,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 15\n  },\n  {\n    \"label\": \"orange heart\",\n    \"hexcode\": \"1F9E1\",\n    \"tags\": [\n      \"143\",\n      \"heart\",\n      \"orange\"\n    ],\n    \"emoji\": \"🧡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 157,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 5\n  },\n  {\n    \"label\": \"yellow heart\",\n    \"hexcode\": \"1F49B\",\n    \"tags\": [\n      \"143\",\n      \"cardiac\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"yellow\"\n    ],\n    \"emoji\": \"💛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 158,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"green heart\",\n    \"hexcode\": \"1F49A\",\n    \"tags\": [\n      \"143\",\n      \"emotion\",\n      \"green\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"romantic\"\n    ],\n    \"emoji\": \"💚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 159,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"blue heart\",\n    \"hexcode\": \"1F499\",\n    \"tags\": [\n      \"143\",\n      \"blue\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"romance\"\n    ],\n    \"emoji\": \"💙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 160,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"light blue heart\",\n    \"hexcode\": \"1FA75\",\n    \"tags\": [\n      \"143\",\n      \"blue\",\n      \"cute\",\n      \"cyan\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"light\",\n      \"like\",\n      \"love\",\n      \"sky\",\n      \"special\",\n      \"teal\"\n    ],\n    \"emoji\": \"🩵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 161,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 15\n  },\n  {\n    \"label\": \"purple heart\",\n    \"hexcode\": \"1F49C\",\n    \"tags\": [\n      \"143\",\n      \"bestest\",\n      \"emotion\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"purple\"\n    ],\n    \"emoji\": \"💜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 162,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"brown heart\",\n    \"hexcode\": \"1F90E\",\n    \"tags\": [\n      \"143\",\n      \"brown\",\n      \"heart\"\n    ],\n    \"emoji\": \"🤎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 163,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 12\n  },\n  {\n    \"label\": \"black heart\",\n    \"hexcode\": \"1F5A4\",\n    \"tags\": [\n      \"black\",\n      \"evil\",\n      \"heart\",\n      \"wicked\"\n    ],\n    \"emoji\": \"🖤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 164,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 3\n  },\n  {\n    \"label\": \"grey heart\",\n    \"hexcode\": \"1FA76\",\n    \"tags\": [\n      \"143\",\n      \"emotion\",\n      \"gray\",\n      \"grey\",\n      \"heart\",\n      \"ily\",\n      \"love\",\n      \"silver\",\n      \"slate\",\n      \"special\"\n    ],\n    \"emoji\": \"🩶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 165,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 15\n  },\n  {\n    \"label\": \"white heart\",\n    \"hexcode\": \"1F90D\",\n    \"tags\": [\n      \"143\",\n      \"heart\",\n      \"white\"\n    ],\n    \"emoji\": \"🤍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 166,\n    \"group\": 0,\n    \"subgroup\": 14,\n    \"version\": 12\n  },\n  {\n    \"label\": \"kiss mark\",\n    \"hexcode\": \"1F48B\",\n    \"tags\": [\n      \"dating\",\n      \"emotion\",\n      \"heart\",\n      \"kiss\",\n      \"kissing\",\n      \"lips\",\n      \"mark\",\n      \"romance\",\n      \"sexy\"\n    ],\n    \"emoji\": \"💋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 167,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hundred points\",\n    \"hexcode\": \"1F4AF\",\n    \"tags\": [\n      \"100\",\n      \"a+\",\n      \"agree\",\n      \"clearly\",\n      \"definitely\",\n      \"faithful\",\n      \"fleek\",\n      \"full\",\n      \"hundred\",\n      \"keep\",\n      \"perfect\",\n      \"point\",\n      \"score\",\n      \"true\",\n      \"truth\",\n      \"yup\"\n    ],\n    \"emoji\": \"💯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 168,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"anger symbol\",\n    \"hexcode\": \"1F4A2\",\n    \"tags\": [\n      \"anger\",\n      \"angry\",\n      \"comic\",\n      \"mad\",\n      \"symbol\",\n      \"upset\"\n    ],\n    \"emoji\": \"💢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 169,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fight cloud\",\n    \"hexcode\": \"1FAEF\",\n    \"tags\": [\n      \"argument\",\n      \"brawl\",\n      \"debate\",\n      \"disagreement\",\n      \"fight\",\n      \"ruckus\",\n      \"wrestle\"\n    ],\n    \"emoji\": \"🫯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 170,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 17\n  },\n  {\n    \"label\": \"collision\",\n    \"hexcode\": \"1F4A5\",\n    \"tags\": [\n      \"bomb\",\n      \"boom\",\n      \"collide\",\n      \"comic\",\n      \"explode\"\n    ],\n    \"emoji\": \"💥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 171,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dizzy\",\n    \"hexcode\": \"1F4AB\",\n    \"tags\": [\n      \"comic\",\n      \"shining\",\n      \"shooting\",\n      \"star\",\n      \"stars\"\n    ],\n    \"emoji\": \"💫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 172,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sweat droplets\",\n    \"hexcode\": \"1F4A6\",\n    \"tags\": [\n      \"comic\",\n      \"drip\",\n      \"droplet\",\n      \"droplets\",\n      \"drops\",\n      \"splashing\",\n      \"squirt\",\n      \"sweat\",\n      \"water\",\n      \"wet\",\n      \"work\",\n      \"workout\"\n    ],\n    \"emoji\": \"💦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 173,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dashing away\",\n    \"hexcode\": \"1F4A8\",\n    \"tags\": [\n      \"away\",\n      \"cloud\",\n      \"comic\",\n      \"dash\",\n      \"dashing\",\n      \"fart\",\n      \"fast\",\n      \"go\",\n      \"gone\",\n      \"gotta\",\n      \"running\",\n      \"smoke\"\n    ],\n    \"emoji\": \"💨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 174,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hole\",\n    \"hexcode\": \"1F573\",\n    \"tags\": [\n      \"hole\"\n    ],\n    \"emoji\": \"🕳️\",\n    \"text\": \"🕳︎\",\n    \"type\": 0,\n    \"order\": 176,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"speech balloon\",\n    \"hexcode\": \"1F4AC\",\n    \"tags\": [\n      \"balloon\",\n      \"bubble\",\n      \"comic\",\n      \"dialog\",\n      \"message\",\n      \"sms\",\n      \"speech\",\n      \"talk\",\n      \"text\",\n      \"typing\"\n    ],\n    \"emoji\": \"💬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 177,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eye in speech bubble\",\n    \"hexcode\": \"1F441-FE0F-200D-1F5E8-FE0F\",\n    \"tags\": [\n      \"balloon\",\n      \"bubble\",\n      \"eye\",\n      \"speech\",\n      \"witness\"\n    ],\n    \"emoji\": \"👁️‍🗨️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 178,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 2\n  },\n  {\n    \"label\": \"left speech bubble\",\n    \"hexcode\": \"1F5E8\",\n    \"tags\": [\n      \"balloon\",\n      \"bubble\",\n      \"dialog\",\n      \"left\",\n      \"speech\"\n    ],\n    \"emoji\": \"🗨️\",\n    \"text\": \"🗨︎\",\n    \"type\": 0,\n    \"order\": 183,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 2\n  },\n  {\n    \"label\": \"right anger bubble\",\n    \"hexcode\": \"1F5EF\",\n    \"tags\": [\n      \"anger\",\n      \"angry\",\n      \"balloon\",\n      \"bubble\",\n      \"mad\",\n      \"right\"\n    ],\n    \"emoji\": \"🗯️\",\n    \"text\": \"🗯︎\",\n    \"type\": 0,\n    \"order\": 185,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"thought balloon\",\n    \"hexcode\": \"1F4AD\",\n    \"tags\": [\n      \"balloon\",\n      \"bubble\",\n      \"cartoon\",\n      \"cloud\",\n      \"comic\",\n      \"daydream\",\n      \"decisions\",\n      \"dream\",\n      \"idea\",\n      \"invent\",\n      \"invention\",\n      \"realize\",\n      \"think\",\n      \"thoughts\",\n      \"wonder\"\n    ],\n    \"emoji\": \"💭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 186,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 1\n  },\n  {\n    \"label\": \"ZZZ\",\n    \"hexcode\": \"1F4A4\",\n    \"tags\": [\n      \"comic\",\n      \"good\",\n      \"goodnight\",\n      \"night\",\n      \"sleep\",\n      \"sleeping\",\n      \"sleepy\",\n      \"tired\",\n      \"zzz\"\n    ],\n    \"emoji\": \"💤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 187,\n    \"group\": 0,\n    \"subgroup\": 15,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"waving hand\",\n    \"hexcode\": \"1F44B\",\n    \"tags\": [\n      \"bye\",\n      \"cya\",\n      \"g2g\",\n      \"greetings\",\n      \"gtg\",\n      \"hand\",\n      \"hello\",\n      \"hey\",\n      \"hi\",\n      \"later\",\n      \"outtie\",\n      \"ttfn\",\n      \"ttyl\",\n      \"wave\",\n      \"yo\",\n      \"you\"\n    ],\n    \"emoji\": \"👋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 188,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"waving hand: light skin tone\",\n        \"hexcode\": \"1F44B-1F3FB\",\n        \"emoji\": \"👋🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 189,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"waving hand: medium-light skin tone\",\n        \"hexcode\": \"1F44B-1F3FC\",\n        \"emoji\": \"👋🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 190,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"waving hand: medium skin tone\",\n        \"hexcode\": \"1F44B-1F3FD\",\n        \"emoji\": \"👋🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 191,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"waving hand: medium-dark skin tone\",\n        \"hexcode\": \"1F44B-1F3FE\",\n        \"emoji\": \"👋🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 192,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"waving hand: dark skin tone\",\n        \"hexcode\": \"1F44B-1F3FF\",\n        \"emoji\": \"👋🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 193,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"raised back of hand\",\n    \"hexcode\": \"1F91A\",\n    \"tags\": [\n      \"back\",\n      \"backhand\",\n      \"hand\",\n      \"raised\"\n    ],\n    \"emoji\": \"🤚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 194,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"raised back of hand: light skin tone\",\n        \"hexcode\": \"1F91A-1F3FB\",\n        \"emoji\": \"🤚🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 195,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"raised back of hand: medium-light skin tone\",\n        \"hexcode\": \"1F91A-1F3FC\",\n        \"emoji\": \"🤚🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 196,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"raised back of hand: medium skin tone\",\n        \"hexcode\": \"1F91A-1F3FD\",\n        \"emoji\": \"🤚🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 197,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"raised back of hand: medium-dark skin tone\",\n        \"hexcode\": \"1F91A-1F3FE\",\n        \"emoji\": \"🤚🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 198,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"raised back of hand: dark skin tone\",\n        \"hexcode\": \"1F91A-1F3FF\",\n        \"emoji\": \"🤚🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 199,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"hand with fingers splayed\",\n    \"hexcode\": \"1F590\",\n    \"tags\": [\n      \"finger\",\n      \"fingers\",\n      \"hand\",\n      \"raised\",\n      \"splayed\",\n      \"stop\"\n    ],\n    \"emoji\": \"🖐️\",\n    \"text\": \"🖐︎\",\n    \"type\": 0,\n    \"order\": 201,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"hand with fingers splayed: light skin tone\",\n        \"hexcode\": \"1F590-1F3FB\",\n        \"emoji\": \"🖐🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 202,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"hand with fingers splayed: medium-light skin tone\",\n        \"hexcode\": \"1F590-1F3FC\",\n        \"emoji\": \"🖐🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 203,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"hand with fingers splayed: medium skin tone\",\n        \"hexcode\": \"1F590-1F3FD\",\n        \"emoji\": \"🖐🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 204,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"hand with fingers splayed: medium-dark skin tone\",\n        \"hexcode\": \"1F590-1F3FE\",\n        \"emoji\": \"🖐🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 205,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"hand with fingers splayed: dark skin tone\",\n        \"hexcode\": \"1F590-1F3FF\",\n        \"emoji\": \"🖐🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 206,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"raised hand\",\n    \"hexcode\": \"270B\",\n    \"tags\": [\n      \"5\",\n      \"five\",\n      \"hand\",\n      \"high\",\n      \"raised\",\n      \"stop\"\n    ],\n    \"emoji\": \"✋️\",\n    \"text\": \"✋︎\",\n    \"type\": 1,\n    \"order\": 207,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"raised hand: light skin tone\",\n        \"hexcode\": \"270B-1F3FB\",\n        \"emoji\": \"✋🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 208,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"raised hand: medium-light skin tone\",\n        \"hexcode\": \"270B-1F3FC\",\n        \"emoji\": \"✋🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 209,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"raised hand: medium skin tone\",\n        \"hexcode\": \"270B-1F3FD\",\n        \"emoji\": \"✋🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 210,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"raised hand: medium-dark skin tone\",\n        \"hexcode\": \"270B-1F3FE\",\n        \"emoji\": \"✋🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 211,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"raised hand: dark skin tone\",\n        \"hexcode\": \"270B-1F3FF\",\n        \"emoji\": \"✋🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 212,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"vulcan salute\",\n    \"hexcode\": \"1F596\",\n    \"tags\": [\n      \"finger\",\n      \"hand\",\n      \"hands\",\n      \"salute\",\n      \"vulcan\"\n    ],\n    \"emoji\": \"🖖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 213,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"vulcan salute: light skin tone\",\n        \"hexcode\": \"1F596-1F3FB\",\n        \"emoji\": \"🖖🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 214,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"vulcan salute: medium-light skin tone\",\n        \"hexcode\": \"1F596-1F3FC\",\n        \"emoji\": \"🖖🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 215,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"vulcan salute: medium skin tone\",\n        \"hexcode\": \"1F596-1F3FD\",\n        \"emoji\": \"🖖🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 216,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"vulcan salute: medium-dark skin tone\",\n        \"hexcode\": \"1F596-1F3FE\",\n        \"emoji\": \"🖖🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 217,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"vulcan salute: dark skin tone\",\n        \"hexcode\": \"1F596-1F3FF\",\n        \"emoji\": \"🖖🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 218,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"rightwards hand\",\n    \"hexcode\": \"1FAF1\",\n    \"tags\": [\n      \"hand\",\n      \"handshake\",\n      \"hold\",\n      \"reach\",\n      \"right\",\n      \"rightward\",\n      \"rightwards\",\n      \"shake\"\n    ],\n    \"emoji\": \"🫱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 219,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"rightwards hand: light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FB\",\n        \"emoji\": \"🫱🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 220,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"rightwards hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FC\",\n        \"emoji\": \"🫱🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 221,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"rightwards hand: medium skin tone\",\n        \"hexcode\": \"1FAF1-1F3FD\",\n        \"emoji\": \"🫱🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 222,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"rightwards hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FE\",\n        \"emoji\": \"🫱🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 223,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"rightwards hand: dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FF\",\n        \"emoji\": \"🫱🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 224,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"leftwards hand\",\n    \"hexcode\": \"1FAF2\",\n    \"tags\": [\n      \"hand\",\n      \"handshake\",\n      \"hold\",\n      \"left\",\n      \"leftward\",\n      \"leftwards\",\n      \"reach\",\n      \"shake\"\n    ],\n    \"emoji\": \"🫲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 225,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"leftwards hand: light skin tone\",\n        \"hexcode\": \"1FAF2-1F3FB\",\n        \"emoji\": \"🫲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 226,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"leftwards hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF2-1F3FC\",\n        \"emoji\": \"🫲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 227,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"leftwards hand: medium skin tone\",\n        \"hexcode\": \"1FAF2-1F3FD\",\n        \"emoji\": \"🫲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 228,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"leftwards hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF2-1F3FE\",\n        \"emoji\": \"🫲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 229,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"leftwards hand: dark skin tone\",\n        \"hexcode\": \"1FAF2-1F3FF\",\n        \"emoji\": \"🫲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 230,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"palm down hand\",\n    \"hexcode\": \"1FAF3\",\n    \"tags\": [\n      \"dismiss\",\n      \"down\",\n      \"drop\",\n      \"dropped\",\n      \"hand\",\n      \"palm\",\n      \"pick\",\n      \"shoo\",\n      \"up\"\n    ],\n    \"emoji\": \"🫳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 231,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"palm down hand: light skin tone\",\n        \"hexcode\": \"1FAF3-1F3FB\",\n        \"emoji\": \"🫳🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 232,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"palm down hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF3-1F3FC\",\n        \"emoji\": \"🫳🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 233,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"palm down hand: medium skin tone\",\n        \"hexcode\": \"1FAF3-1F3FD\",\n        \"emoji\": \"🫳🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 234,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"palm down hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF3-1F3FE\",\n        \"emoji\": \"🫳🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 235,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"palm down hand: dark skin tone\",\n        \"hexcode\": \"1FAF3-1F3FF\",\n        \"emoji\": \"🫳🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 236,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"palm up hand\",\n    \"hexcode\": \"1FAF4\",\n    \"tags\": [\n      \"beckon\",\n      \"catch\",\n      \"come\",\n      \"hand\",\n      \"hold\",\n      \"know\",\n      \"lift\",\n      \"me\",\n      \"offer\",\n      \"palm\",\n      \"tell\"\n    ],\n    \"emoji\": \"🫴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 237,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"palm up hand: light skin tone\",\n        \"hexcode\": \"1FAF4-1F3FB\",\n        \"emoji\": \"🫴🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 238,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"palm up hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF4-1F3FC\",\n        \"emoji\": \"🫴🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 239,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"palm up hand: medium skin tone\",\n        \"hexcode\": \"1FAF4-1F3FD\",\n        \"emoji\": \"🫴🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 240,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"palm up hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF4-1F3FE\",\n        \"emoji\": \"🫴🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 241,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"palm up hand: dark skin tone\",\n        \"hexcode\": \"1FAF4-1F3FF\",\n        \"emoji\": \"🫴🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 242,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"leftwards pushing hand\",\n    \"hexcode\": \"1FAF7\",\n    \"tags\": [\n      \"block\",\n      \"five\",\n      \"halt\",\n      \"hand\",\n      \"high\",\n      \"hold\",\n      \"leftward\",\n      \"leftwards\",\n      \"pause\",\n      \"push\",\n      \"pushing\",\n      \"refuse\",\n      \"slap\",\n      \"stop\",\n      \"wait\"\n    ],\n    \"emoji\": \"🫷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 243,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 15,\n    \"skins\": [\n      {\n        \"label\": \"leftwards pushing hand: light skin tone\",\n        \"hexcode\": \"1FAF7-1F3FB\",\n        \"emoji\": \"🫷🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 244,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"leftwards pushing hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF7-1F3FC\",\n        \"emoji\": \"🫷🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 245,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"leftwards pushing hand: medium skin tone\",\n        \"hexcode\": \"1FAF7-1F3FD\",\n        \"emoji\": \"🫷🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 246,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"leftwards pushing hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF7-1F3FE\",\n        \"emoji\": \"🫷🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 247,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"leftwards pushing hand: dark skin tone\",\n        \"hexcode\": \"1FAF7-1F3FF\",\n        \"emoji\": \"🫷🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 248,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"rightwards pushing hand\",\n    \"hexcode\": \"1FAF8\",\n    \"tags\": [\n      \"block\",\n      \"five\",\n      \"halt\",\n      \"hand\",\n      \"high\",\n      \"hold\",\n      \"pause\",\n      \"push\",\n      \"pushing\",\n      \"refuse\",\n      \"rightward\",\n      \"rightwards\",\n      \"slap\",\n      \"stop\",\n      \"wait\"\n    ],\n    \"emoji\": \"🫸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 249,\n    \"group\": 1,\n    \"subgroup\": 16,\n    \"version\": 15,\n    \"skins\": [\n      {\n        \"label\": \"rightwards pushing hand: light skin tone\",\n        \"hexcode\": \"1FAF8-1F3FB\",\n        \"emoji\": \"🫸🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 250,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"rightwards pushing hand: medium-light skin tone\",\n        \"hexcode\": \"1FAF8-1F3FC\",\n        \"emoji\": \"🫸🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 251,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"rightwards pushing hand: medium skin tone\",\n        \"hexcode\": \"1FAF8-1F3FD\",\n        \"emoji\": \"🫸🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 252,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"rightwards pushing hand: medium-dark skin tone\",\n        \"hexcode\": \"1FAF8-1F3FE\",\n        \"emoji\": \"🫸🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 253,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"rightwards pushing hand: dark skin tone\",\n        \"hexcode\": \"1FAF8-1F3FF\",\n        \"emoji\": \"🫸🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 254,\n        \"group\": 1,\n        \"subgroup\": 16,\n        \"version\": 15,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"OK hand\",\n    \"hexcode\": \"1F44C\",\n    \"tags\": [\n      \"awesome\",\n      \"bet\",\n      \"dope\",\n      \"fleek\",\n      \"fosho\",\n      \"got\",\n      \"gotcha\",\n      \"hand\",\n      \"legit\",\n      \"ok\",\n      \"okay\",\n      \"pinch\",\n      \"rad\",\n      \"sure\",\n      \"sweet\",\n      \"three\"\n    ],\n    \"emoji\": \"👌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 255,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"OK hand: light skin tone\",\n        \"hexcode\": \"1F44C-1F3FB\",\n        \"emoji\": \"👌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 256,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"OK hand: medium-light skin tone\",\n        \"hexcode\": \"1F44C-1F3FC\",\n        \"emoji\": \"👌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 257,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"OK hand: medium skin tone\",\n        \"hexcode\": \"1F44C-1F3FD\",\n        \"emoji\": \"👌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 258,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"OK hand: medium-dark skin tone\",\n        \"hexcode\": \"1F44C-1F3FE\",\n        \"emoji\": \"👌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 259,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"OK hand: dark skin tone\",\n        \"hexcode\": \"1F44C-1F3FF\",\n        \"emoji\": \"👌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 260,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pinched fingers\",\n    \"hexcode\": \"1F90C\",\n    \"tags\": [\n      \"fingers\",\n      \"gesture\",\n      \"hand\",\n      \"hold\",\n      \"huh\",\n      \"interrogation\",\n      \"patience\",\n      \"pinched\",\n      \"relax\",\n      \"sarcastic\",\n      \"ugh\",\n      \"what\",\n      \"zip\"\n    ],\n    \"emoji\": \"🤌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 261,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"pinched fingers: light skin tone\",\n        \"hexcode\": \"1F90C-1F3FB\",\n        \"emoji\": \"🤌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 262,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pinched fingers: medium-light skin tone\",\n        \"hexcode\": \"1F90C-1F3FC\",\n        \"emoji\": \"🤌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 263,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pinched fingers: medium skin tone\",\n        \"hexcode\": \"1F90C-1F3FD\",\n        \"emoji\": \"🤌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 264,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pinched fingers: medium-dark skin tone\",\n        \"hexcode\": \"1F90C-1F3FE\",\n        \"emoji\": \"🤌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 265,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pinched fingers: dark skin tone\",\n        \"hexcode\": \"1F90C-1F3FF\",\n        \"emoji\": \"🤌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 266,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pinching hand\",\n    \"hexcode\": \"1F90F\",\n    \"tags\": [\n      \"amount\",\n      \"bit\",\n      \"fingers\",\n      \"hand\",\n      \"little\",\n      \"pinching\",\n      \"small\",\n      \"sort\"\n    ],\n    \"emoji\": \"🤏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 267,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"pinching hand: light skin tone\",\n        \"hexcode\": \"1F90F-1F3FB\",\n        \"emoji\": \"🤏🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 268,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pinching hand: medium-light skin tone\",\n        \"hexcode\": \"1F90F-1F3FC\",\n        \"emoji\": \"🤏🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 269,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pinching hand: medium skin tone\",\n        \"hexcode\": \"1F90F-1F3FD\",\n        \"emoji\": \"🤏🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 270,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pinching hand: medium-dark skin tone\",\n        \"hexcode\": \"1F90F-1F3FE\",\n        \"emoji\": \"🤏🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 271,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pinching hand: dark skin tone\",\n        \"hexcode\": \"1F90F-1F3FF\",\n        \"emoji\": \"🤏🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 272,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"victory hand\",\n    \"hexcode\": \"270C\",\n    \"tags\": [\n      \"hand\",\n      \"peace\",\n      \"v\",\n      \"victory\"\n    ],\n    \"emoji\": \"✌️\",\n    \"text\": \"✌︎\",\n    \"type\": 0,\n    \"order\": 274,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"victory hand: light skin tone\",\n        \"hexcode\": \"270C-1F3FB\",\n        \"emoji\": \"✌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 275,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"victory hand: medium-light skin tone\",\n        \"hexcode\": \"270C-1F3FC\",\n        \"emoji\": \"✌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 276,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"victory hand: medium skin tone\",\n        \"hexcode\": \"270C-1F3FD\",\n        \"emoji\": \"✌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 277,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"victory hand: medium-dark skin tone\",\n        \"hexcode\": \"270C-1F3FE\",\n        \"emoji\": \"✌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 278,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"victory hand: dark skin tone\",\n        \"hexcode\": \"270C-1F3FF\",\n        \"emoji\": \"✌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 279,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"crossed fingers\",\n    \"hexcode\": \"1F91E\",\n    \"tags\": [\n      \"cross\",\n      \"crossed\",\n      \"finger\",\n      \"fingers\",\n      \"hand\",\n      \"luck\"\n    ],\n    \"emoji\": \"🤞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 280,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"crossed fingers: light skin tone\",\n        \"hexcode\": \"1F91E-1F3FB\",\n        \"emoji\": \"🤞🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 281,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"crossed fingers: medium-light skin tone\",\n        \"hexcode\": \"1F91E-1F3FC\",\n        \"emoji\": \"🤞🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 282,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"crossed fingers: medium skin tone\",\n        \"hexcode\": \"1F91E-1F3FD\",\n        \"emoji\": \"🤞🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 283,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"crossed fingers: medium-dark skin tone\",\n        \"hexcode\": \"1F91E-1F3FE\",\n        \"emoji\": \"🤞🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 284,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"crossed fingers: dark skin tone\",\n        \"hexcode\": \"1F91E-1F3FF\",\n        \"emoji\": \"🤞🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 285,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"hand with index finger and thumb crossed\",\n    \"hexcode\": \"1FAF0\",\n    \"tags\": [\n      \"<3\",\n      \"crossed\",\n      \"expensive\",\n      \"finger\",\n      \"hand\",\n      \"heart\",\n      \"index\",\n      \"love\",\n      \"money\",\n      \"snap\",\n      \"thumb\"\n    ],\n    \"emoji\": \"🫰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 286,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"hand with index finger and thumb crossed: light skin tone\",\n        \"hexcode\": \"1FAF0-1F3FB\",\n        \"emoji\": \"🫰🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 287,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"hand with index finger and thumb crossed: medium-light skin tone\",\n        \"hexcode\": \"1FAF0-1F3FC\",\n        \"emoji\": \"🫰🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 288,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"hand with index finger and thumb crossed: medium skin tone\",\n        \"hexcode\": \"1FAF0-1F3FD\",\n        \"emoji\": \"🫰🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 289,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"hand with index finger and thumb crossed: medium-dark skin tone\",\n        \"hexcode\": \"1FAF0-1F3FE\",\n        \"emoji\": \"🫰🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 290,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"hand with index finger and thumb crossed: dark skin tone\",\n        \"hexcode\": \"1FAF0-1F3FF\",\n        \"emoji\": \"🫰🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 291,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"love-you gesture\",\n    \"hexcode\": \"1F91F\",\n    \"tags\": [\n      \"fingers\",\n      \"gesture\",\n      \"hand\",\n      \"ily\",\n      \"love\",\n      \"love-you\",\n      \"three\",\n      \"you\"\n    ],\n    \"emoji\": \"🤟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 292,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"love-you gesture: light skin tone\",\n        \"hexcode\": \"1F91F-1F3FB\",\n        \"emoji\": \"🤟🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 293,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"love-you gesture: medium-light skin tone\",\n        \"hexcode\": \"1F91F-1F3FC\",\n        \"emoji\": \"🤟🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 294,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"love-you gesture: medium skin tone\",\n        \"hexcode\": \"1F91F-1F3FD\",\n        \"emoji\": \"🤟🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 295,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"love-you gesture: medium-dark skin tone\",\n        \"hexcode\": \"1F91F-1F3FE\",\n        \"emoji\": \"🤟🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 296,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"love-you gesture: dark skin tone\",\n        \"hexcode\": \"1F91F-1F3FF\",\n        \"emoji\": \"🤟🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 297,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"sign of the horns\",\n    \"hexcode\": \"1F918\",\n    \"tags\": [\n      \"finger\",\n      \"hand\",\n      \"horns\",\n      \"rock-on\",\n      \"sign\"\n    ],\n    \"emoji\": \"🤘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 298,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 1,\n    \"emoticon\": [\n      \"\\\\m/\",\n      \"\\\\M/\"\n    ],\n    \"skins\": [\n      {\n        \"label\": \"sign of the horns: light skin tone\",\n        \"hexcode\": \"1F918-1F3FB\",\n        \"emoji\": \"🤘🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 299,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"sign of the horns: medium-light skin tone\",\n        \"hexcode\": \"1F918-1F3FC\",\n        \"emoji\": \"🤘🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 300,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"sign of the horns: medium skin tone\",\n        \"hexcode\": \"1F918-1F3FD\",\n        \"emoji\": \"🤘🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 301,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"sign of the horns: medium-dark skin tone\",\n        \"hexcode\": \"1F918-1F3FE\",\n        \"emoji\": \"🤘🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 302,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"sign of the horns: dark skin tone\",\n        \"hexcode\": \"1F918-1F3FF\",\n        \"emoji\": \"🤘🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 303,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"call me hand\",\n    \"hexcode\": \"1F919\",\n    \"tags\": [\n      \"call\",\n      \"hand\",\n      \"hang\",\n      \"loose\",\n      \"me\",\n      \"shaka\"\n    ],\n    \"emoji\": \"🤙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 304,\n    \"group\": 1,\n    \"subgroup\": 17,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"call me hand: light skin tone\",\n        \"hexcode\": \"1F919-1F3FB\",\n        \"emoji\": \"🤙🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 305,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"call me hand: medium-light skin tone\",\n        \"hexcode\": \"1F919-1F3FC\",\n        \"emoji\": \"🤙🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 306,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"call me hand: medium skin tone\",\n        \"hexcode\": \"1F919-1F3FD\",\n        \"emoji\": \"🤙🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 307,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"call me hand: medium-dark skin tone\",\n        \"hexcode\": \"1F919-1F3FE\",\n        \"emoji\": \"🤙🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 308,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"call me hand: dark skin tone\",\n        \"hexcode\": \"1F919-1F3FF\",\n        \"emoji\": \"🤙🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 309,\n        \"group\": 1,\n        \"subgroup\": 17,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"backhand index pointing left\",\n    \"hexcode\": \"1F448\",\n    \"tags\": [\n      \"backhand\",\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"left\",\n      \"point\",\n      \"pointing\"\n    ],\n    \"emoji\": \"👈️\",\n    \"text\": \"👈︎\",\n    \"type\": 1,\n    \"order\": 310,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"backhand index pointing left: light skin tone\",\n        \"hexcode\": \"1F448-1F3FB\",\n        \"emoji\": \"👈🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 311,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"backhand index pointing left: medium-light skin tone\",\n        \"hexcode\": \"1F448-1F3FC\",\n        \"emoji\": \"👈🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 312,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"backhand index pointing left: medium skin tone\",\n        \"hexcode\": \"1F448-1F3FD\",\n        \"emoji\": \"👈🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 313,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"backhand index pointing left: medium-dark skin tone\",\n        \"hexcode\": \"1F448-1F3FE\",\n        \"emoji\": \"👈🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 314,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"backhand index pointing left: dark skin tone\",\n        \"hexcode\": \"1F448-1F3FF\",\n        \"emoji\": \"👈🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 315,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"backhand index pointing right\",\n    \"hexcode\": \"1F449\",\n    \"tags\": [\n      \"backhand\",\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"point\",\n      \"pointing\",\n      \"right\"\n    ],\n    \"emoji\": \"👉️\",\n    \"text\": \"👉︎\",\n    \"type\": 1,\n    \"order\": 316,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"backhand index pointing right: light skin tone\",\n        \"hexcode\": \"1F449-1F3FB\",\n        \"emoji\": \"👉🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 317,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"backhand index pointing right: medium-light skin tone\",\n        \"hexcode\": \"1F449-1F3FC\",\n        \"emoji\": \"👉🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 318,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"backhand index pointing right: medium skin tone\",\n        \"hexcode\": \"1F449-1F3FD\",\n        \"emoji\": \"👉🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 319,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"backhand index pointing right: medium-dark skin tone\",\n        \"hexcode\": \"1F449-1F3FE\",\n        \"emoji\": \"👉🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 320,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"backhand index pointing right: dark skin tone\",\n        \"hexcode\": \"1F449-1F3FF\",\n        \"emoji\": \"👉🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 321,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"backhand index pointing up\",\n    \"hexcode\": \"1F446\",\n    \"tags\": [\n      \"backhand\",\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"point\",\n      \"pointing\",\n      \"up\"\n    ],\n    \"emoji\": \"👆️\",\n    \"text\": \"👆︎\",\n    \"type\": 1,\n    \"order\": 322,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"backhand index pointing up: light skin tone\",\n        \"hexcode\": \"1F446-1F3FB\",\n        \"emoji\": \"👆🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 323,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"backhand index pointing up: medium-light skin tone\",\n        \"hexcode\": \"1F446-1F3FC\",\n        \"emoji\": \"👆🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 324,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"backhand index pointing up: medium skin tone\",\n        \"hexcode\": \"1F446-1F3FD\",\n        \"emoji\": \"👆🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 325,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"backhand index pointing up: medium-dark skin tone\",\n        \"hexcode\": \"1F446-1F3FE\",\n        \"emoji\": \"👆🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 326,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"backhand index pointing up: dark skin tone\",\n        \"hexcode\": \"1F446-1F3FF\",\n        \"emoji\": \"👆🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 327,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"middle finger\",\n    \"hexcode\": \"1F595\",\n    \"tags\": [\n      \"finger\",\n      \"hand\",\n      \"middle\"\n    ],\n    \"emoji\": \"🖕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 328,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"middle finger: light skin tone\",\n        \"hexcode\": \"1F595-1F3FB\",\n        \"emoji\": \"🖕🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 329,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"middle finger: medium-light skin tone\",\n        \"hexcode\": \"1F595-1F3FC\",\n        \"emoji\": \"🖕🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 330,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"middle finger: medium skin tone\",\n        \"hexcode\": \"1F595-1F3FD\",\n        \"emoji\": \"🖕🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 331,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"middle finger: medium-dark skin tone\",\n        \"hexcode\": \"1F595-1F3FE\",\n        \"emoji\": \"🖕🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 332,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"middle finger: dark skin tone\",\n        \"hexcode\": \"1F595-1F3FF\",\n        \"emoji\": \"🖕🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 333,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"backhand index pointing down\",\n    \"hexcode\": \"1F447\",\n    \"tags\": [\n      \"backhand\",\n      \"down\",\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"point\",\n      \"pointing\"\n    ],\n    \"emoji\": \"👇️\",\n    \"text\": \"👇︎\",\n    \"type\": 1,\n    \"order\": 334,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"backhand index pointing down: light skin tone\",\n        \"hexcode\": \"1F447-1F3FB\",\n        \"emoji\": \"👇🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 335,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"backhand index pointing down: medium-light skin tone\",\n        \"hexcode\": \"1F447-1F3FC\",\n        \"emoji\": \"👇🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 336,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"backhand index pointing down: medium skin tone\",\n        \"hexcode\": \"1F447-1F3FD\",\n        \"emoji\": \"👇🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 337,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"backhand index pointing down: medium-dark skin tone\",\n        \"hexcode\": \"1F447-1F3FE\",\n        \"emoji\": \"👇🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 338,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"backhand index pointing down: dark skin tone\",\n        \"hexcode\": \"1F447-1F3FF\",\n        \"emoji\": \"👇🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 339,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"index pointing up\",\n    \"hexcode\": \"261D\",\n    \"tags\": [\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"point\",\n      \"pointing\",\n      \"this\",\n      \"up\"\n    ],\n    \"emoji\": \"☝️\",\n    \"text\": \"☝︎\",\n    \"type\": 0,\n    \"order\": 341,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"index pointing up: light skin tone\",\n        \"hexcode\": \"261D-1F3FB\",\n        \"emoji\": \"☝🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 342,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"index pointing up: medium-light skin tone\",\n        \"hexcode\": \"261D-1F3FC\",\n        \"emoji\": \"☝🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 343,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"index pointing up: medium skin tone\",\n        \"hexcode\": \"261D-1F3FD\",\n        \"emoji\": \"☝🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 344,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"index pointing up: medium-dark skin tone\",\n        \"hexcode\": \"261D-1F3FE\",\n        \"emoji\": \"☝🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 345,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"index pointing up: dark skin tone\",\n        \"hexcode\": \"261D-1F3FF\",\n        \"emoji\": \"☝🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 346,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"index pointing at the viewer\",\n    \"hexcode\": \"1FAF5\",\n    \"tags\": [\n      \"at\",\n      \"finger\",\n      \"hand\",\n      \"index\",\n      \"pointing\",\n      \"poke\",\n      \"viewer\",\n      \"you\"\n    ],\n    \"emoji\": \"🫵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 347,\n    \"group\": 1,\n    \"subgroup\": 18,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"index pointing at the viewer: light skin tone\",\n        \"hexcode\": \"1FAF5-1F3FB\",\n        \"emoji\": \"🫵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 348,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"index pointing at the viewer: medium-light skin tone\",\n        \"hexcode\": \"1FAF5-1F3FC\",\n        \"emoji\": \"🫵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 349,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"index pointing at the viewer: medium skin tone\",\n        \"hexcode\": \"1FAF5-1F3FD\",\n        \"emoji\": \"🫵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 350,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"index pointing at the viewer: medium-dark skin tone\",\n        \"hexcode\": \"1FAF5-1F3FE\",\n        \"emoji\": \"🫵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 351,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"index pointing at the viewer: dark skin tone\",\n        \"hexcode\": \"1FAF5-1F3FF\",\n        \"emoji\": \"🫵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 352,\n        \"group\": 1,\n        \"subgroup\": 18,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"thumbs up\",\n    \"hexcode\": \"1F44D\",\n    \"tags\": [\n      \"+1\",\n      \"good\",\n      \"hand\",\n      \"like\",\n      \"thumb\",\n      \"up\",\n      \"yes\"\n    ],\n    \"emoji\": \"👍️\",\n    \"text\": \"👍︎\",\n    \"type\": 1,\n    \"order\": 353,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"thumbs up: light skin tone\",\n        \"hexcode\": \"1F44D-1F3FB\",\n        \"emoji\": \"👍🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 354,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"thumbs up: medium-light skin tone\",\n        \"hexcode\": \"1F44D-1F3FC\",\n        \"emoji\": \"👍🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 355,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"thumbs up: medium skin tone\",\n        \"hexcode\": \"1F44D-1F3FD\",\n        \"emoji\": \"👍🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 356,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"thumbs up: medium-dark skin tone\",\n        \"hexcode\": \"1F44D-1F3FE\",\n        \"emoji\": \"👍🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 357,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"thumbs up: dark skin tone\",\n        \"hexcode\": \"1F44D-1F3FF\",\n        \"emoji\": \"👍🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 358,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"thumbs down\",\n    \"hexcode\": \"1F44E\",\n    \"tags\": [\n      \"-1\",\n      \"bad\",\n      \"dislike\",\n      \"down\",\n      \"good\",\n      \"hand\",\n      \"no\",\n      \"nope\",\n      \"thumb\",\n      \"thumbs\"\n    ],\n    \"emoji\": \"👎️\",\n    \"text\": \"👎︎\",\n    \"type\": 1,\n    \"order\": 359,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"thumbs down: light skin tone\",\n        \"hexcode\": \"1F44E-1F3FB\",\n        \"emoji\": \"👎🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 360,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"thumbs down: medium-light skin tone\",\n        \"hexcode\": \"1F44E-1F3FC\",\n        \"emoji\": \"👎🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 361,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"thumbs down: medium skin tone\",\n        \"hexcode\": \"1F44E-1F3FD\",\n        \"emoji\": \"👎🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 362,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"thumbs down: medium-dark skin tone\",\n        \"hexcode\": \"1F44E-1F3FE\",\n        \"emoji\": \"👎🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 363,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"thumbs down: dark skin tone\",\n        \"hexcode\": \"1F44E-1F3FF\",\n        \"emoji\": \"👎🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 364,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"raised fist\",\n    \"hexcode\": \"270A\",\n    \"tags\": [\n      \"clenched\",\n      \"fist\",\n      \"hand\",\n      \"punch\",\n      \"raised\",\n      \"solidarity\"\n    ],\n    \"emoji\": \"✊️\",\n    \"text\": \"✊︎\",\n    \"type\": 1,\n    \"order\": 365,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"raised fist: light skin tone\",\n        \"hexcode\": \"270A-1F3FB\",\n        \"emoji\": \"✊🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 366,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"raised fist: medium-light skin tone\",\n        \"hexcode\": \"270A-1F3FC\",\n        \"emoji\": \"✊🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 367,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"raised fist: medium skin tone\",\n        \"hexcode\": \"270A-1F3FD\",\n        \"emoji\": \"✊🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 368,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"raised fist: medium-dark skin tone\",\n        \"hexcode\": \"270A-1F3FE\",\n        \"emoji\": \"✊🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 369,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"raised fist: dark skin tone\",\n        \"hexcode\": \"270A-1F3FF\",\n        \"emoji\": \"✊🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 370,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"oncoming fist\",\n    \"hexcode\": \"1F44A\",\n    \"tags\": [\n      \"absolutely\",\n      \"agree\",\n      \"boom\",\n      \"bro\",\n      \"bruh\",\n      \"bump\",\n      \"clenched\",\n      \"correct\",\n      \"fist\",\n      \"hand\",\n      \"knuckle\",\n      \"oncoming\",\n      \"pound\",\n      \"punch\",\n      \"rock\",\n      \"ttyl\"\n    ],\n    \"emoji\": \"👊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 371,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"oncoming fist: light skin tone\",\n        \"hexcode\": \"1F44A-1F3FB\",\n        \"emoji\": \"👊🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 372,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"oncoming fist: medium-light skin tone\",\n        \"hexcode\": \"1F44A-1F3FC\",\n        \"emoji\": \"👊🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 373,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"oncoming fist: medium skin tone\",\n        \"hexcode\": \"1F44A-1F3FD\",\n        \"emoji\": \"👊🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 374,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"oncoming fist: medium-dark skin tone\",\n        \"hexcode\": \"1F44A-1F3FE\",\n        \"emoji\": \"👊🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 375,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"oncoming fist: dark skin tone\",\n        \"hexcode\": \"1F44A-1F3FF\",\n        \"emoji\": \"👊🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 376,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"left-facing fist\",\n    \"hexcode\": \"1F91B\",\n    \"tags\": [\n      \"fist\",\n      \"left-facing\",\n      \"leftwards\"\n    ],\n    \"emoji\": \"🤛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 377,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"left-facing fist: light skin tone\",\n        \"hexcode\": \"1F91B-1F3FB\",\n        \"emoji\": \"🤛🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 378,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"left-facing fist: medium-light skin tone\",\n        \"hexcode\": \"1F91B-1F3FC\",\n        \"emoji\": \"🤛🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 379,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"left-facing fist: medium skin tone\",\n        \"hexcode\": \"1F91B-1F3FD\",\n        \"emoji\": \"🤛🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 380,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"left-facing fist: medium-dark skin tone\",\n        \"hexcode\": \"1F91B-1F3FE\",\n        \"emoji\": \"🤛🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 381,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"left-facing fist: dark skin tone\",\n        \"hexcode\": \"1F91B-1F3FF\",\n        \"emoji\": \"🤛🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 382,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"right-facing fist\",\n    \"hexcode\": \"1F91C\",\n    \"tags\": [\n      \"fist\",\n      \"right-facing\",\n      \"rightwards\"\n    ],\n    \"emoji\": \"🤜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 383,\n    \"group\": 1,\n    \"subgroup\": 19,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"right-facing fist: light skin tone\",\n        \"hexcode\": \"1F91C-1F3FB\",\n        \"emoji\": \"🤜🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 384,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"right-facing fist: medium-light skin tone\",\n        \"hexcode\": \"1F91C-1F3FC\",\n        \"emoji\": \"🤜🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 385,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"right-facing fist: medium skin tone\",\n        \"hexcode\": \"1F91C-1F3FD\",\n        \"emoji\": \"🤜🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 386,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"right-facing fist: medium-dark skin tone\",\n        \"hexcode\": \"1F91C-1F3FE\",\n        \"emoji\": \"🤜🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 387,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"right-facing fist: dark skin tone\",\n        \"hexcode\": \"1F91C-1F3FF\",\n        \"emoji\": \"🤜🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 388,\n        \"group\": 1,\n        \"subgroup\": 19,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"clapping hands\",\n    \"hexcode\": \"1F44F\",\n    \"tags\": [\n      \"applause\",\n      \"approval\",\n      \"awesome\",\n      \"clap\",\n      \"congrats\",\n      \"congratulations\",\n      \"excited\",\n      \"good\",\n      \"great\",\n      \"hand\",\n      \"homie\",\n      \"job\",\n      \"nice\",\n      \"prayed\",\n      \"well\",\n      \"yay\"\n    ],\n    \"emoji\": \"👏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 389,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"clapping hands: light skin tone\",\n        \"hexcode\": \"1F44F-1F3FB\",\n        \"emoji\": \"👏🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 390,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"clapping hands: medium-light skin tone\",\n        \"hexcode\": \"1F44F-1F3FC\",\n        \"emoji\": \"👏🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 391,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"clapping hands: medium skin tone\",\n        \"hexcode\": \"1F44F-1F3FD\",\n        \"emoji\": \"👏🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 392,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"clapping hands: medium-dark skin tone\",\n        \"hexcode\": \"1F44F-1F3FE\",\n        \"emoji\": \"👏🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 393,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"clapping hands: dark skin tone\",\n        \"hexcode\": \"1F44F-1F3FF\",\n        \"emoji\": \"👏🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 394,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"raising hands\",\n    \"hexcode\": \"1F64C\",\n    \"tags\": [\n      \"celebration\",\n      \"gesture\",\n      \"hand\",\n      \"hands\",\n      \"hooray\",\n      \"praise\",\n      \"raised\",\n      \"raising\"\n    ],\n    \"emoji\": \"🙌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 395,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"raising hands: light skin tone\",\n        \"hexcode\": \"1F64C-1F3FB\",\n        \"emoji\": \"🙌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 396,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"raising hands: medium-light skin tone\",\n        \"hexcode\": \"1F64C-1F3FC\",\n        \"emoji\": \"🙌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 397,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"raising hands: medium skin tone\",\n        \"hexcode\": \"1F64C-1F3FD\",\n        \"emoji\": \"🙌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 398,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"raising hands: medium-dark skin tone\",\n        \"hexcode\": \"1F64C-1F3FE\",\n        \"emoji\": \"🙌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 399,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"raising hands: dark skin tone\",\n        \"hexcode\": \"1F64C-1F3FF\",\n        \"emoji\": \"🙌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 400,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"heart hands\",\n    \"hexcode\": \"1FAF6\",\n    \"tags\": [\n      \"<3\",\n      \"hands\",\n      \"heart\",\n      \"love\",\n      \"you\"\n    ],\n    \"emoji\": \"🫶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 401,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"heart hands: light skin tone\",\n        \"hexcode\": \"1FAF6-1F3FB\",\n        \"emoji\": \"🫶🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 402,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"heart hands: medium-light skin tone\",\n        \"hexcode\": \"1FAF6-1F3FC\",\n        \"emoji\": \"🫶🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 403,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"heart hands: medium skin tone\",\n        \"hexcode\": \"1FAF6-1F3FD\",\n        \"emoji\": \"🫶🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 404,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"heart hands: medium-dark skin tone\",\n        \"hexcode\": \"1FAF6-1F3FE\",\n        \"emoji\": \"🫶🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 405,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"heart hands: dark skin tone\",\n        \"hexcode\": \"1FAF6-1F3FF\",\n        \"emoji\": \"🫶🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 406,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"open hands\",\n    \"hexcode\": \"1F450\",\n    \"tags\": [\n      \"hand\",\n      \"hands\",\n      \"hug\",\n      \"jazz\",\n      \"open\",\n      \"swerve\"\n    ],\n    \"emoji\": \"👐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 407,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"open hands: light skin tone\",\n        \"hexcode\": \"1F450-1F3FB\",\n        \"emoji\": \"👐🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 408,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"open hands: medium-light skin tone\",\n        \"hexcode\": \"1F450-1F3FC\",\n        \"emoji\": \"👐🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 409,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"open hands: medium skin tone\",\n        \"hexcode\": \"1F450-1F3FD\",\n        \"emoji\": \"👐🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 410,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"open hands: medium-dark skin tone\",\n        \"hexcode\": \"1F450-1F3FE\",\n        \"emoji\": \"👐🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 411,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"open hands: dark skin tone\",\n        \"hexcode\": \"1F450-1F3FF\",\n        \"emoji\": \"👐🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 412,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"palms up together\",\n    \"hexcode\": \"1F932\",\n    \"tags\": [\n      \"cupped\",\n      \"dua\",\n      \"hands\",\n      \"palms\",\n      \"pray\",\n      \"prayer\",\n      \"together\",\n      \"up\",\n      \"wish\"\n    ],\n    \"emoji\": \"🤲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 413,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"palms up together: light skin tone\",\n        \"hexcode\": \"1F932-1F3FB\",\n        \"emoji\": \"🤲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 414,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"palms up together: medium-light skin tone\",\n        \"hexcode\": \"1F932-1F3FC\",\n        \"emoji\": \"🤲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 415,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"palms up together: medium skin tone\",\n        \"hexcode\": \"1F932-1F3FD\",\n        \"emoji\": \"🤲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 416,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"palms up together: medium-dark skin tone\",\n        \"hexcode\": \"1F932-1F3FE\",\n        \"emoji\": \"🤲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 417,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"palms up together: dark skin tone\",\n        \"hexcode\": \"1F932-1F3FF\",\n        \"emoji\": \"🤲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 418,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"handshake\",\n    \"hexcode\": \"1F91D\",\n    \"tags\": [\n      \"agreement\",\n      \"deal\",\n      \"hand\",\n      \"meeting\",\n      \"shake\"\n    ],\n    \"emoji\": \"🤝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 419,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"handshake: light skin tone\",\n        \"hexcode\": \"1F91D-1F3FB\",\n        \"emoji\": \"🤝🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 420,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"handshake: medium-light skin tone\",\n        \"hexcode\": \"1F91D-1F3FC\",\n        \"emoji\": \"🤝🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 421,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"handshake: medium skin tone\",\n        \"hexcode\": \"1F91D-1F3FD\",\n        \"emoji\": \"🤝🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 422,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"handshake: medium-dark skin tone\",\n        \"hexcode\": \"1F91D-1F3FE\",\n        \"emoji\": \"🤝🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 423,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"handshake: dark skin tone\",\n        \"hexcode\": \"1F91D-1F3FF\",\n        \"emoji\": \"🤝🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 424,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"handshake: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FB-200D-1FAF2-1F3FC\",\n        \"emoji\": \"🫱🏻‍🫲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 425,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"handshake: light skin tone, medium skin tone\",\n        \"hexcode\": \"1FAF1-1F3FB-200D-1FAF2-1F3FD\",\n        \"emoji\": \"🫱🏻‍🫲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 426,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"handshake: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FB-200D-1FAF2-1F3FE\",\n        \"emoji\": \"🫱🏻‍🫲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 427,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"handshake: light skin tone, dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FB-200D-1FAF2-1F3FF\",\n        \"emoji\": \"🫱🏻‍🫲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 428,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FC-200D-1FAF2-1F3FB\",\n        \"emoji\": \"🫱🏼‍🫲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 429,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1FAF1-1F3FC-200D-1FAF2-1F3FD\",\n        \"emoji\": \"🫱🏼‍🫲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 430,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FC-200D-1FAF2-1F3FE\",\n        \"emoji\": \"🫱🏼‍🫲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 431,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FC-200D-1FAF2-1F3FF\",\n        \"emoji\": \"🫱🏼‍🫲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 432,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"handshake: medium skin tone, light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FD-200D-1FAF2-1F3FB\",\n        \"emoji\": \"🫱🏽‍🫲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 433,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"handshake: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FD-200D-1FAF2-1F3FC\",\n        \"emoji\": \"🫱🏽‍🫲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 434,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"handshake: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FD-200D-1FAF2-1F3FE\",\n        \"emoji\": \"🫱🏽‍🫲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 435,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"handshake: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FD-200D-1FAF2-1F3FF\",\n        \"emoji\": \"🫱🏽‍🫲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 436,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FE-200D-1FAF2-1F3FB\",\n        \"emoji\": \"🫱🏾‍🫲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 437,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FE-200D-1FAF2-1F3FC\",\n        \"emoji\": \"🫱🏾‍🫲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 438,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1FAF1-1F3FE-200D-1FAF2-1F3FD\",\n        \"emoji\": \"🫱🏾‍🫲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 439,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"handshake: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FE-200D-1FAF2-1F3FF\",\n        \"emoji\": \"🫱🏾‍🫲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 440,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"handshake: dark skin tone, light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FF-200D-1FAF2-1F3FB\",\n        \"emoji\": \"🫱🏿‍🫲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 441,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"handshake: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1FAF1-1F3FF-200D-1FAF2-1F3FC\",\n        \"emoji\": \"🫱🏿‍🫲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 442,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"handshake: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1FAF1-1F3FF-200D-1FAF2-1F3FD\",\n        \"emoji\": \"🫱🏿‍🫲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 443,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"handshake: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1FAF1-1F3FF-200D-1FAF2-1F3FE\",\n        \"emoji\": \"🫱🏿‍🫲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 444,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 14,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"folded hands\",\n    \"hexcode\": \"1F64F\",\n    \"tags\": [\n      \"appreciate\",\n      \"ask\",\n      \"beg\",\n      \"blessed\",\n      \"bow\",\n      \"cmon\",\n      \"five\",\n      \"folded\",\n      \"gesture\",\n      \"hand\",\n      \"high\",\n      \"please\",\n      \"pray\",\n      \"thanks\",\n      \"thx\"\n    ],\n    \"emoji\": \"🙏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 445,\n    \"group\": 1,\n    \"subgroup\": 20,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"folded hands: light skin tone\",\n        \"hexcode\": \"1F64F-1F3FB\",\n        \"emoji\": \"🙏🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 446,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"folded hands: medium-light skin tone\",\n        \"hexcode\": \"1F64F-1F3FC\",\n        \"emoji\": \"🙏🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 447,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"folded hands: medium skin tone\",\n        \"hexcode\": \"1F64F-1F3FD\",\n        \"emoji\": \"🙏🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 448,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"folded hands: medium-dark skin tone\",\n        \"hexcode\": \"1F64F-1F3FE\",\n        \"emoji\": \"🙏🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 449,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"folded hands: dark skin tone\",\n        \"hexcode\": \"1F64F-1F3FF\",\n        \"emoji\": \"🙏🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 450,\n        \"group\": 1,\n        \"subgroup\": 20,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"writing hand\",\n    \"hexcode\": \"270D\",\n    \"tags\": [\n      \"hand\",\n      \"write\",\n      \"writing\"\n    ],\n    \"emoji\": \"✍️\",\n    \"text\": \"✍︎\",\n    \"type\": 0,\n    \"order\": 452,\n    \"group\": 1,\n    \"subgroup\": 21,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"writing hand: light skin tone\",\n        \"hexcode\": \"270D-1F3FB\",\n        \"emoji\": \"✍🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 453,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"writing hand: medium-light skin tone\",\n        \"hexcode\": \"270D-1F3FC\",\n        \"emoji\": \"✍🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 454,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"writing hand: medium skin tone\",\n        \"hexcode\": \"270D-1F3FD\",\n        \"emoji\": \"✍🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 455,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"writing hand: medium-dark skin tone\",\n        \"hexcode\": \"270D-1F3FE\",\n        \"emoji\": \"✍🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 456,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"writing hand: dark skin tone\",\n        \"hexcode\": \"270D-1F3FF\",\n        \"emoji\": \"✍🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 457,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"nail polish\",\n    \"hexcode\": \"1F485\",\n    \"tags\": [\n      \"bored\",\n      \"care\",\n      \"cosmetics\",\n      \"done\",\n      \"makeup\",\n      \"manicure\",\n      \"nail\",\n      \"polish\",\n      \"whatever\"\n    ],\n    \"emoji\": \"💅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 458,\n    \"group\": 1,\n    \"subgroup\": 21,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"nail polish: light skin tone\",\n        \"hexcode\": \"1F485-1F3FB\",\n        \"emoji\": \"💅🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 459,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"nail polish: medium-light skin tone\",\n        \"hexcode\": \"1F485-1F3FC\",\n        \"emoji\": \"💅🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 460,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"nail polish: medium skin tone\",\n        \"hexcode\": \"1F485-1F3FD\",\n        \"emoji\": \"💅🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 461,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"nail polish: medium-dark skin tone\",\n        \"hexcode\": \"1F485-1F3FE\",\n        \"emoji\": \"💅🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 462,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"nail polish: dark skin tone\",\n        \"hexcode\": \"1F485-1F3FF\",\n        \"emoji\": \"💅🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 463,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"selfie\",\n    \"hexcode\": \"1F933\",\n    \"tags\": [\n      \"camera\",\n      \"phone\"\n    ],\n    \"emoji\": \"🤳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 464,\n    \"group\": 1,\n    \"subgroup\": 21,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"selfie: light skin tone\",\n        \"hexcode\": \"1F933-1F3FB\",\n        \"emoji\": \"🤳🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 465,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"selfie: medium-light skin tone\",\n        \"hexcode\": \"1F933-1F3FC\",\n        \"emoji\": \"🤳🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 466,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"selfie: medium skin tone\",\n        \"hexcode\": \"1F933-1F3FD\",\n        \"emoji\": \"🤳🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 467,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"selfie: medium-dark skin tone\",\n        \"hexcode\": \"1F933-1F3FE\",\n        \"emoji\": \"🤳🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 468,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"selfie: dark skin tone\",\n        \"hexcode\": \"1F933-1F3FF\",\n        \"emoji\": \"🤳🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 469,\n        \"group\": 1,\n        \"subgroup\": 21,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"flexed biceps\",\n    \"hexcode\": \"1F4AA\",\n    \"tags\": [\n      \"arm\",\n      \"beast\",\n      \"bench\",\n      \"biceps\",\n      \"bodybuilder\",\n      \"bro\",\n      \"curls\",\n      \"flex\",\n      \"gains\",\n      \"gym\",\n      \"jacked\",\n      \"muscle\",\n      \"press\",\n      \"ripped\",\n      \"strong\",\n      \"weightlift\"\n    ],\n    \"emoji\": \"💪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 470,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"flexed biceps: light skin tone\",\n        \"hexcode\": \"1F4AA-1F3FB\",\n        \"emoji\": \"💪🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 471,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"flexed biceps: medium-light skin tone\",\n        \"hexcode\": \"1F4AA-1F3FC\",\n        \"emoji\": \"💪🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 472,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"flexed biceps: medium skin tone\",\n        \"hexcode\": \"1F4AA-1F3FD\",\n        \"emoji\": \"💪🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 473,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"flexed biceps: medium-dark skin tone\",\n        \"hexcode\": \"1F4AA-1F3FE\",\n        \"emoji\": \"💪🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 474,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"flexed biceps: dark skin tone\",\n        \"hexcode\": \"1F4AA-1F3FF\",\n        \"emoji\": \"💪🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 475,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"mechanical arm\",\n    \"hexcode\": \"1F9BE\",\n    \"tags\": [\n      \"accessibility\",\n      \"arm\",\n      \"mechanical\",\n      \"prosthetic\"\n    ],\n    \"emoji\": \"🦾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 476,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 12\n  },\n  {\n    \"label\": \"mechanical leg\",\n    \"hexcode\": \"1F9BF\",\n    \"tags\": [\n      \"accessibility\",\n      \"leg\",\n      \"mechanical\",\n      \"prosthetic\"\n    ],\n    \"emoji\": \"🦿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 477,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 12\n  },\n  {\n    \"label\": \"leg\",\n    \"hexcode\": \"1F9B5\",\n    \"tags\": [\n      \"bent\",\n      \"foot\",\n      \"kick\",\n      \"knee\",\n      \"limb\"\n    ],\n    \"emoji\": \"🦵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 478,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"leg: light skin tone\",\n        \"hexcode\": \"1F9B5-1F3FB\",\n        \"emoji\": \"🦵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 479,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"leg: medium-light skin tone\",\n        \"hexcode\": \"1F9B5-1F3FC\",\n        \"emoji\": \"🦵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 480,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"leg: medium skin tone\",\n        \"hexcode\": \"1F9B5-1F3FD\",\n        \"emoji\": \"🦵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 481,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"leg: medium-dark skin tone\",\n        \"hexcode\": \"1F9B5-1F3FE\",\n        \"emoji\": \"🦵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 482,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"leg: dark skin tone\",\n        \"hexcode\": \"1F9B5-1F3FF\",\n        \"emoji\": \"🦵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 483,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"foot\",\n    \"hexcode\": \"1F9B6\",\n    \"tags\": [\n      \"ankle\",\n      \"feet\",\n      \"kick\",\n      \"stomp\"\n    ],\n    \"emoji\": \"🦶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 484,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"foot: light skin tone\",\n        \"hexcode\": \"1F9B6-1F3FB\",\n        \"emoji\": \"🦶🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 485,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"foot: medium-light skin tone\",\n        \"hexcode\": \"1F9B6-1F3FC\",\n        \"emoji\": \"🦶🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 486,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"foot: medium skin tone\",\n        \"hexcode\": \"1F9B6-1F3FD\",\n        \"emoji\": \"🦶🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 487,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"foot: medium-dark skin tone\",\n        \"hexcode\": \"1F9B6-1F3FE\",\n        \"emoji\": \"🦶🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 488,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"foot: dark skin tone\",\n        \"hexcode\": \"1F9B6-1F3FF\",\n        \"emoji\": \"🦶🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 489,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"ear\",\n    \"hexcode\": \"1F442\",\n    \"tags\": [\n      \"body\",\n      \"ears\",\n      \"hear\",\n      \"hearing\",\n      \"listen\",\n      \"listening\",\n      \"sound\"\n    ],\n    \"emoji\": \"👂️\",\n    \"text\": \"👂︎\",\n    \"type\": 1,\n    \"order\": 490,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"ear: light skin tone\",\n        \"hexcode\": \"1F442-1F3FB\",\n        \"emoji\": \"👂🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 491,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"ear: medium-light skin tone\",\n        \"hexcode\": \"1F442-1F3FC\",\n        \"emoji\": \"👂🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 492,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"ear: medium skin tone\",\n        \"hexcode\": \"1F442-1F3FD\",\n        \"emoji\": \"👂🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 493,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"ear: medium-dark skin tone\",\n        \"hexcode\": \"1F442-1F3FE\",\n        \"emoji\": \"👂🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 494,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"ear: dark skin tone\",\n        \"hexcode\": \"1F442-1F3FF\",\n        \"emoji\": \"👂🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 495,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"ear with hearing aid\",\n    \"hexcode\": \"1F9BB\",\n    \"tags\": [\n      \"accessibility\",\n      \"aid\",\n      \"ear\",\n      \"hard\",\n      \"hearing\"\n    ],\n    \"emoji\": \"🦻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 496,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"ear with hearing aid: light skin tone\",\n        \"hexcode\": \"1F9BB-1F3FB\",\n        \"emoji\": \"🦻🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 497,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"ear with hearing aid: medium-light skin tone\",\n        \"hexcode\": \"1F9BB-1F3FC\",\n        \"emoji\": \"🦻🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 498,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"ear with hearing aid: medium skin tone\",\n        \"hexcode\": \"1F9BB-1F3FD\",\n        \"emoji\": \"🦻🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 499,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"ear with hearing aid: medium-dark skin tone\",\n        \"hexcode\": \"1F9BB-1F3FE\",\n        \"emoji\": \"🦻🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 500,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"ear with hearing aid: dark skin tone\",\n        \"hexcode\": \"1F9BB-1F3FF\",\n        \"emoji\": \"🦻🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 501,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"nose\",\n    \"hexcode\": \"1F443\",\n    \"tags\": [\n      \"body\",\n      \"noses\",\n      \"nosey\",\n      \"odor\",\n      \"smell\",\n      \"smells\"\n    ],\n    \"emoji\": \"👃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 502,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"nose: light skin tone\",\n        \"hexcode\": \"1F443-1F3FB\",\n        \"emoji\": \"👃🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 503,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"nose: medium-light skin tone\",\n        \"hexcode\": \"1F443-1F3FC\",\n        \"emoji\": \"👃🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 504,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"nose: medium skin tone\",\n        \"hexcode\": \"1F443-1F3FD\",\n        \"emoji\": \"👃🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 505,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"nose: medium-dark skin tone\",\n        \"hexcode\": \"1F443-1F3FE\",\n        \"emoji\": \"👃🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 506,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"nose: dark skin tone\",\n        \"hexcode\": \"1F443-1F3FF\",\n        \"emoji\": \"👃🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 507,\n        \"group\": 1,\n        \"subgroup\": 22,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"brain\",\n    \"hexcode\": \"1F9E0\",\n    \"tags\": [\n      \"intelligent\",\n      \"smart\"\n    ],\n    \"emoji\": \"🧠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 508,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 5\n  },\n  {\n    \"label\": \"anatomical heart\",\n    \"hexcode\": \"1FAC0\",\n    \"tags\": [\n      \"anatomical\",\n      \"beat\",\n      \"cardiology\",\n      \"heart\",\n      \"heartbeat\",\n      \"organ\",\n      \"pulse\",\n      \"real\",\n      \"red\"\n    ],\n    \"emoji\": \"🫀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 509,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 13\n  },\n  {\n    \"label\": \"lungs\",\n    \"hexcode\": \"1FAC1\",\n    \"tags\": [\n      \"breath\",\n      \"breathe\",\n      \"exhalation\",\n      \"inhalation\",\n      \"lung\",\n      \"organ\",\n      \"respiration\"\n    ],\n    \"emoji\": \"🫁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 510,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 13\n  },\n  {\n    \"label\": \"tooth\",\n    \"hexcode\": \"1F9B7\",\n    \"tags\": [\n      \"dentist\",\n      \"pearly\",\n      \"teeth\",\n      \"white\"\n    ],\n    \"emoji\": \"🦷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 511,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bone\",\n    \"hexcode\": \"1F9B4\",\n    \"tags\": [\n      \"bones\",\n      \"dog\",\n      \"skeleton\",\n      \"wishbone\"\n    ],\n    \"emoji\": \"🦴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 512,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 11\n  },\n  {\n    \"label\": \"eyes\",\n    \"hexcode\": \"1F440\",\n    \"tags\": [\n      \"body\",\n      \"eye\",\n      \"face\",\n      \"googly\",\n      \"look\",\n      \"looking\",\n      \"omg\",\n      \"peep\",\n      \"see\",\n      \"seeing\"\n    ],\n    \"emoji\": \"👀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 513,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eye\",\n    \"hexcode\": \"1F441\",\n    \"tags\": [\n      \"1\",\n      \"body\",\n      \"one\"\n    ],\n    \"emoji\": \"👁️\",\n    \"text\": \"👁︎\",\n    \"type\": 0,\n    \"order\": 515,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"tongue\",\n    \"hexcode\": \"1F445\",\n    \"tags\": [\n      \"body\",\n      \"lick\",\n      \"slurp\"\n    ],\n    \"emoji\": \"👅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 516,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mouth\",\n    \"hexcode\": \"1F444\",\n    \"tags\": [\n      \"beauty\",\n      \"body\",\n      \"kiss\",\n      \"kissing\",\n      \"lips\",\n      \"lipstick\"\n    ],\n    \"emoji\": \"👄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 517,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"biting lip\",\n    \"hexcode\": \"1FAE6\",\n    \"tags\": [\n      \"anxious\",\n      \"bite\",\n      \"biting\",\n      \"fear\",\n      \"flirt\",\n      \"flirting\",\n      \"kiss\",\n      \"lip\",\n      \"lipstick\",\n      \"nervous\",\n      \"sexy\",\n      \"uncomfortable\",\n      \"worried\",\n      \"worry\"\n    ],\n    \"emoji\": \"🫦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 518,\n    \"group\": 1,\n    \"subgroup\": 22,\n    \"version\": 14\n  },\n  {\n    \"label\": \"baby\",\n    \"hexcode\": \"1F476\",\n    \"tags\": [\n      \"babies\",\n      \"children\",\n      \"goo\",\n      \"infant\",\n      \"newborn\",\n      \"pregnant\",\n      \"young\"\n    ],\n    \"emoji\": \"👶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 519,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"baby: light skin tone\",\n        \"hexcode\": \"1F476-1F3FB\",\n        \"emoji\": \"👶🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 520,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"baby: medium-light skin tone\",\n        \"hexcode\": \"1F476-1F3FC\",\n        \"emoji\": \"👶🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 521,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"baby: medium skin tone\",\n        \"hexcode\": \"1F476-1F3FD\",\n        \"emoji\": \"👶🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 522,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"baby: medium-dark skin tone\",\n        \"hexcode\": \"1F476-1F3FE\",\n        \"emoji\": \"👶🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 523,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"baby: dark skin tone\",\n        \"hexcode\": \"1F476-1F3FF\",\n        \"emoji\": \"👶🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 524,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"child\",\n    \"hexcode\": \"1F9D2\",\n    \"tags\": [\n      \"bright-eyed\",\n      \"grandchild\",\n      \"kid\",\n      \"young\",\n      \"younger\"\n    ],\n    \"emoji\": \"🧒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 525,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"child: light skin tone\",\n        \"hexcode\": \"1F9D2-1F3FB\",\n        \"emoji\": \"🧒🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 526,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"child: medium-light skin tone\",\n        \"hexcode\": \"1F9D2-1F3FC\",\n        \"emoji\": \"🧒🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 527,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"child: medium skin tone\",\n        \"hexcode\": \"1F9D2-1F3FD\",\n        \"emoji\": \"🧒🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 528,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"child: medium-dark skin tone\",\n        \"hexcode\": \"1F9D2-1F3FE\",\n        \"emoji\": \"🧒🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 529,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"child: dark skin tone\",\n        \"hexcode\": \"1F9D2-1F3FF\",\n        \"emoji\": \"🧒🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 530,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"boy\",\n    \"hexcode\": \"1F466\",\n    \"tags\": [\n      \"bright-eyed\",\n      \"child\",\n      \"grandson\",\n      \"kid\",\n      \"son\",\n      \"young\",\n      \"younger\"\n    ],\n    \"emoji\": \"👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 531,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"boy: light skin tone\",\n        \"hexcode\": \"1F466-1F3FB\",\n        \"emoji\": \"👦🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 532,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"boy: medium-light skin tone\",\n        \"hexcode\": \"1F466-1F3FC\",\n        \"emoji\": \"👦🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 533,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"boy: medium skin tone\",\n        \"hexcode\": \"1F466-1F3FD\",\n        \"emoji\": \"👦🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 534,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"boy: medium-dark skin tone\",\n        \"hexcode\": \"1F466-1F3FE\",\n        \"emoji\": \"👦🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 535,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"boy: dark skin tone\",\n        \"hexcode\": \"1F466-1F3FF\",\n        \"emoji\": \"👦🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 536,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"girl\",\n    \"hexcode\": \"1F467\",\n    \"tags\": [\n      \"bright-eyed\",\n      \"child\",\n      \"daughter\",\n      \"granddaughter\",\n      \"kid\",\n      \"virgo\",\n      \"young\",\n      \"younger\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 537,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"girl: light skin tone\",\n        \"hexcode\": \"1F467-1F3FB\",\n        \"emoji\": \"👧🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 538,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"girl: medium-light skin tone\",\n        \"hexcode\": \"1F467-1F3FC\",\n        \"emoji\": \"👧🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 539,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"girl: medium skin tone\",\n        \"hexcode\": \"1F467-1F3FD\",\n        \"emoji\": \"👧🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 540,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"girl: medium-dark skin tone\",\n        \"hexcode\": \"1F467-1F3FE\",\n        \"emoji\": \"👧🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 541,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"girl: dark skin tone\",\n        \"hexcode\": \"1F467-1F3FF\",\n        \"emoji\": \"👧🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 542,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person\",\n    \"hexcode\": \"1F9D1\",\n    \"tags\": [\n      \"adult\"\n    ],\n    \"emoji\": \"🧑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 543,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 544,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 545,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 546,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 547,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 548,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: blond hair\",\n    \"hexcode\": \"1F471\",\n    \"tags\": [\n      \"blond\",\n      \"blond-haired\",\n      \"human\",\n      \"person\"\n    ],\n    \"emoji\": \"👱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 549,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FB\",\n        \"emoji\": \"👱🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 550,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FC\",\n        \"emoji\": \"👱🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 551,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FD\",\n        \"emoji\": \"👱🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 552,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FE\",\n        \"emoji\": \"👱🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 553,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FF\",\n        \"emoji\": \"👱🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 554,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man\",\n    \"hexcode\": \"1F468\",\n    \"tags\": [\n      \"adult\",\n      \"bro\"\n    ],\n    \"emoji\": \"👨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 555,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB\",\n        \"emoji\": \"👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 556,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC\",\n        \"emoji\": \"👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 557,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD\",\n        \"emoji\": \"👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 558,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE\",\n        \"emoji\": \"👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 559,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF\",\n        \"emoji\": \"👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 560,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: beard\",\n    \"hexcode\": \"1F9D4\",\n    \"tags\": [\n      \"beard\",\n      \"bearded\",\n      \"person\",\n      \"whiskers\"\n    ],\n    \"emoji\": \"🧔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 561,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FB\",\n        \"emoji\": \"🧔🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 562,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FC\",\n        \"emoji\": \"🧔🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 563,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FD\",\n        \"emoji\": \"🧔🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 564,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FE\",\n        \"emoji\": \"🧔🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 565,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FF\",\n        \"emoji\": \"🧔🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 566,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: beard\",\n    \"hexcode\": \"1F9D4-200D-2642-FE0F\",\n    \"tags\": [\n      \"beard\",\n      \"bearded\",\n      \"man\",\n      \"whiskers\"\n    ],\n    \"emoji\": \"🧔‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 567,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 13.1,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧔🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 569,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧔🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 571,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧔🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 573,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧔🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 575,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧔🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 577,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: beard\",\n    \"hexcode\": \"1F9D4-200D-2640-FE0F\",\n    \"tags\": [\n      \"beard\",\n      \"bearded\",\n      \"whiskers\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧔‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 579,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 13.1,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧔🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 581,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧔🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 583,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧔🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 585,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧔🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 587,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, beard\",\n        \"hexcode\": \"1F9D4-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧔🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 589,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 13.1,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: red hair\",\n    \"hexcode\": \"1F468-200D-1F9B0\",\n    \"tags\": [\n      \"adult\",\n      \"bro\",\n      \"man\",\n      \"red hair\"\n    ],\n    \"emoji\": \"👨‍🦰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 591,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, red hair\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9B0\",\n        \"emoji\": \"👨🏻‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 592,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, red hair\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9B0\",\n        \"emoji\": \"👨🏼‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 593,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, red hair\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9B0\",\n        \"emoji\": \"👨🏽‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 594,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, red hair\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9B0\",\n        \"emoji\": \"👨🏾‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 595,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, red hair\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9B0\",\n        \"emoji\": \"👨🏿‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 596,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: curly hair\",\n    \"hexcode\": \"1F468-200D-1F9B1\",\n    \"tags\": [\n      \"adult\",\n      \"bro\",\n      \"curly hair\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍🦱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 597,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, curly hair\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9B1\",\n        \"emoji\": \"👨🏻‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 598,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, curly hair\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9B1\",\n        \"emoji\": \"👨🏼‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 599,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, curly hair\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9B1\",\n        \"emoji\": \"👨🏽‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 600,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, curly hair\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9B1\",\n        \"emoji\": \"👨🏾‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 601,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, curly hair\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9B1\",\n        \"emoji\": \"👨🏿‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 602,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: white hair\",\n    \"hexcode\": \"1F468-200D-1F9B3\",\n    \"tags\": [\n      \"adult\",\n      \"bro\",\n      \"man\",\n      \"white hair\"\n    ],\n    \"emoji\": \"👨‍🦳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 603,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, white hair\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9B3\",\n        \"emoji\": \"👨🏻‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 604,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, white hair\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9B3\",\n        \"emoji\": \"👨🏼‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 605,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, white hair\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9B3\",\n        \"emoji\": \"👨🏽‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 606,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, white hair\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9B3\",\n        \"emoji\": \"👨🏾‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 607,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, white hair\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9B3\",\n        \"emoji\": \"👨🏿‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 608,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: bald\",\n    \"hexcode\": \"1F468-200D-1F9B2\",\n    \"tags\": [\n      \"adult\",\n      \"bald\",\n      \"bro\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍🦲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 609,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, bald\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9B2\",\n        \"emoji\": \"👨🏻‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 610,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, bald\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9B2\",\n        \"emoji\": \"👨🏼‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 611,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, bald\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9B2\",\n        \"emoji\": \"👨🏽‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 612,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, bald\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9B2\",\n        \"emoji\": \"👨🏾‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 613,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, bald\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9B2\",\n        \"emoji\": \"👨🏿‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 614,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman\",\n    \"hexcode\": \"1F469\",\n    \"tags\": [\n      \"adult\",\n      \"lady\"\n    ],\n    \"emoji\": \"👩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 615,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB\",\n        \"emoji\": \"👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 616,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC\",\n        \"emoji\": \"👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 617,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD\",\n        \"emoji\": \"👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 618,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE\",\n        \"emoji\": \"👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 619,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF\",\n        \"emoji\": \"👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 620,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: red hair\",\n    \"hexcode\": \"1F469-200D-1F9B0\",\n    \"tags\": [\n      \"adult\",\n      \"lady\",\n      \"red hair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 621,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, red hair\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9B0\",\n        \"emoji\": \"👩🏻‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 622,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, red hair\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9B0\",\n        \"emoji\": \"👩🏼‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 623,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, red hair\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9B0\",\n        \"emoji\": \"👩🏽‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 624,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, red hair\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9B0\",\n        \"emoji\": \"👩🏾‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 625,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, red hair\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9B0\",\n        \"emoji\": \"👩🏿‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 626,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: red hair\",\n    \"hexcode\": \"1F9D1-200D-1F9B0\",\n    \"tags\": [\n      \"adult\",\n      \"person\",\n      \"red hair\"\n    ],\n    \"emoji\": \"🧑‍🦰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 627,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, red hair\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9B0\",\n        \"emoji\": \"🧑🏻‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 628,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, red hair\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9B0\",\n        \"emoji\": \"🧑🏼‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 629,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, red hair\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9B0\",\n        \"emoji\": \"🧑🏽‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 630,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, red hair\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9B0\",\n        \"emoji\": \"🧑🏾‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 631,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, red hair\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9B0\",\n        \"emoji\": \"🧑🏿‍🦰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 632,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: curly hair\",\n    \"hexcode\": \"1F469-200D-1F9B1\",\n    \"tags\": [\n      \"adult\",\n      \"curly hair\",\n      \"lady\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 633,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, curly hair\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9B1\",\n        \"emoji\": \"👩🏻‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 634,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, curly hair\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9B1\",\n        \"emoji\": \"👩🏼‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 635,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, curly hair\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9B1\",\n        \"emoji\": \"👩🏽‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 636,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, curly hair\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9B1\",\n        \"emoji\": \"👩🏾‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 637,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, curly hair\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9B1\",\n        \"emoji\": \"👩🏿‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 638,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: curly hair\",\n    \"hexcode\": \"1F9D1-200D-1F9B1\",\n    \"tags\": [\n      \"adult\",\n      \"curly hair\",\n      \"person\"\n    ],\n    \"emoji\": \"🧑‍🦱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 639,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, curly hair\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9B1\",\n        \"emoji\": \"🧑🏻‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 640,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, curly hair\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9B1\",\n        \"emoji\": \"🧑🏼‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 641,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, curly hair\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9B1\",\n        \"emoji\": \"🧑🏽‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 642,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, curly hair\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9B1\",\n        \"emoji\": \"🧑🏾‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 643,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, curly hair\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9B1\",\n        \"emoji\": \"🧑🏿‍🦱\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 644,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: white hair\",\n    \"hexcode\": \"1F469-200D-1F9B3\",\n    \"tags\": [\n      \"adult\",\n      \"lady\",\n      \"white hair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 645,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, white hair\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9B3\",\n        \"emoji\": \"👩🏻‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 646,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, white hair\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9B3\",\n        \"emoji\": \"👩🏼‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 647,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, white hair\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9B3\",\n        \"emoji\": \"👩🏽‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 648,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, white hair\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9B3\",\n        \"emoji\": \"👩🏾‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 649,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, white hair\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9B3\",\n        \"emoji\": \"👩🏿‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 650,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: white hair\",\n    \"hexcode\": \"1F9D1-200D-1F9B3\",\n    \"tags\": [\n      \"adult\",\n      \"person\",\n      \"white hair\"\n    ],\n    \"emoji\": \"🧑‍🦳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 651,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, white hair\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9B3\",\n        \"emoji\": \"🧑🏻‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 652,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, white hair\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9B3\",\n        \"emoji\": \"🧑🏼‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 653,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, white hair\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9B3\",\n        \"emoji\": \"🧑🏽‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 654,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, white hair\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9B3\",\n        \"emoji\": \"🧑🏾‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 655,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, white hair\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9B3\",\n        \"emoji\": \"🧑🏿‍🦳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 656,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: bald\",\n    \"hexcode\": \"1F469-200D-1F9B2\",\n    \"tags\": [\n      \"adult\",\n      \"bald\",\n      \"lady\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 657,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, bald\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9B2\",\n        \"emoji\": \"👩🏻‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 658,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, bald\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9B2\",\n        \"emoji\": \"👩🏼‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 659,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, bald\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9B2\",\n        \"emoji\": \"👩🏽‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 660,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, bald\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9B2\",\n        \"emoji\": \"👩🏾‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 661,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, bald\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9B2\",\n        \"emoji\": \"👩🏿‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 662,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person: bald\",\n    \"hexcode\": \"1F9D1-200D-1F9B2\",\n    \"tags\": [\n      \"adult\",\n      \"bald\",\n      \"person\"\n    ],\n    \"emoji\": \"🧑‍🦲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 663,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person: light skin tone, bald\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9B2\",\n        \"emoji\": \"🧑🏻‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 664,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person: medium-light skin tone, bald\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9B2\",\n        \"emoji\": \"🧑🏼‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 665,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person: medium skin tone, bald\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9B2\",\n        \"emoji\": \"🧑🏽‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 666,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person: medium-dark skin tone, bald\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9B2\",\n        \"emoji\": \"🧑🏾‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 667,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person: dark skin tone, bald\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9B2\",\n        \"emoji\": \"🧑🏿‍🦲\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 668,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman: blond hair\",\n    \"hexcode\": \"1F471-200D-2640-FE0F\",\n    \"tags\": [\n      \"blond\",\n      \"blond-haired\",\n      \"blonde\",\n      \"hair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👱‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 669,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman: light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👱🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 671,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman: medium-light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👱🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 673,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman: medium skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👱🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 675,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman: medium-dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👱🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 677,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman: dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👱🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 679,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man: blond hair\",\n    \"hexcode\": \"1F471-200D-2642-FE0F\",\n    \"tags\": [\n      \"blond\",\n      \"blond-haired\",\n      \"hair\",\n      \"man\"\n    ],\n    \"emoji\": \"👱‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 681,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man: light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👱🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 683,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man: medium-light skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👱🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 685,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man: medium skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👱🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 687,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man: medium-dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👱🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 689,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man: dark skin tone, blond hair\",\n        \"hexcode\": \"1F471-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👱🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 691,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"older person\",\n    \"hexcode\": \"1F9D3\",\n    \"tags\": [\n      \"adult\",\n      \"elderly\",\n      \"grandparent\",\n      \"old\",\n      \"person\",\n      \"wise\"\n    ],\n    \"emoji\": \"🧓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 693,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"older person: light skin tone\",\n        \"hexcode\": \"1F9D3-1F3FB\",\n        \"emoji\": \"🧓🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 694,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"older person: medium-light skin tone\",\n        \"hexcode\": \"1F9D3-1F3FC\",\n        \"emoji\": \"🧓🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 695,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"older person: medium skin tone\",\n        \"hexcode\": \"1F9D3-1F3FD\",\n        \"emoji\": \"🧓🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 696,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"older person: medium-dark skin tone\",\n        \"hexcode\": \"1F9D3-1F3FE\",\n        \"emoji\": \"🧓🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 697,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"older person: dark skin tone\",\n        \"hexcode\": \"1F9D3-1F3FF\",\n        \"emoji\": \"🧓🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 698,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"old man\",\n    \"hexcode\": \"1F474\",\n    \"tags\": [\n      \"adult\",\n      \"bald\",\n      \"elderly\",\n      \"gramps\",\n      \"grandfather\",\n      \"grandpa\",\n      \"man\",\n      \"old\",\n      \"wise\"\n    ],\n    \"emoji\": \"👴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 699,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"old man: light skin tone\",\n        \"hexcode\": \"1F474-1F3FB\",\n        \"emoji\": \"👴🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 700,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"old man: medium-light skin tone\",\n        \"hexcode\": \"1F474-1F3FC\",\n        \"emoji\": \"👴🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 701,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"old man: medium skin tone\",\n        \"hexcode\": \"1F474-1F3FD\",\n        \"emoji\": \"👴🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 702,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"old man: medium-dark skin tone\",\n        \"hexcode\": \"1F474-1F3FE\",\n        \"emoji\": \"👴🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 703,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"old man: dark skin tone\",\n        \"hexcode\": \"1F474-1F3FF\",\n        \"emoji\": \"👴🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 704,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"old woman\",\n    \"hexcode\": \"1F475\",\n    \"tags\": [\n      \"adult\",\n      \"elderly\",\n      \"grandma\",\n      \"grandmother\",\n      \"granny\",\n      \"lady\",\n      \"old\",\n      \"wise\",\n      \"woman\"\n    ],\n    \"emoji\": \"👵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 705,\n    \"group\": 1,\n    \"subgroup\": 23,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"old woman: light skin tone\",\n        \"hexcode\": \"1F475-1F3FB\",\n        \"emoji\": \"👵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 706,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"old woman: medium-light skin tone\",\n        \"hexcode\": \"1F475-1F3FC\",\n        \"emoji\": \"👵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 707,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"old woman: medium skin tone\",\n        \"hexcode\": \"1F475-1F3FD\",\n        \"emoji\": \"👵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 708,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"old woman: medium-dark skin tone\",\n        \"hexcode\": \"1F475-1F3FE\",\n        \"emoji\": \"👵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 709,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"old woman: dark skin tone\",\n        \"hexcode\": \"1F475-1F3FF\",\n        \"emoji\": \"👵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 710,\n        \"group\": 1,\n        \"subgroup\": 23,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person frowning\",\n    \"hexcode\": \"1F64D\",\n    \"tags\": [\n      \"annoyed\",\n      \"disappointed\",\n      \"disgruntled\",\n      \"disturbed\",\n      \"frown\",\n      \"frowning\",\n      \"frustrated\",\n      \"gesture\",\n      \"irritated\",\n      \"person\",\n      \"upset\"\n    ],\n    \"emoji\": \"🙍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 711,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person frowning: light skin tone\",\n        \"hexcode\": \"1F64D-1F3FB\",\n        \"emoji\": \"🙍🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 712,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person frowning: medium-light skin tone\",\n        \"hexcode\": \"1F64D-1F3FC\",\n        \"emoji\": \"🙍🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 713,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person frowning: medium skin tone\",\n        \"hexcode\": \"1F64D-1F3FD\",\n        \"emoji\": \"🙍🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 714,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person frowning: medium-dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FE\",\n        \"emoji\": \"🙍🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 715,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person frowning: dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FF\",\n        \"emoji\": \"🙍🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 716,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man frowning\",\n    \"hexcode\": \"1F64D-200D-2642-FE0F\",\n    \"tags\": [\n      \"annoyed\",\n      \"disappointed\",\n      \"disgruntled\",\n      \"disturbed\",\n      \"frown\",\n      \"frowning\",\n      \"frustrated\",\n      \"gesture\",\n      \"irritated\",\n      \"man\",\n      \"upset\"\n    ],\n    \"emoji\": \"🙍‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 717,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man frowning: light skin tone\",\n        \"hexcode\": \"1F64D-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙍🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 719,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man frowning: medium-light skin tone\",\n        \"hexcode\": \"1F64D-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙍🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 721,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man frowning: medium skin tone\",\n        \"hexcode\": \"1F64D-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙍🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 723,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man frowning: medium-dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙍🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 725,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man frowning: dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙍🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 727,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman frowning\",\n    \"hexcode\": \"1F64D-200D-2640-FE0F\",\n    \"tags\": [\n      \"annoyed\",\n      \"disappointed\",\n      \"disgruntled\",\n      \"disturbed\",\n      \"frown\",\n      \"frowning\",\n      \"frustrated\",\n      \"gesture\",\n      \"irritated\",\n      \"upset\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙍‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 729,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman frowning: light skin tone\",\n        \"hexcode\": \"1F64D-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙍🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 731,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman frowning: medium-light skin tone\",\n        \"hexcode\": \"1F64D-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙍🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 733,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman frowning: medium skin tone\",\n        \"hexcode\": \"1F64D-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙍🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 735,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman frowning: medium-dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙍🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 737,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman frowning: dark skin tone\",\n        \"hexcode\": \"1F64D-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙍🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 739,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person pouting\",\n    \"hexcode\": \"1F64E\",\n    \"tags\": [\n      \"disappointed\",\n      \"downtrodden\",\n      \"frown\",\n      \"grimace\",\n      \"person\",\n      \"pouting\",\n      \"scowl\",\n      \"sulk\",\n      \"upset\",\n      \"whine\"\n    ],\n    \"emoji\": \"🙎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 741,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person pouting: light skin tone\",\n        \"hexcode\": \"1F64E-1F3FB\",\n        \"emoji\": \"🙎🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 742,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person pouting: medium-light skin tone\",\n        \"hexcode\": \"1F64E-1F3FC\",\n        \"emoji\": \"🙎🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 743,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person pouting: medium skin tone\",\n        \"hexcode\": \"1F64E-1F3FD\",\n        \"emoji\": \"🙎🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 744,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person pouting: medium-dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FE\",\n        \"emoji\": \"🙎🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 745,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person pouting: dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FF\",\n        \"emoji\": \"🙎🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 746,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man pouting\",\n    \"hexcode\": \"1F64E-200D-2642-FE0F\",\n    \"tags\": [\n      \"disappointed\",\n      \"downtrodden\",\n      \"frown\",\n      \"grimace\",\n      \"man\",\n      \"pouting\",\n      \"scowl\",\n      \"sulk\",\n      \"upset\",\n      \"whine\"\n    ],\n    \"emoji\": \"🙎‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 747,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man pouting: light skin tone\",\n        \"hexcode\": \"1F64E-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙎🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 749,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man pouting: medium-light skin tone\",\n        \"hexcode\": \"1F64E-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙎🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 751,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man pouting: medium skin tone\",\n        \"hexcode\": \"1F64E-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙎🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 753,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man pouting: medium-dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙎🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 755,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man pouting: dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙎🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 757,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman pouting\",\n    \"hexcode\": \"1F64E-200D-2640-FE0F\",\n    \"tags\": [\n      \"disappointed\",\n      \"downtrodden\",\n      \"frown\",\n      \"grimace\",\n      \"pouting\",\n      \"scowl\",\n      \"sulk\",\n      \"upset\",\n      \"whine\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙎‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 759,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman pouting: light skin tone\",\n        \"hexcode\": \"1F64E-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙎🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 761,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman pouting: medium-light skin tone\",\n        \"hexcode\": \"1F64E-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙎🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 763,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman pouting: medium skin tone\",\n        \"hexcode\": \"1F64E-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙎🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 765,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman pouting: medium-dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙎🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 767,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman pouting: dark skin tone\",\n        \"hexcode\": \"1F64E-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙎🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 769,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person gesturing NO\",\n    \"hexcode\": \"1F645\",\n    \"tags\": [\n      \"forbidden\",\n      \"gesture\",\n      \"hand\",\n      \"no\",\n      \"not\",\n      \"person\",\n      \"prohibit\"\n    ],\n    \"emoji\": \"🙅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 771,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person gesturing NO: light skin tone\",\n        \"hexcode\": \"1F645-1F3FB\",\n        \"emoji\": \"🙅🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 772,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person gesturing NO: medium-light skin tone\",\n        \"hexcode\": \"1F645-1F3FC\",\n        \"emoji\": \"🙅🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 773,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person gesturing NO: medium skin tone\",\n        \"hexcode\": \"1F645-1F3FD\",\n        \"emoji\": \"🙅🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 774,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person gesturing NO: medium-dark skin tone\",\n        \"hexcode\": \"1F645-1F3FE\",\n        \"emoji\": \"🙅🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 775,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person gesturing NO: dark skin tone\",\n        \"hexcode\": \"1F645-1F3FF\",\n        \"emoji\": \"🙅🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 776,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man gesturing NO\",\n    \"hexcode\": \"1F645-200D-2642-FE0F\",\n    \"tags\": [\n      \"forbidden\",\n      \"gesture\",\n      \"hand\",\n      \"man\",\n      \"no\",\n      \"not\",\n      \"prohibit\"\n    ],\n    \"emoji\": \"🙅‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 777,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man gesturing NO: light skin tone\",\n        \"hexcode\": \"1F645-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙅🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 779,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man gesturing NO: medium-light skin tone\",\n        \"hexcode\": \"1F645-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙅🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 781,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man gesturing NO: medium skin tone\",\n        \"hexcode\": \"1F645-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙅🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 783,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man gesturing NO: medium-dark skin tone\",\n        \"hexcode\": \"1F645-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙅🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 785,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man gesturing NO: dark skin tone\",\n        \"hexcode\": \"1F645-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙅🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 787,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman gesturing NO\",\n    \"hexcode\": \"1F645-200D-2640-FE0F\",\n    \"tags\": [\n      \"forbidden\",\n      \"gesture\",\n      \"hand\",\n      \"no\",\n      \"not\",\n      \"prohibit\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙅‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 789,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman gesturing NO: light skin tone\",\n        \"hexcode\": \"1F645-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙅🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 791,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman gesturing NO: medium-light skin tone\",\n        \"hexcode\": \"1F645-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙅🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 793,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman gesturing NO: medium skin tone\",\n        \"hexcode\": \"1F645-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙅🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 795,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman gesturing NO: medium-dark skin tone\",\n        \"hexcode\": \"1F645-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙅🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 797,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman gesturing NO: dark skin tone\",\n        \"hexcode\": \"1F645-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙅🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 799,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person gesturing OK\",\n    \"hexcode\": \"1F646\",\n    \"tags\": [\n      \"exercise\",\n      \"gesture\",\n      \"gesturing\",\n      \"hand\",\n      \"ok\",\n      \"omg\",\n      \"person\"\n    ],\n    \"emoji\": \"🙆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 801,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person gesturing OK: light skin tone\",\n        \"hexcode\": \"1F646-1F3FB\",\n        \"emoji\": \"🙆🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 802,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person gesturing OK: medium-light skin tone\",\n        \"hexcode\": \"1F646-1F3FC\",\n        \"emoji\": \"🙆🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 803,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person gesturing OK: medium skin tone\",\n        \"hexcode\": \"1F646-1F3FD\",\n        \"emoji\": \"🙆🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 804,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person gesturing OK: medium-dark skin tone\",\n        \"hexcode\": \"1F646-1F3FE\",\n        \"emoji\": \"🙆🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 805,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person gesturing OK: dark skin tone\",\n        \"hexcode\": \"1F646-1F3FF\",\n        \"emoji\": \"🙆🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 806,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man gesturing OK\",\n    \"hexcode\": \"1F646-200D-2642-FE0F\",\n    \"tags\": [\n      \"exercise\",\n      \"gesture\",\n      \"gesturing\",\n      \"hand\",\n      \"man\",\n      \"ok\",\n      \"omg\"\n    ],\n    \"emoji\": \"🙆‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 807,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man gesturing OK: light skin tone\",\n        \"hexcode\": \"1F646-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙆🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 809,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man gesturing OK: medium-light skin tone\",\n        \"hexcode\": \"1F646-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙆🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 811,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man gesturing OK: medium skin tone\",\n        \"hexcode\": \"1F646-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙆🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 813,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man gesturing OK: medium-dark skin tone\",\n        \"hexcode\": \"1F646-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙆🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 815,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man gesturing OK: dark skin tone\",\n        \"hexcode\": \"1F646-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙆🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 817,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman gesturing OK\",\n    \"hexcode\": \"1F646-200D-2640-FE0F\",\n    \"tags\": [\n      \"exercise\",\n      \"gesture\",\n      \"gesturing\",\n      \"hand\",\n      \"ok\",\n      \"omg\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙆‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 819,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman gesturing OK: light skin tone\",\n        \"hexcode\": \"1F646-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙆🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 821,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman gesturing OK: medium-light skin tone\",\n        \"hexcode\": \"1F646-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙆🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 823,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman gesturing OK: medium skin tone\",\n        \"hexcode\": \"1F646-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙆🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 825,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman gesturing OK: medium-dark skin tone\",\n        \"hexcode\": \"1F646-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙆🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 827,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman gesturing OK: dark skin tone\",\n        \"hexcode\": \"1F646-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙆🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 829,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person tipping hand\",\n    \"hexcode\": \"1F481\",\n    \"tags\": [\n      \"fetch\",\n      \"flick\",\n      \"flip\",\n      \"gossip\",\n      \"hand\",\n      \"person\",\n      \"sarcasm\",\n      \"sarcastic\",\n      \"sassy\",\n      \"seriously\",\n      \"tipping\",\n      \"whatever\"\n    ],\n    \"emoji\": \"💁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 831,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person tipping hand: light skin tone\",\n        \"hexcode\": \"1F481-1F3FB\",\n        \"emoji\": \"💁🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 832,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person tipping hand: medium-light skin tone\",\n        \"hexcode\": \"1F481-1F3FC\",\n        \"emoji\": \"💁🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 833,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person tipping hand: medium skin tone\",\n        \"hexcode\": \"1F481-1F3FD\",\n        \"emoji\": \"💁🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 834,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person tipping hand: medium-dark skin tone\",\n        \"hexcode\": \"1F481-1F3FE\",\n        \"emoji\": \"💁🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 835,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person tipping hand: dark skin tone\",\n        \"hexcode\": \"1F481-1F3FF\",\n        \"emoji\": \"💁🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 836,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man tipping hand\",\n    \"hexcode\": \"1F481-200D-2642-FE0F\",\n    \"tags\": [\n      \"fetch\",\n      \"flick\",\n      \"flip\",\n      \"gossip\",\n      \"hand\",\n      \"man\",\n      \"sarcasm\",\n      \"sarcastic\",\n      \"sassy\",\n      \"seriously\",\n      \"tipping\",\n      \"whatever\"\n    ],\n    \"emoji\": \"💁‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 837,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man tipping hand: light skin tone\",\n        \"hexcode\": \"1F481-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"💁🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 839,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man tipping hand: medium-light skin tone\",\n        \"hexcode\": \"1F481-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"💁🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 841,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man tipping hand: medium skin tone\",\n        \"hexcode\": \"1F481-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"💁🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 843,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man tipping hand: medium-dark skin tone\",\n        \"hexcode\": \"1F481-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"💁🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 845,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man tipping hand: dark skin tone\",\n        \"hexcode\": \"1F481-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"💁🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 847,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman tipping hand\",\n    \"hexcode\": \"1F481-200D-2640-FE0F\",\n    \"tags\": [\n      \"fetch\",\n      \"flick\",\n      \"flip\",\n      \"gossip\",\n      \"hand\",\n      \"sarcasm\",\n      \"sarcastic\",\n      \"sassy\",\n      \"seriously\",\n      \"tipping\",\n      \"whatever\",\n      \"woman\"\n    ],\n    \"emoji\": \"💁‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 849,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman tipping hand: light skin tone\",\n        \"hexcode\": \"1F481-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"💁🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 851,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman tipping hand: medium-light skin tone\",\n        \"hexcode\": \"1F481-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"💁🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 853,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman tipping hand: medium skin tone\",\n        \"hexcode\": \"1F481-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"💁🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 855,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman tipping hand: medium-dark skin tone\",\n        \"hexcode\": \"1F481-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"💁🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 857,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman tipping hand: dark skin tone\",\n        \"hexcode\": \"1F481-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"💁🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 859,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person raising hand\",\n    \"hexcode\": \"1F64B\",\n    \"tags\": [\n      \"gesture\",\n      \"hand\",\n      \"here\",\n      \"know\",\n      \"me\",\n      \"person\",\n      \"pick\",\n      \"question\",\n      \"raise\",\n      \"raising\"\n    ],\n    \"emoji\": \"🙋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 861,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person raising hand: light skin tone\",\n        \"hexcode\": \"1F64B-1F3FB\",\n        \"emoji\": \"🙋🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 862,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person raising hand: medium-light skin tone\",\n        \"hexcode\": \"1F64B-1F3FC\",\n        \"emoji\": \"🙋🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 863,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person raising hand: medium skin tone\",\n        \"hexcode\": \"1F64B-1F3FD\",\n        \"emoji\": \"🙋🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 864,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person raising hand: medium-dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FE\",\n        \"emoji\": \"🙋🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 865,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person raising hand: dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FF\",\n        \"emoji\": \"🙋🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 866,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man raising hand\",\n    \"hexcode\": \"1F64B-200D-2642-FE0F\",\n    \"tags\": [\n      \"gesture\",\n      \"hand\",\n      \"here\",\n      \"know\",\n      \"man\",\n      \"me\",\n      \"pick\",\n      \"question\",\n      \"raise\",\n      \"raising\"\n    ],\n    \"emoji\": \"🙋‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 867,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man raising hand: light skin tone\",\n        \"hexcode\": \"1F64B-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙋🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 869,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man raising hand: medium-light skin tone\",\n        \"hexcode\": \"1F64B-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙋🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 871,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man raising hand: medium skin tone\",\n        \"hexcode\": \"1F64B-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙋🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 873,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man raising hand: medium-dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙋🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 875,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man raising hand: dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙋🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 877,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman raising hand\",\n    \"hexcode\": \"1F64B-200D-2640-FE0F\",\n    \"tags\": [\n      \"gesture\",\n      \"hand\",\n      \"here\",\n      \"know\",\n      \"me\",\n      \"pick\",\n      \"question\",\n      \"raise\",\n      \"raising\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙋‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 879,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman raising hand: light skin tone\",\n        \"hexcode\": \"1F64B-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙋🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 881,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman raising hand: medium-light skin tone\",\n        \"hexcode\": \"1F64B-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙋🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 883,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman raising hand: medium skin tone\",\n        \"hexcode\": \"1F64B-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙋🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 885,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman raising hand: medium-dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙋🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 887,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman raising hand: dark skin tone\",\n        \"hexcode\": \"1F64B-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙋🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 889,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"deaf person\",\n    \"hexcode\": \"1F9CF\",\n    \"tags\": [\n      \"accessibility\",\n      \"deaf\",\n      \"ear\",\n      \"gesture\",\n      \"hear\",\n      \"person\"\n    ],\n    \"emoji\": \"🧏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 891,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"deaf person: light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FB\",\n        \"emoji\": \"🧏🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 892,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"deaf person: medium-light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FC\",\n        \"emoji\": \"🧏🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 893,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"deaf person: medium skin tone\",\n        \"hexcode\": \"1F9CF-1F3FD\",\n        \"emoji\": \"🧏🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 894,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"deaf person: medium-dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FE\",\n        \"emoji\": \"🧏🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 895,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"deaf person: dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FF\",\n        \"emoji\": \"🧏🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 896,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"deaf man\",\n    \"hexcode\": \"1F9CF-200D-2642-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"deaf\",\n      \"ear\",\n      \"gesture\",\n      \"hear\",\n      \"man\"\n    ],\n    \"emoji\": \"🧏‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 897,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 12,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"deaf man: light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧏🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 899,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"deaf man: medium-light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧏🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 901,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"deaf man: medium skin tone\",\n        \"hexcode\": \"1F9CF-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧏🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 903,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"deaf man: medium-dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧏🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 905,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"deaf man: dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧏🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 907,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"deaf woman\",\n    \"hexcode\": \"1F9CF-200D-2640-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"deaf\",\n      \"ear\",\n      \"gesture\",\n      \"hear\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧏‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 909,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 12,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"deaf woman: light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧏🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 911,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"deaf woman: medium-light skin tone\",\n        \"hexcode\": \"1F9CF-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧏🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 913,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"deaf woman: medium skin tone\",\n        \"hexcode\": \"1F9CF-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧏🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 915,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"deaf woman: medium-dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧏🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 917,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"deaf woman: dark skin tone\",\n        \"hexcode\": \"1F9CF-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧏🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 919,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person bowing\",\n    \"hexcode\": \"1F647\",\n    \"tags\": [\n      \"apology\",\n      \"ask\",\n      \"beg\",\n      \"bow\",\n      \"bowing\",\n      \"favor\",\n      \"forgive\",\n      \"gesture\",\n      \"meditate\",\n      \"meditation\",\n      \"person\",\n      \"pity\",\n      \"regret\",\n      \"sorry\"\n    ],\n    \"emoji\": \"🙇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 921,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person bowing: light skin tone\",\n        \"hexcode\": \"1F647-1F3FB\",\n        \"emoji\": \"🙇🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 922,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person bowing: medium-light skin tone\",\n        \"hexcode\": \"1F647-1F3FC\",\n        \"emoji\": \"🙇🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 923,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person bowing: medium skin tone\",\n        \"hexcode\": \"1F647-1F3FD\",\n        \"emoji\": \"🙇🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 924,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person bowing: medium-dark skin tone\",\n        \"hexcode\": \"1F647-1F3FE\",\n        \"emoji\": \"🙇🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 925,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person bowing: dark skin tone\",\n        \"hexcode\": \"1F647-1F3FF\",\n        \"emoji\": \"🙇🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 926,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man bowing\",\n    \"hexcode\": \"1F647-200D-2642-FE0F\",\n    \"tags\": [\n      \"apology\",\n      \"ask\",\n      \"beg\",\n      \"bow\",\n      \"bowing\",\n      \"favor\",\n      \"forgive\",\n      \"gesture\",\n      \"man\",\n      \"meditate\",\n      \"meditation\",\n      \"pity\",\n      \"regret\",\n      \"sorry\"\n    ],\n    \"emoji\": \"🙇‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 927,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man bowing: light skin tone\",\n        \"hexcode\": \"1F647-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🙇🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 929,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man bowing: medium-light skin tone\",\n        \"hexcode\": \"1F647-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🙇🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 931,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man bowing: medium skin tone\",\n        \"hexcode\": \"1F647-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🙇🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 933,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man bowing: medium-dark skin tone\",\n        \"hexcode\": \"1F647-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🙇🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 935,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man bowing: dark skin tone\",\n        \"hexcode\": \"1F647-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🙇🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 937,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman bowing\",\n    \"hexcode\": \"1F647-200D-2640-FE0F\",\n    \"tags\": [\n      \"apology\",\n      \"ask\",\n      \"beg\",\n      \"bow\",\n      \"bowing\",\n      \"favor\",\n      \"forgive\",\n      \"gesture\",\n      \"meditate\",\n      \"meditation\",\n      \"pity\",\n      \"regret\",\n      \"sorry\",\n      \"woman\"\n    ],\n    \"emoji\": \"🙇‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 939,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman bowing: light skin tone\",\n        \"hexcode\": \"1F647-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🙇🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 941,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman bowing: medium-light skin tone\",\n        \"hexcode\": \"1F647-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🙇🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 943,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman bowing: medium skin tone\",\n        \"hexcode\": \"1F647-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🙇🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 945,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman bowing: medium-dark skin tone\",\n        \"hexcode\": \"1F647-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🙇🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 947,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman bowing: dark skin tone\",\n        \"hexcode\": \"1F647-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🙇🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 949,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person facepalming\",\n    \"hexcode\": \"1F926\",\n    \"tags\": [\n      \"again\",\n      \"bewilder\",\n      \"disbelief\",\n      \"exasperation\",\n      \"facepalm\",\n      \"no\",\n      \"not\",\n      \"oh\",\n      \"omg\",\n      \"person\",\n      \"shock\",\n      \"smh\"\n    ],\n    \"emoji\": \"🤦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 951,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person facepalming: light skin tone\",\n        \"hexcode\": \"1F926-1F3FB\",\n        \"emoji\": \"🤦🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 952,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person facepalming: medium-light skin tone\",\n        \"hexcode\": \"1F926-1F3FC\",\n        \"emoji\": \"🤦🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 953,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person facepalming: medium skin tone\",\n        \"hexcode\": \"1F926-1F3FD\",\n        \"emoji\": \"🤦🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 954,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person facepalming: medium-dark skin tone\",\n        \"hexcode\": \"1F926-1F3FE\",\n        \"emoji\": \"🤦🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 955,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person facepalming: dark skin tone\",\n        \"hexcode\": \"1F926-1F3FF\",\n        \"emoji\": \"🤦🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 956,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man facepalming\",\n    \"hexcode\": \"1F926-200D-2642-FE0F\",\n    \"tags\": [\n      \"again\",\n      \"bewilder\",\n      \"disbelief\",\n      \"exasperation\",\n      \"facepalm\",\n      \"man\",\n      \"no\",\n      \"not\",\n      \"oh\",\n      \"omg\",\n      \"shock\",\n      \"smh\"\n    ],\n    \"emoji\": \"🤦‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 957,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man facepalming: light skin tone\",\n        \"hexcode\": \"1F926-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤦🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 959,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man facepalming: medium-light skin tone\",\n        \"hexcode\": \"1F926-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤦🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 961,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man facepalming: medium skin tone\",\n        \"hexcode\": \"1F926-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤦🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 963,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man facepalming: medium-dark skin tone\",\n        \"hexcode\": \"1F926-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤦🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 965,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man facepalming: dark skin tone\",\n        \"hexcode\": \"1F926-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤦🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 967,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman facepalming\",\n    \"hexcode\": \"1F926-200D-2640-FE0F\",\n    \"tags\": [\n      \"again\",\n      \"bewilder\",\n      \"disbelief\",\n      \"exasperation\",\n      \"facepalm\",\n      \"no\",\n      \"not\",\n      \"oh\",\n      \"omg\",\n      \"shock\",\n      \"smh\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤦‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 969,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman facepalming: light skin tone\",\n        \"hexcode\": \"1F926-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤦🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 971,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman facepalming: medium-light skin tone\",\n        \"hexcode\": \"1F926-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤦🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 973,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman facepalming: medium skin tone\",\n        \"hexcode\": \"1F926-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤦🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 975,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman facepalming: medium-dark skin tone\",\n        \"hexcode\": \"1F926-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤦🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 977,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman facepalming: dark skin tone\",\n        \"hexcode\": \"1F926-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤦🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 979,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person shrugging\",\n    \"hexcode\": \"1F937\",\n    \"tags\": [\n      \"doubt\",\n      \"dunno\",\n      \"guess\",\n      \"idk\",\n      \"ignorance\",\n      \"indifference\",\n      \"knows\",\n      \"maybe\",\n      \"person\",\n      \"shrug\",\n      \"shrugging\",\n      \"whatever\",\n      \"who\"\n    ],\n    \"emoji\": \"🤷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 981,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person shrugging: light skin tone\",\n        \"hexcode\": \"1F937-1F3FB\",\n        \"emoji\": \"🤷🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 982,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person shrugging: medium-light skin tone\",\n        \"hexcode\": \"1F937-1F3FC\",\n        \"emoji\": \"🤷🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 983,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person shrugging: medium skin tone\",\n        \"hexcode\": \"1F937-1F3FD\",\n        \"emoji\": \"🤷🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 984,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person shrugging: medium-dark skin tone\",\n        \"hexcode\": \"1F937-1F3FE\",\n        \"emoji\": \"🤷🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 985,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person shrugging: dark skin tone\",\n        \"hexcode\": \"1F937-1F3FF\",\n        \"emoji\": \"🤷🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 986,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man shrugging\",\n    \"hexcode\": \"1F937-200D-2642-FE0F\",\n    \"tags\": [\n      \"doubt\",\n      \"dunno\",\n      \"guess\",\n      \"idk\",\n      \"ignorance\",\n      \"indifference\",\n      \"knows\",\n      \"man\",\n      \"maybe\",\n      \"shrug\",\n      \"shrugging\",\n      \"whatever\",\n      \"who\"\n    ],\n    \"emoji\": \"🤷‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 987,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man shrugging: light skin tone\",\n        \"hexcode\": \"1F937-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤷🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 989,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man shrugging: medium-light skin tone\",\n        \"hexcode\": \"1F937-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤷🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 991,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man shrugging: medium skin tone\",\n        \"hexcode\": \"1F937-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤷🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 993,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man shrugging: medium-dark skin tone\",\n        \"hexcode\": \"1F937-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤷🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 995,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man shrugging: dark skin tone\",\n        \"hexcode\": \"1F937-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤷🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 997,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman shrugging\",\n    \"hexcode\": \"1F937-200D-2640-FE0F\",\n    \"tags\": [\n      \"doubt\",\n      \"dunno\",\n      \"guess\",\n      \"idk\",\n      \"ignorance\",\n      \"indifference\",\n      \"knows\",\n      \"maybe\",\n      \"shrug\",\n      \"shrugging\",\n      \"whatever\",\n      \"who\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤷‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 999,\n    \"group\": 1,\n    \"subgroup\": 24,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman shrugging: light skin tone\",\n        \"hexcode\": \"1F937-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤷🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1001,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman shrugging: medium-light skin tone\",\n        \"hexcode\": \"1F937-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤷🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1003,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman shrugging: medium skin tone\",\n        \"hexcode\": \"1F937-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤷🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1005,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman shrugging: medium-dark skin tone\",\n        \"hexcode\": \"1F937-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤷🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1007,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman shrugging: dark skin tone\",\n        \"hexcode\": \"1F937-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤷🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1009,\n        \"group\": 1,\n        \"subgroup\": 24,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"health worker\",\n    \"hexcode\": \"1F9D1-200D-2695-FE0F\",\n    \"tags\": [\n      \"doctor\",\n      \"health\",\n      \"healthcare\",\n      \"nurse\",\n      \"therapist\",\n      \"worker\"\n    ],\n    \"emoji\": \"🧑‍⚕️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1011,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"health worker: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2695-FE0F\",\n        \"emoji\": \"🧑🏻‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1013,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"health worker: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2695-FE0F\",\n        \"emoji\": \"🧑🏼‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1015,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"health worker: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2695-FE0F\",\n        \"emoji\": \"🧑🏽‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1017,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"health worker: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2695-FE0F\",\n        \"emoji\": \"🧑🏾‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1019,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"health worker: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2695-FE0F\",\n        \"emoji\": \"🧑🏿‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1021,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man health worker\",\n    \"hexcode\": \"1F468-200D-2695-FE0F\",\n    \"tags\": [\n      \"doctor\",\n      \"health\",\n      \"healthcare\",\n      \"man\",\n      \"nurse\",\n      \"therapist\",\n      \"worker\"\n    ],\n    \"emoji\": \"👨‍⚕️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1023,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man health worker: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2695-FE0F\",\n        \"emoji\": \"👨🏻‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1025,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man health worker: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2695-FE0F\",\n        \"emoji\": \"👨🏼‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1027,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man health worker: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2695-FE0F\",\n        \"emoji\": \"👨🏽‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1029,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man health worker: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2695-FE0F\",\n        \"emoji\": \"👨🏾‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1031,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man health worker: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2695-FE0F\",\n        \"emoji\": \"👨🏿‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1033,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman health worker\",\n    \"hexcode\": \"1F469-200D-2695-FE0F\",\n    \"tags\": [\n      \"doctor\",\n      \"health\",\n      \"healthcare\",\n      \"nurse\",\n      \"therapist\",\n      \"woman\",\n      \"worker\"\n    ],\n    \"emoji\": \"👩‍⚕️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1035,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman health worker: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2695-FE0F\",\n        \"emoji\": \"👩🏻‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1037,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman health worker: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2695-FE0F\",\n        \"emoji\": \"👩🏼‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1039,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman health worker: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2695-FE0F\",\n        \"emoji\": \"👩🏽‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1041,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman health worker: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2695-FE0F\",\n        \"emoji\": \"👩🏾‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1043,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman health worker: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2695-FE0F\",\n        \"emoji\": \"👩🏿‍⚕️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1045,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"student\",\n    \"hexcode\": \"1F9D1-200D-1F393\",\n    \"tags\": [\n      \"graduate\"\n    ],\n    \"emoji\": \"🧑‍🎓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1047,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"student: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F393\",\n        \"emoji\": \"🧑🏻‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1048,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"student: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F393\",\n        \"emoji\": \"🧑🏼‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1049,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"student: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F393\",\n        \"emoji\": \"🧑🏽‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1050,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"student: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F393\",\n        \"emoji\": \"🧑🏾‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1051,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"student: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F393\",\n        \"emoji\": \"🧑🏿‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1052,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man student\",\n    \"hexcode\": \"1F468-200D-1F393\",\n    \"tags\": [\n      \"graduate\",\n      \"man\",\n      \"student\"\n    ],\n    \"emoji\": \"👨‍🎓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1053,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man student: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F393\",\n        \"emoji\": \"👨🏻‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1054,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man student: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F393\",\n        \"emoji\": \"👨🏼‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1055,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man student: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F393\",\n        \"emoji\": \"👨🏽‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1056,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man student: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F393\",\n        \"emoji\": \"👨🏾‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1057,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man student: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F393\",\n        \"emoji\": \"👨🏿‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1058,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman student\",\n    \"hexcode\": \"1F469-200D-1F393\",\n    \"tags\": [\n      \"graduate\",\n      \"student\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🎓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1059,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman student: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F393\",\n        \"emoji\": \"👩🏻‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1060,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman student: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F393\",\n        \"emoji\": \"👩🏼‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1061,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman student: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F393\",\n        \"emoji\": \"👩🏽‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1062,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman student: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F393\",\n        \"emoji\": \"👩🏾‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1063,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman student: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F393\",\n        \"emoji\": \"👩🏿‍🎓\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1064,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"teacher\",\n    \"hexcode\": \"1F9D1-200D-1F3EB\",\n    \"tags\": [\n      \"instructor\",\n      \"lecturer\",\n      \"professor\"\n    ],\n    \"emoji\": \"🧑‍🏫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1065,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"teacher: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F3EB\",\n        \"emoji\": \"🧑🏻‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1066,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"teacher: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F3EB\",\n        \"emoji\": \"🧑🏼‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1067,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"teacher: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F3EB\",\n        \"emoji\": \"🧑🏽‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1068,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"teacher: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F3EB\",\n        \"emoji\": \"🧑🏾‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1069,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"teacher: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F3EB\",\n        \"emoji\": \"🧑🏿‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1070,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man teacher\",\n    \"hexcode\": \"1F468-200D-1F3EB\",\n    \"tags\": [\n      \"instructor\",\n      \"lecturer\",\n      \"man\",\n      \"professor\",\n      \"teacher\"\n    ],\n    \"emoji\": \"👨‍🏫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1071,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man teacher: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F3EB\",\n        \"emoji\": \"👨🏻‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1072,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man teacher: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F3EB\",\n        \"emoji\": \"👨🏼‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1073,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man teacher: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F3EB\",\n        \"emoji\": \"👨🏽‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1074,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man teacher: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F3EB\",\n        \"emoji\": \"👨🏾‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1075,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man teacher: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F3EB\",\n        \"emoji\": \"👨🏿‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1076,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman teacher\",\n    \"hexcode\": \"1F469-200D-1F3EB\",\n    \"tags\": [\n      \"instructor\",\n      \"lecturer\",\n      \"professor\",\n      \"teacher\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🏫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1077,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman teacher: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F3EB\",\n        \"emoji\": \"👩🏻‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1078,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman teacher: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F3EB\",\n        \"emoji\": \"👩🏼‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1079,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman teacher: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F3EB\",\n        \"emoji\": \"👩🏽‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1080,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman teacher: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F3EB\",\n        \"emoji\": \"👩🏾‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1081,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman teacher: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F3EB\",\n        \"emoji\": \"👩🏿‍🏫\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1082,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"judge\",\n    \"hexcode\": \"1F9D1-200D-2696-FE0F\",\n    \"tags\": [\n      \"justice\",\n      \"law\",\n      \"scales\"\n    ],\n    \"emoji\": \"🧑‍⚖️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1083,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"judge: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2696-FE0F\",\n        \"emoji\": \"🧑🏻‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1085,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"judge: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2696-FE0F\",\n        \"emoji\": \"🧑🏼‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1087,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"judge: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2696-FE0F\",\n        \"emoji\": \"🧑🏽‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1089,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"judge: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2696-FE0F\",\n        \"emoji\": \"🧑🏾‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1091,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"judge: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2696-FE0F\",\n        \"emoji\": \"🧑🏿‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1093,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man judge\",\n    \"hexcode\": \"1F468-200D-2696-FE0F\",\n    \"tags\": [\n      \"judge\",\n      \"justice\",\n      \"law\",\n      \"man\",\n      \"scales\"\n    ],\n    \"emoji\": \"👨‍⚖️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1095,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man judge: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2696-FE0F\",\n        \"emoji\": \"👨🏻‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1097,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man judge: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2696-FE0F\",\n        \"emoji\": \"👨🏼‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1099,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man judge: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2696-FE0F\",\n        \"emoji\": \"👨🏽‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1101,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man judge: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2696-FE0F\",\n        \"emoji\": \"👨🏾‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1103,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man judge: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2696-FE0F\",\n        \"emoji\": \"👨🏿‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1105,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman judge\",\n    \"hexcode\": \"1F469-200D-2696-FE0F\",\n    \"tags\": [\n      \"judge\",\n      \"justice\",\n      \"law\",\n      \"scales\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍⚖️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1107,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman judge: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2696-FE0F\",\n        \"emoji\": \"👩🏻‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1109,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman judge: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2696-FE0F\",\n        \"emoji\": \"👩🏼‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1111,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman judge: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2696-FE0F\",\n        \"emoji\": \"👩🏽‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1113,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman judge: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2696-FE0F\",\n        \"emoji\": \"👩🏾‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1115,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman judge: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2696-FE0F\",\n        \"emoji\": \"👩🏿‍⚖️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1117,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"farmer\",\n    \"hexcode\": \"1F9D1-200D-1F33E\",\n    \"tags\": [\n      \"gardener\",\n      \"rancher\"\n    ],\n    \"emoji\": \"🧑‍🌾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1119,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"farmer: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F33E\",\n        \"emoji\": \"🧑🏻‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1120,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"farmer: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F33E\",\n        \"emoji\": \"🧑🏼‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1121,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"farmer: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F33E\",\n        \"emoji\": \"🧑🏽‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1122,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"farmer: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F33E\",\n        \"emoji\": \"🧑🏾‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1123,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"farmer: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F33E\",\n        \"emoji\": \"🧑🏿‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1124,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man farmer\",\n    \"hexcode\": \"1F468-200D-1F33E\",\n    \"tags\": [\n      \"farmer\",\n      \"gardener\",\n      \"man\",\n      \"rancher\"\n    ],\n    \"emoji\": \"👨‍🌾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1125,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man farmer: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F33E\",\n        \"emoji\": \"👨🏻‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1126,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man farmer: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F33E\",\n        \"emoji\": \"👨🏼‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1127,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man farmer: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F33E\",\n        \"emoji\": \"👨🏽‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1128,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man farmer: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F33E\",\n        \"emoji\": \"👨🏾‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1129,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man farmer: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F33E\",\n        \"emoji\": \"👨🏿‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1130,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman farmer\",\n    \"hexcode\": \"1F469-200D-1F33E\",\n    \"tags\": [\n      \"farmer\",\n      \"gardener\",\n      \"rancher\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🌾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1131,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman farmer: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F33E\",\n        \"emoji\": \"👩🏻‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1132,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman farmer: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F33E\",\n        \"emoji\": \"👩🏼‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1133,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman farmer: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F33E\",\n        \"emoji\": \"👩🏽‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1134,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman farmer: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F33E\",\n        \"emoji\": \"👩🏾‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1135,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman farmer: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F33E\",\n        \"emoji\": \"👩🏿‍🌾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1136,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"cook\",\n    \"hexcode\": \"1F9D1-200D-1F373\",\n    \"tags\": [\n      \"chef\"\n    ],\n    \"emoji\": \"🧑‍🍳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1137,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"cook: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F373\",\n        \"emoji\": \"🧑🏻‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1138,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"cook: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F373\",\n        \"emoji\": \"🧑🏼‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1139,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"cook: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F373\",\n        \"emoji\": \"🧑🏽‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1140,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"cook: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F373\",\n        \"emoji\": \"🧑🏾‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1141,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"cook: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F373\",\n        \"emoji\": \"🧑🏿‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1142,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man cook\",\n    \"hexcode\": \"1F468-200D-1F373\",\n    \"tags\": [\n      \"chef\",\n      \"cook\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍🍳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1143,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man cook: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F373\",\n        \"emoji\": \"👨🏻‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1144,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man cook: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F373\",\n        \"emoji\": \"👨🏼‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1145,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man cook: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F373\",\n        \"emoji\": \"👨🏽‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1146,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man cook: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F373\",\n        \"emoji\": \"👨🏾‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1147,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man cook: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F373\",\n        \"emoji\": \"👨🏿‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1148,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman cook\",\n    \"hexcode\": \"1F469-200D-1F373\",\n    \"tags\": [\n      \"chef\",\n      \"cook\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🍳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1149,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman cook: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F373\",\n        \"emoji\": \"👩🏻‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1150,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman cook: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F373\",\n        \"emoji\": \"👩🏼‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1151,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman cook: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F373\",\n        \"emoji\": \"👩🏽‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1152,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman cook: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F373\",\n        \"emoji\": \"👩🏾‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1153,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman cook: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F373\",\n        \"emoji\": \"👩🏿‍🍳\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1154,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"mechanic\",\n    \"hexcode\": \"1F9D1-200D-1F527\",\n    \"tags\": [\n      \"electrician\",\n      \"plumber\",\n      \"tradesperson\"\n    ],\n    \"emoji\": \"🧑‍🔧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1155,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"mechanic: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F527\",\n        \"emoji\": \"🧑🏻‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1156,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"mechanic: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F527\",\n        \"emoji\": \"🧑🏼‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1157,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"mechanic: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F527\",\n        \"emoji\": \"🧑🏽‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1158,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"mechanic: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F527\",\n        \"emoji\": \"🧑🏾‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1159,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"mechanic: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F527\",\n        \"emoji\": \"🧑🏿‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1160,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man mechanic\",\n    \"hexcode\": \"1F468-200D-1F527\",\n    \"tags\": [\n      \"electrician\",\n      \"man\",\n      \"mechanic\",\n      \"plumber\",\n      \"tradesperson\"\n    ],\n    \"emoji\": \"👨‍🔧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1161,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man mechanic: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F527\",\n        \"emoji\": \"👨🏻‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1162,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man mechanic: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F527\",\n        \"emoji\": \"👨🏼‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1163,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man mechanic: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F527\",\n        \"emoji\": \"👨🏽‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1164,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man mechanic: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F527\",\n        \"emoji\": \"👨🏾‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1165,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man mechanic: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F527\",\n        \"emoji\": \"👨🏿‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1166,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman mechanic\",\n    \"hexcode\": \"1F469-200D-1F527\",\n    \"tags\": [\n      \"electrician\",\n      \"mechanic\",\n      \"plumber\",\n      \"tradesperson\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🔧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1167,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman mechanic: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F527\",\n        \"emoji\": \"👩🏻‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1168,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman mechanic: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F527\",\n        \"emoji\": \"👩🏼‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1169,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman mechanic: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F527\",\n        \"emoji\": \"👩🏽‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1170,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman mechanic: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F527\",\n        \"emoji\": \"👩🏾‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1171,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman mechanic: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F527\",\n        \"emoji\": \"👩🏿‍🔧\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1172,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"factory worker\",\n    \"hexcode\": \"1F9D1-200D-1F3ED\",\n    \"tags\": [\n      \"assembly\",\n      \"factory\",\n      \"industrial\",\n      \"worker\"\n    ],\n    \"emoji\": \"🧑‍🏭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1173,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"factory worker: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F3ED\",\n        \"emoji\": \"🧑🏻‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1174,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"factory worker: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F3ED\",\n        \"emoji\": \"🧑🏼‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1175,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"factory worker: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F3ED\",\n        \"emoji\": \"🧑🏽‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1176,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"factory worker: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F3ED\",\n        \"emoji\": \"🧑🏾‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1177,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"factory worker: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F3ED\",\n        \"emoji\": \"🧑🏿‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1178,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man factory worker\",\n    \"hexcode\": \"1F468-200D-1F3ED\",\n    \"tags\": [\n      \"assembly\",\n      \"factory\",\n      \"industrial\",\n      \"man\",\n      \"worker\"\n    ],\n    \"emoji\": \"👨‍🏭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1179,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man factory worker: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F3ED\",\n        \"emoji\": \"👨🏻‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1180,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man factory worker: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F3ED\",\n        \"emoji\": \"👨🏼‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1181,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man factory worker: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F3ED\",\n        \"emoji\": \"👨🏽‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1182,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man factory worker: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F3ED\",\n        \"emoji\": \"👨🏾‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1183,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man factory worker: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F3ED\",\n        \"emoji\": \"👨🏿‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1184,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman factory worker\",\n    \"hexcode\": \"1F469-200D-1F3ED\",\n    \"tags\": [\n      \"assembly\",\n      \"factory\",\n      \"industrial\",\n      \"woman\",\n      \"worker\"\n    ],\n    \"emoji\": \"👩‍🏭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1185,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman factory worker: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F3ED\",\n        \"emoji\": \"👩🏻‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1186,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman factory worker: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F3ED\",\n        \"emoji\": \"👩🏼‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1187,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman factory worker: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F3ED\",\n        \"emoji\": \"👩🏽‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1188,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman factory worker: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F3ED\",\n        \"emoji\": \"👩🏾‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1189,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman factory worker: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F3ED\",\n        \"emoji\": \"👩🏿‍🏭\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1190,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"office worker\",\n    \"hexcode\": \"1F9D1-200D-1F4BC\",\n    \"tags\": [\n      \"architect\",\n      \"business\",\n      \"manager\",\n      \"office\",\n      \"white-collar\",\n      \"worker\"\n    ],\n    \"emoji\": \"🧑‍💼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1191,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"office worker: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F4BC\",\n        \"emoji\": \"🧑🏻‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1192,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"office worker: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F4BC\",\n        \"emoji\": \"🧑🏼‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1193,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"office worker: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F4BC\",\n        \"emoji\": \"🧑🏽‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1194,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"office worker: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F4BC\",\n        \"emoji\": \"🧑🏾‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1195,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"office worker: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F4BC\",\n        \"emoji\": \"🧑🏿‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1196,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man office worker\",\n    \"hexcode\": \"1F468-200D-1F4BC\",\n    \"tags\": [\n      \"architect\",\n      \"business\",\n      \"man\",\n      \"manager\",\n      \"office\",\n      \"white-collar\",\n      \"worker\"\n    ],\n    \"emoji\": \"👨‍💼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1197,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man office worker: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F4BC\",\n        \"emoji\": \"👨🏻‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1198,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man office worker: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F4BC\",\n        \"emoji\": \"👨🏼‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1199,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man office worker: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F4BC\",\n        \"emoji\": \"👨🏽‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1200,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man office worker: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F4BC\",\n        \"emoji\": \"👨🏾‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1201,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man office worker: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F4BC\",\n        \"emoji\": \"👨🏿‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1202,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman office worker\",\n    \"hexcode\": \"1F469-200D-1F4BC\",\n    \"tags\": [\n      \"architect\",\n      \"business\",\n      \"manager\",\n      \"office\",\n      \"white-collar\",\n      \"woman\",\n      \"worker\"\n    ],\n    \"emoji\": \"👩‍💼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1203,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman office worker: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F4BC\",\n        \"emoji\": \"👩🏻‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1204,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman office worker: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F4BC\",\n        \"emoji\": \"👩🏼‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1205,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman office worker: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F4BC\",\n        \"emoji\": \"👩🏽‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1206,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman office worker: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F4BC\",\n        \"emoji\": \"👩🏾‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1207,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman office worker: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F4BC\",\n        \"emoji\": \"👩🏿‍💼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1208,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"scientist\",\n    \"hexcode\": \"1F9D1-200D-1F52C\",\n    \"tags\": [\n      \"biologist\",\n      \"chemist\",\n      \"engineer\",\n      \"mathematician\",\n      \"physicist\"\n    ],\n    \"emoji\": \"🧑‍🔬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1209,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"scientist: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F52C\",\n        \"emoji\": \"🧑🏻‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1210,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"scientist: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F52C\",\n        \"emoji\": \"🧑🏼‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1211,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"scientist: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F52C\",\n        \"emoji\": \"🧑🏽‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1212,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"scientist: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F52C\",\n        \"emoji\": \"🧑🏾‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1213,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"scientist: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F52C\",\n        \"emoji\": \"🧑🏿‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1214,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man scientist\",\n    \"hexcode\": \"1F468-200D-1F52C\",\n    \"tags\": [\n      \"biologist\",\n      \"chemist\",\n      \"engineer\",\n      \"man\",\n      \"mathematician\",\n      \"physicist\",\n      \"scientist\"\n    ],\n    \"emoji\": \"👨‍🔬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1215,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man scientist: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F52C\",\n        \"emoji\": \"👨🏻‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1216,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man scientist: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F52C\",\n        \"emoji\": \"👨🏼‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1217,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man scientist: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F52C\",\n        \"emoji\": \"👨🏽‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1218,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man scientist: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F52C\",\n        \"emoji\": \"👨🏾‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1219,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man scientist: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F52C\",\n        \"emoji\": \"👨🏿‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1220,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman scientist\",\n    \"hexcode\": \"1F469-200D-1F52C\",\n    \"tags\": [\n      \"biologist\",\n      \"chemist\",\n      \"engineer\",\n      \"mathematician\",\n      \"physicist\",\n      \"scientist\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🔬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1221,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman scientist: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F52C\",\n        \"emoji\": \"👩🏻‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1222,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman scientist: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F52C\",\n        \"emoji\": \"👩🏼‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1223,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman scientist: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F52C\",\n        \"emoji\": \"👩🏽‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1224,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman scientist: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F52C\",\n        \"emoji\": \"👩🏾‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1225,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman scientist: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F52C\",\n        \"emoji\": \"👩🏿‍🔬\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1226,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"technologist\",\n    \"hexcode\": \"1F9D1-200D-1F4BB\",\n    \"tags\": [\n      \"coder\",\n      \"computer\",\n      \"developer\",\n      \"inventor\",\n      \"software\"\n    ],\n    \"emoji\": \"🧑‍💻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1227,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"technologist: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F4BB\",\n        \"emoji\": \"🧑🏻‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1228,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"technologist: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F4BB\",\n        \"emoji\": \"🧑🏼‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1229,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"technologist: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F4BB\",\n        \"emoji\": \"🧑🏽‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1230,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"technologist: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F4BB\",\n        \"emoji\": \"🧑🏾‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1231,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"technologist: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F4BB\",\n        \"emoji\": \"🧑🏿‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1232,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man technologist\",\n    \"hexcode\": \"1F468-200D-1F4BB\",\n    \"tags\": [\n      \"coder\",\n      \"computer\",\n      \"developer\",\n      \"inventor\",\n      \"man\",\n      \"software\",\n      \"technologist\"\n    ],\n    \"emoji\": \"👨‍💻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1233,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man technologist: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F4BB\",\n        \"emoji\": \"👨🏻‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1234,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man technologist: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F4BB\",\n        \"emoji\": \"👨🏼‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1235,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man technologist: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F4BB\",\n        \"emoji\": \"👨🏽‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1236,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man technologist: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F4BB\",\n        \"emoji\": \"👨🏾‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1237,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man technologist: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F4BB\",\n        \"emoji\": \"👨🏿‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1238,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman technologist\",\n    \"hexcode\": \"1F469-200D-1F4BB\",\n    \"tags\": [\n      \"coder\",\n      \"computer\",\n      \"developer\",\n      \"inventor\",\n      \"software\",\n      \"technologist\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍💻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1239,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman technologist: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F4BB\",\n        \"emoji\": \"👩🏻‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1240,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman technologist: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F4BB\",\n        \"emoji\": \"👩🏼‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1241,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman technologist: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F4BB\",\n        \"emoji\": \"👩🏽‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1242,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman technologist: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F4BB\",\n        \"emoji\": \"👩🏾‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1243,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman technologist: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F4BB\",\n        \"emoji\": \"👩🏿‍💻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1244,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"singer\",\n    \"hexcode\": \"1F9D1-200D-1F3A4\",\n    \"tags\": [\n      \"actor\",\n      \"entertainer\",\n      \"rock\",\n      \"rockstar\",\n      \"star\"\n    ],\n    \"emoji\": \"🧑‍🎤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1245,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"singer: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F3A4\",\n        \"emoji\": \"🧑🏻‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1246,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"singer: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F3A4\",\n        \"emoji\": \"🧑🏼‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1247,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"singer: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F3A4\",\n        \"emoji\": \"🧑🏽‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1248,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"singer: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F3A4\",\n        \"emoji\": \"🧑🏾‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1249,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"singer: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F3A4\",\n        \"emoji\": \"🧑🏿‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1250,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man singer\",\n    \"hexcode\": \"1F468-200D-1F3A4\",\n    \"tags\": [\n      \"actor\",\n      \"entertainer\",\n      \"man\",\n      \"rock\",\n      \"rockstar\",\n      \"singer\",\n      \"star\"\n    ],\n    \"emoji\": \"👨‍🎤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1251,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man singer: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F3A4\",\n        \"emoji\": \"👨🏻‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1252,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man singer: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F3A4\",\n        \"emoji\": \"👨🏼‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1253,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man singer: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F3A4\",\n        \"emoji\": \"👨🏽‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1254,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man singer: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F3A4\",\n        \"emoji\": \"👨🏾‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1255,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man singer: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F3A4\",\n        \"emoji\": \"👨🏿‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1256,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman singer\",\n    \"hexcode\": \"1F469-200D-1F3A4\",\n    \"tags\": [\n      \"actor\",\n      \"entertainer\",\n      \"rock\",\n      \"rockstar\",\n      \"singer\",\n      \"star\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🎤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1257,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman singer: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F3A4\",\n        \"emoji\": \"👩🏻‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1258,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman singer: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F3A4\",\n        \"emoji\": \"👩🏼‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1259,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman singer: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F3A4\",\n        \"emoji\": \"👩🏽‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1260,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman singer: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F3A4\",\n        \"emoji\": \"👩🏾‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1261,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman singer: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F3A4\",\n        \"emoji\": \"👩🏿‍🎤\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1262,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"artist\",\n    \"hexcode\": \"1F9D1-200D-1F3A8\",\n    \"tags\": [\n      \"palette\"\n    ],\n    \"emoji\": \"🧑‍🎨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1263,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"artist: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F3A8\",\n        \"emoji\": \"🧑🏻‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1264,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"artist: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F3A8\",\n        \"emoji\": \"🧑🏼‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1265,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"artist: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F3A8\",\n        \"emoji\": \"🧑🏽‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1266,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"artist: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F3A8\",\n        \"emoji\": \"🧑🏾‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1267,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"artist: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F3A8\",\n        \"emoji\": \"🧑🏿‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1268,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man artist\",\n    \"hexcode\": \"1F468-200D-1F3A8\",\n    \"tags\": [\n      \"artist\",\n      \"man\",\n      \"palette\"\n    ],\n    \"emoji\": \"👨‍🎨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1269,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man artist: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F3A8\",\n        \"emoji\": \"👨🏻‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1270,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man artist: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F3A8\",\n        \"emoji\": \"👨🏼‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1271,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man artist: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F3A8\",\n        \"emoji\": \"👨🏽‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1272,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man artist: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F3A8\",\n        \"emoji\": \"👨🏾‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1273,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man artist: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F3A8\",\n        \"emoji\": \"👨🏿‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1274,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman artist\",\n    \"hexcode\": \"1F469-200D-1F3A8\",\n    \"tags\": [\n      \"artist\",\n      \"palette\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🎨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1275,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman artist: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F3A8\",\n        \"emoji\": \"👩🏻‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1276,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman artist: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F3A8\",\n        \"emoji\": \"👩🏼‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1277,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman artist: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F3A8\",\n        \"emoji\": \"👩🏽‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1278,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman artist: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F3A8\",\n        \"emoji\": \"👩🏾‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1279,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman artist: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F3A8\",\n        \"emoji\": \"👩🏿‍🎨\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1280,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pilot\",\n    \"hexcode\": \"1F9D1-200D-2708-FE0F\",\n    \"tags\": [\n      \"plane\"\n    ],\n    \"emoji\": \"🧑‍✈️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1281,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"pilot: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2708-FE0F\",\n        \"emoji\": \"🧑🏻‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1283,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pilot: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2708-FE0F\",\n        \"emoji\": \"🧑🏼‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1285,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pilot: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2708-FE0F\",\n        \"emoji\": \"🧑🏽‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1287,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pilot: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2708-FE0F\",\n        \"emoji\": \"🧑🏾‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1289,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pilot: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2708-FE0F\",\n        \"emoji\": \"🧑🏿‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1291,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man pilot\",\n    \"hexcode\": \"1F468-200D-2708-FE0F\",\n    \"tags\": [\n      \"man\",\n      \"pilot\",\n      \"plane\"\n    ],\n    \"emoji\": \"👨‍✈️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1293,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man pilot: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2708-FE0F\",\n        \"emoji\": \"👨🏻‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1295,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man pilot: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2708-FE0F\",\n        \"emoji\": \"👨🏼‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1297,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man pilot: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2708-FE0F\",\n        \"emoji\": \"👨🏽‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1299,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man pilot: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2708-FE0F\",\n        \"emoji\": \"👨🏾‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1301,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man pilot: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2708-FE0F\",\n        \"emoji\": \"👨🏿‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1303,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman pilot\",\n    \"hexcode\": \"1F469-200D-2708-FE0F\",\n    \"tags\": [\n      \"pilot\",\n      \"plane\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍✈️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1305,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman pilot: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2708-FE0F\",\n        \"emoji\": \"👩🏻‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1307,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman pilot: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2708-FE0F\",\n        \"emoji\": \"👩🏼‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1309,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman pilot: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2708-FE0F\",\n        \"emoji\": \"👩🏽‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1311,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman pilot: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2708-FE0F\",\n        \"emoji\": \"👩🏾‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1313,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman pilot: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2708-FE0F\",\n        \"emoji\": \"👩🏿‍✈️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1315,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"astronaut\",\n    \"hexcode\": \"1F9D1-200D-1F680\",\n    \"tags\": [\n      \"rocket\",\n      \"space\"\n    ],\n    \"emoji\": \"🧑‍🚀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1317,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"astronaut: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F680\",\n        \"emoji\": \"🧑🏻‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1318,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"astronaut: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F680\",\n        \"emoji\": \"🧑🏼‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1319,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"astronaut: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F680\",\n        \"emoji\": \"🧑🏽‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1320,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"astronaut: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F680\",\n        \"emoji\": \"🧑🏾‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1321,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"astronaut: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F680\",\n        \"emoji\": \"🧑🏿‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1322,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man astronaut\",\n    \"hexcode\": \"1F468-200D-1F680\",\n    \"tags\": [\n      \"astronaut\",\n      \"man\",\n      \"rocket\",\n      \"space\"\n    ],\n    \"emoji\": \"👨‍🚀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1323,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man astronaut: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F680\",\n        \"emoji\": \"👨🏻‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1324,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man astronaut: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F680\",\n        \"emoji\": \"👨🏼‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1325,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man astronaut: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F680\",\n        \"emoji\": \"👨🏽‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1326,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man astronaut: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F680\",\n        \"emoji\": \"👨🏾‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1327,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man astronaut: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F680\",\n        \"emoji\": \"👨🏿‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1328,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman astronaut\",\n    \"hexcode\": \"1F469-200D-1F680\",\n    \"tags\": [\n      \"astronaut\",\n      \"rocket\",\n      \"space\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🚀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1329,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman astronaut: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F680\",\n        \"emoji\": \"👩🏻‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1330,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman astronaut: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F680\",\n        \"emoji\": \"👩🏼‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1331,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman astronaut: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F680\",\n        \"emoji\": \"👩🏽‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1332,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman astronaut: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F680\",\n        \"emoji\": \"👩🏾‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1333,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman astronaut: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F680\",\n        \"emoji\": \"👩🏿‍🚀\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1334,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"firefighter\",\n    \"hexcode\": \"1F9D1-200D-1F692\",\n    \"tags\": [\n      \"fire\",\n      \"firetruck\"\n    ],\n    \"emoji\": \"🧑‍🚒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1335,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"firefighter: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F692\",\n        \"emoji\": \"🧑🏻‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1336,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"firefighter: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F692\",\n        \"emoji\": \"🧑🏼‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1337,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"firefighter: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F692\",\n        \"emoji\": \"🧑🏽‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1338,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"firefighter: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F692\",\n        \"emoji\": \"🧑🏾‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1339,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"firefighter: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F692\",\n        \"emoji\": \"🧑🏿‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1340,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man firefighter\",\n    \"hexcode\": \"1F468-200D-1F692\",\n    \"tags\": [\n      \"fire\",\n      \"firefighter\",\n      \"firetruck\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍🚒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1341,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"man firefighter: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F692\",\n        \"emoji\": \"👨🏻‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1342,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man firefighter: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F692\",\n        \"emoji\": \"👨🏼‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1343,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man firefighter: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F692\",\n        \"emoji\": \"👨🏽‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1344,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man firefighter: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F692\",\n        \"emoji\": \"👨🏾‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1345,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man firefighter: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F692\",\n        \"emoji\": \"👨🏿‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1346,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman firefighter\",\n    \"hexcode\": \"1F469-200D-1F692\",\n    \"tags\": [\n      \"fire\",\n      \"firefighter\",\n      \"firetruck\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🚒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1347,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"skins\": [\n      {\n        \"label\": \"woman firefighter: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F692\",\n        \"emoji\": \"👩🏻‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1348,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman firefighter: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F692\",\n        \"emoji\": \"👩🏼‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1349,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman firefighter: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F692\",\n        \"emoji\": \"👩🏽‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1350,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman firefighter: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F692\",\n        \"emoji\": \"👩🏾‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1351,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman firefighter: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F692\",\n        \"emoji\": \"👩🏿‍🚒\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1352,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"police officer\",\n    \"hexcode\": \"1F46E\",\n    \"tags\": [\n      \"apprehend\",\n      \"arrest\",\n      \"citation\",\n      \"cop\",\n      \"law\",\n      \"officer\",\n      \"over\",\n      \"police\",\n      \"pulled\",\n      \"undercover\"\n    ],\n    \"emoji\": \"👮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1353,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"police officer: light skin tone\",\n        \"hexcode\": \"1F46E-1F3FB\",\n        \"emoji\": \"👮🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1354,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"police officer: medium-light skin tone\",\n        \"hexcode\": \"1F46E-1F3FC\",\n        \"emoji\": \"👮🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1355,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"police officer: medium skin tone\",\n        \"hexcode\": \"1F46E-1F3FD\",\n        \"emoji\": \"👮🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1356,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"police officer: medium-dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FE\",\n        \"emoji\": \"👮🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1357,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"police officer: dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FF\",\n        \"emoji\": \"👮🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1358,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man police officer\",\n    \"hexcode\": \"1F46E-200D-2642-FE0F\",\n    \"tags\": [\n      \"apprehend\",\n      \"arrest\",\n      \"citation\",\n      \"cop\",\n      \"law\",\n      \"man\",\n      \"officer\",\n      \"over\",\n      \"police\",\n      \"pulled\",\n      \"undercover\"\n    ],\n    \"emoji\": \"👮‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1359,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man police officer: light skin tone\",\n        \"hexcode\": \"1F46E-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👮🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1361,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man police officer: medium-light skin tone\",\n        \"hexcode\": \"1F46E-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👮🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1363,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man police officer: medium skin tone\",\n        \"hexcode\": \"1F46E-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👮🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1365,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man police officer: medium-dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👮🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1367,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man police officer: dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👮🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1369,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman police officer\",\n    \"hexcode\": \"1F46E-200D-2640-FE0F\",\n    \"tags\": [\n      \"apprehend\",\n      \"arrest\",\n      \"citation\",\n      \"cop\",\n      \"law\",\n      \"officer\",\n      \"over\",\n      \"police\",\n      \"pulled\",\n      \"undercover\",\n      \"woman\"\n    ],\n    \"emoji\": \"👮‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1371,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman police officer: light skin tone\",\n        \"hexcode\": \"1F46E-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👮🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1373,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman police officer: medium-light skin tone\",\n        \"hexcode\": \"1F46E-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👮🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1375,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman police officer: medium skin tone\",\n        \"hexcode\": \"1F46E-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👮🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1377,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman police officer: medium-dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👮🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1379,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman police officer: dark skin tone\",\n        \"hexcode\": \"1F46E-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👮🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1381,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"detective\",\n    \"hexcode\": \"1F575\",\n    \"tags\": [\n      \"sleuth\",\n      \"spy\"\n    ],\n    \"emoji\": \"🕵️\",\n    \"text\": \"🕵︎\",\n    \"type\": 0,\n    \"order\": 1384,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"detective: light skin tone\",\n        \"hexcode\": \"1F575-1F3FB\",\n        \"emoji\": \"🕵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1385,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 2,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"detective: medium-light skin tone\",\n        \"hexcode\": \"1F575-1F3FC\",\n        \"emoji\": \"🕵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1386,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 2,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"detective: medium skin tone\",\n        \"hexcode\": \"1F575-1F3FD\",\n        \"emoji\": \"🕵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1387,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 2,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"detective: medium-dark skin tone\",\n        \"hexcode\": \"1F575-1F3FE\",\n        \"emoji\": \"🕵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1388,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 2,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"detective: dark skin tone\",\n        \"hexcode\": \"1F575-1F3FF\",\n        \"emoji\": \"🕵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1389,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 2,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man detective\",\n    \"hexcode\": \"1F575-FE0F-200D-2642-FE0F\",\n    \"tags\": [\n      \"detective\",\n      \"man\",\n      \"sleuth\",\n      \"spy\"\n    ],\n    \"emoji\": \"🕵️‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1390,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man detective: light skin tone\",\n        \"hexcode\": \"1F575-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🕵🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1394,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man detective: medium-light skin tone\",\n        \"hexcode\": \"1F575-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🕵🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1396,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man detective: medium skin tone\",\n        \"hexcode\": \"1F575-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🕵🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1398,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man detective: medium-dark skin tone\",\n        \"hexcode\": \"1F575-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🕵🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1400,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man detective: dark skin tone\",\n        \"hexcode\": \"1F575-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🕵🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1402,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman detective\",\n    \"hexcode\": \"1F575-FE0F-200D-2640-FE0F\",\n    \"tags\": [\n      \"detective\",\n      \"sleuth\",\n      \"spy\",\n      \"woman\"\n    ],\n    \"emoji\": \"🕵️‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1404,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman detective: light skin tone\",\n        \"hexcode\": \"1F575-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🕵🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1408,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman detective: medium-light skin tone\",\n        \"hexcode\": \"1F575-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🕵🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1410,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman detective: medium skin tone\",\n        \"hexcode\": \"1F575-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🕵🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1412,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman detective: medium-dark skin tone\",\n        \"hexcode\": \"1F575-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🕵🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1414,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman detective: dark skin tone\",\n        \"hexcode\": \"1F575-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🕵🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1416,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"guard\",\n    \"hexcode\": \"1F482\",\n    \"tags\": [\n      \"buckingham\",\n      \"helmet\",\n      \"london\",\n      \"palace\"\n    ],\n    \"emoji\": \"💂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1418,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"guard: light skin tone\",\n        \"hexcode\": \"1F482-1F3FB\",\n        \"emoji\": \"💂🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1419,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"guard: medium-light skin tone\",\n        \"hexcode\": \"1F482-1F3FC\",\n        \"emoji\": \"💂🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1420,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"guard: medium skin tone\",\n        \"hexcode\": \"1F482-1F3FD\",\n        \"emoji\": \"💂🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1421,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"guard: medium-dark skin tone\",\n        \"hexcode\": \"1F482-1F3FE\",\n        \"emoji\": \"💂🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1422,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"guard: dark skin tone\",\n        \"hexcode\": \"1F482-1F3FF\",\n        \"emoji\": \"💂🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1423,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man guard\",\n    \"hexcode\": \"1F482-200D-2642-FE0F\",\n    \"tags\": [\n      \"buckingham\",\n      \"guard\",\n      \"helmet\",\n      \"london\",\n      \"man\",\n      \"palace\"\n    ],\n    \"emoji\": \"💂‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1424,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man guard: light skin tone\",\n        \"hexcode\": \"1F482-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"💂🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1426,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man guard: medium-light skin tone\",\n        \"hexcode\": \"1F482-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"💂🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1428,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man guard: medium skin tone\",\n        \"hexcode\": \"1F482-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"💂🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1430,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man guard: medium-dark skin tone\",\n        \"hexcode\": \"1F482-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"💂🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1432,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man guard: dark skin tone\",\n        \"hexcode\": \"1F482-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"💂🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1434,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman guard\",\n    \"hexcode\": \"1F482-200D-2640-FE0F\",\n    \"tags\": [\n      \"buckingham\",\n      \"guard\",\n      \"helmet\",\n      \"london\",\n      \"palace\",\n      \"woman\"\n    ],\n    \"emoji\": \"💂‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1436,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman guard: light skin tone\",\n        \"hexcode\": \"1F482-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"💂🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1438,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman guard: medium-light skin tone\",\n        \"hexcode\": \"1F482-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"💂🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1440,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman guard: medium skin tone\",\n        \"hexcode\": \"1F482-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"💂🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1442,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman guard: medium-dark skin tone\",\n        \"hexcode\": \"1F482-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"💂🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1444,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman guard: dark skin tone\",\n        \"hexcode\": \"1F482-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"💂🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1446,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"ninja\",\n    \"hexcode\": \"1F977\",\n    \"tags\": [\n      \"assassin\",\n      \"fight\",\n      \"fighter\",\n      \"hidden\",\n      \"person\",\n      \"secret\",\n      \"skills\",\n      \"sly\",\n      \"soldier\",\n      \"stealth\",\n      \"war\"\n    ],\n    \"emoji\": \"🥷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1448,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"ninja: light skin tone\",\n        \"hexcode\": \"1F977-1F3FB\",\n        \"emoji\": \"🥷🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1449,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"ninja: medium-light skin tone\",\n        \"hexcode\": \"1F977-1F3FC\",\n        \"emoji\": \"🥷🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1450,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"ninja: medium skin tone\",\n        \"hexcode\": \"1F977-1F3FD\",\n        \"emoji\": \"🥷🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1451,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"ninja: medium-dark skin tone\",\n        \"hexcode\": \"1F977-1F3FE\",\n        \"emoji\": \"🥷🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1452,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"ninja: dark skin tone\",\n        \"hexcode\": \"1F977-1F3FF\",\n        \"emoji\": \"🥷🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1453,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"construction worker\",\n    \"hexcode\": \"1F477\",\n    \"tags\": [\n      \"build\",\n      \"construction\",\n      \"fix\",\n      \"hardhat\",\n      \"hat\",\n      \"man\",\n      \"person\",\n      \"rebuild\",\n      \"remodel\",\n      \"repair\",\n      \"work\",\n      \"worker\"\n    ],\n    \"emoji\": \"👷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1454,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"construction worker: light skin tone\",\n        \"hexcode\": \"1F477-1F3FB\",\n        \"emoji\": \"👷🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1455,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"construction worker: medium-light skin tone\",\n        \"hexcode\": \"1F477-1F3FC\",\n        \"emoji\": \"👷🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1456,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"construction worker: medium skin tone\",\n        \"hexcode\": \"1F477-1F3FD\",\n        \"emoji\": \"👷🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1457,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"construction worker: medium-dark skin tone\",\n        \"hexcode\": \"1F477-1F3FE\",\n        \"emoji\": \"👷🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1458,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"construction worker: dark skin tone\",\n        \"hexcode\": \"1F477-1F3FF\",\n        \"emoji\": \"👷🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1459,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man construction worker\",\n    \"hexcode\": \"1F477-200D-2642-FE0F\",\n    \"tags\": [\n      \"build\",\n      \"construction\",\n      \"fix\",\n      \"hardhat\",\n      \"hat\",\n      \"man\",\n      \"rebuild\",\n      \"remodel\",\n      \"repair\",\n      \"work\",\n      \"worker\"\n    ],\n    \"emoji\": \"👷‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1460,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man construction worker: light skin tone\",\n        \"hexcode\": \"1F477-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👷🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1462,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man construction worker: medium-light skin tone\",\n        \"hexcode\": \"1F477-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👷🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1464,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man construction worker: medium skin tone\",\n        \"hexcode\": \"1F477-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👷🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1466,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man construction worker: medium-dark skin tone\",\n        \"hexcode\": \"1F477-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👷🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1468,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man construction worker: dark skin tone\",\n        \"hexcode\": \"1F477-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👷🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1470,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman construction worker\",\n    \"hexcode\": \"1F477-200D-2640-FE0F\",\n    \"tags\": [\n      \"build\",\n      \"construction\",\n      \"fix\",\n      \"hardhat\",\n      \"hat\",\n      \"man\",\n      \"rebuild\",\n      \"remodel\",\n      \"repair\",\n      \"woman\",\n      \"work\",\n      \"worker\"\n    ],\n    \"emoji\": \"👷‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1472,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman construction worker: light skin tone\",\n        \"hexcode\": \"1F477-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👷🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1474,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman construction worker: medium-light skin tone\",\n        \"hexcode\": \"1F477-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👷🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1476,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman construction worker: medium skin tone\",\n        \"hexcode\": \"1F477-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👷🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1478,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman construction worker: medium-dark skin tone\",\n        \"hexcode\": \"1F477-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👷🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1480,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman construction worker: dark skin tone\",\n        \"hexcode\": \"1F477-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👷🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1482,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person with crown\",\n    \"hexcode\": \"1FAC5\",\n    \"tags\": [\n      \"crown\",\n      \"monarch\",\n      \"noble\",\n      \"person\",\n      \"regal\",\n      \"royal\",\n      \"royalty\"\n    ],\n    \"emoji\": \"🫅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1484,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"person with crown: light skin tone\",\n        \"hexcode\": \"1FAC5-1F3FB\",\n        \"emoji\": \"🫅🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1485,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person with crown: medium-light skin tone\",\n        \"hexcode\": \"1FAC5-1F3FC\",\n        \"emoji\": \"🫅🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1486,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person with crown: medium skin tone\",\n        \"hexcode\": \"1FAC5-1F3FD\",\n        \"emoji\": \"🫅🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1487,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person with crown: medium-dark skin tone\",\n        \"hexcode\": \"1FAC5-1F3FE\",\n        \"emoji\": \"🫅🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1488,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person with crown: dark skin tone\",\n        \"hexcode\": \"1FAC5-1F3FF\",\n        \"emoji\": \"🫅🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1489,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"prince\",\n    \"hexcode\": \"1F934\",\n    \"tags\": [\n      \"crown\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"king\",\n      \"royal\",\n      \"royalty\",\n      \"tale\"\n    ],\n    \"emoji\": \"🤴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1490,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"prince: light skin tone\",\n        \"hexcode\": \"1F934-1F3FB\",\n        \"emoji\": \"🤴🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1491,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"prince: medium-light skin tone\",\n        \"hexcode\": \"1F934-1F3FC\",\n        \"emoji\": \"🤴🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1492,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"prince: medium skin tone\",\n        \"hexcode\": \"1F934-1F3FD\",\n        \"emoji\": \"🤴🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1493,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"prince: medium-dark skin tone\",\n        \"hexcode\": \"1F934-1F3FE\",\n        \"emoji\": \"🤴🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1494,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"prince: dark skin tone\",\n        \"hexcode\": \"1F934-1F3FF\",\n        \"emoji\": \"🤴🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1495,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"princess\",\n    \"hexcode\": \"1F478\",\n    \"tags\": [\n      \"crown\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"queen\",\n      \"royal\",\n      \"royalty\",\n      \"tale\"\n    ],\n    \"emoji\": \"👸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1496,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"princess: light skin tone\",\n        \"hexcode\": \"1F478-1F3FB\",\n        \"emoji\": \"👸🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1497,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"princess: medium-light skin tone\",\n        \"hexcode\": \"1F478-1F3FC\",\n        \"emoji\": \"👸🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1498,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"princess: medium skin tone\",\n        \"hexcode\": \"1F478-1F3FD\",\n        \"emoji\": \"👸🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1499,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"princess: medium-dark skin tone\",\n        \"hexcode\": \"1F478-1F3FE\",\n        \"emoji\": \"👸🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1500,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"princess: dark skin tone\",\n        \"hexcode\": \"1F478-1F3FF\",\n        \"emoji\": \"👸🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1501,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person wearing turban\",\n    \"hexcode\": \"1F473\",\n    \"tags\": [\n      \"person\",\n      \"turban\",\n      \"wearing\"\n    ],\n    \"emoji\": \"👳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1502,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person wearing turban: light skin tone\",\n        \"hexcode\": \"1F473-1F3FB\",\n        \"emoji\": \"👳🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1503,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person wearing turban: medium-light skin tone\",\n        \"hexcode\": \"1F473-1F3FC\",\n        \"emoji\": \"👳🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1504,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person wearing turban: medium skin tone\",\n        \"hexcode\": \"1F473-1F3FD\",\n        \"emoji\": \"👳🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1505,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person wearing turban: medium-dark skin tone\",\n        \"hexcode\": \"1F473-1F3FE\",\n        \"emoji\": \"👳🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1506,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person wearing turban: dark skin tone\",\n        \"hexcode\": \"1F473-1F3FF\",\n        \"emoji\": \"👳🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1507,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man wearing turban\",\n    \"hexcode\": \"1F473-200D-2642-FE0F\",\n    \"tags\": [\n      \"man\",\n      \"turban\",\n      \"wearing\"\n    ],\n    \"emoji\": \"👳‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1508,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man wearing turban: light skin tone\",\n        \"hexcode\": \"1F473-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👳🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1510,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man wearing turban: medium-light skin tone\",\n        \"hexcode\": \"1F473-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👳🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1512,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man wearing turban: medium skin tone\",\n        \"hexcode\": \"1F473-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👳🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1514,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man wearing turban: medium-dark skin tone\",\n        \"hexcode\": \"1F473-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👳🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1516,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man wearing turban: dark skin tone\",\n        \"hexcode\": \"1F473-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👳🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1518,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman wearing turban\",\n    \"hexcode\": \"1F473-200D-2640-FE0F\",\n    \"tags\": [\n      \"turban\",\n      \"wearing\",\n      \"woman\"\n    ],\n    \"emoji\": \"👳‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1520,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman wearing turban: light skin tone\",\n        \"hexcode\": \"1F473-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👳🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1522,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman wearing turban: medium-light skin tone\",\n        \"hexcode\": \"1F473-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👳🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1524,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman wearing turban: medium skin tone\",\n        \"hexcode\": \"1F473-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👳🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1526,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman wearing turban: medium-dark skin tone\",\n        \"hexcode\": \"1F473-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👳🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1528,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman wearing turban: dark skin tone\",\n        \"hexcode\": \"1F473-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👳🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1530,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person with skullcap\",\n    \"hexcode\": \"1F472\",\n    \"tags\": [\n      \"cap\",\n      \"chinese\",\n      \"gua\",\n      \"guapi\",\n      \"hat\",\n      \"mao\",\n      \"person\",\n      \"pi\",\n      \"skullcap\"\n    ],\n    \"emoji\": \"👲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1532,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person with skullcap: light skin tone\",\n        \"hexcode\": \"1F472-1F3FB\",\n        \"emoji\": \"👲🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1533,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person with skullcap: medium-light skin tone\",\n        \"hexcode\": \"1F472-1F3FC\",\n        \"emoji\": \"👲🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1534,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person with skullcap: medium skin tone\",\n        \"hexcode\": \"1F472-1F3FD\",\n        \"emoji\": \"👲🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1535,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person with skullcap: medium-dark skin tone\",\n        \"hexcode\": \"1F472-1F3FE\",\n        \"emoji\": \"👲🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1536,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person with skullcap: dark skin tone\",\n        \"hexcode\": \"1F472-1F3FF\",\n        \"emoji\": \"👲🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1537,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman with headscarf\",\n    \"hexcode\": \"1F9D5\",\n    \"tags\": [\n      \"bandana\",\n      \"head\",\n      \"headscarf\",\n      \"hijab\",\n      \"kerchief\",\n      \"mantilla\",\n      \"tichel\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1538,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"woman with headscarf: light skin tone\",\n        \"hexcode\": \"1F9D5-1F3FB\",\n        \"emoji\": \"🧕🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1539,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman with headscarf: medium-light skin tone\",\n        \"hexcode\": \"1F9D5-1F3FC\",\n        \"emoji\": \"🧕🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1540,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman with headscarf: medium skin tone\",\n        \"hexcode\": \"1F9D5-1F3FD\",\n        \"emoji\": \"🧕🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1541,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman with headscarf: medium-dark skin tone\",\n        \"hexcode\": \"1F9D5-1F3FE\",\n        \"emoji\": \"🧕🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1542,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman with headscarf: dark skin tone\",\n        \"hexcode\": \"1F9D5-1F3FF\",\n        \"emoji\": \"🧕🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1543,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in tuxedo\",\n    \"hexcode\": \"1F935\",\n    \"tags\": [\n      \"formal\",\n      \"person\",\n      \"tuxedo\",\n      \"wedding\"\n    ],\n    \"emoji\": \"🤵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1544,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person in tuxedo: light skin tone\",\n        \"hexcode\": \"1F935-1F3FB\",\n        \"emoji\": \"🤵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1545,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in tuxedo: medium-light skin tone\",\n        \"hexcode\": \"1F935-1F3FC\",\n        \"emoji\": \"🤵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1546,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in tuxedo: medium skin tone\",\n        \"hexcode\": \"1F935-1F3FD\",\n        \"emoji\": \"🤵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1547,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in tuxedo: medium-dark skin tone\",\n        \"hexcode\": \"1F935-1F3FE\",\n        \"emoji\": \"🤵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1548,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in tuxedo: dark skin tone\",\n        \"hexcode\": \"1F935-1F3FF\",\n        \"emoji\": \"🤵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1549,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in tuxedo\",\n    \"hexcode\": \"1F935-200D-2642-FE0F\",\n    \"tags\": [\n      \"formal\",\n      \"groom\",\n      \"man\",\n      \"tuxedo\",\n      \"wedding\"\n    ],\n    \"emoji\": \"🤵‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1550,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man in tuxedo: light skin tone\",\n        \"hexcode\": \"1F935-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤵🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1552,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in tuxedo: medium-light skin tone\",\n        \"hexcode\": \"1F935-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤵🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1554,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in tuxedo: medium skin tone\",\n        \"hexcode\": \"1F935-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤵🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1556,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in tuxedo: medium-dark skin tone\",\n        \"hexcode\": \"1F935-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤵🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1558,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in tuxedo: dark skin tone\",\n        \"hexcode\": \"1F935-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤵🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1560,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in tuxedo\",\n    \"hexcode\": \"1F935-200D-2640-FE0F\",\n    \"tags\": [\n      \"formal\",\n      \"tuxedo\",\n      \"wedding\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤵‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1562,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman in tuxedo: light skin tone\",\n        \"hexcode\": \"1F935-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤵🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1564,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in tuxedo: medium-light skin tone\",\n        \"hexcode\": \"1F935-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤵🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1566,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in tuxedo: medium skin tone\",\n        \"hexcode\": \"1F935-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤵🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1568,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in tuxedo: medium-dark skin tone\",\n        \"hexcode\": \"1F935-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤵🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1570,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in tuxedo: dark skin tone\",\n        \"hexcode\": \"1F935-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤵🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1572,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person with veil\",\n    \"hexcode\": \"1F470\",\n    \"tags\": [\n      \"person\",\n      \"veil\",\n      \"wedding\"\n    ],\n    \"emoji\": \"👰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1574,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person with veil: light skin tone\",\n        \"hexcode\": \"1F470-1F3FB\",\n        \"emoji\": \"👰🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1575,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person with veil: medium-light skin tone\",\n        \"hexcode\": \"1F470-1F3FC\",\n        \"emoji\": \"👰🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1576,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person with veil: medium skin tone\",\n        \"hexcode\": \"1F470-1F3FD\",\n        \"emoji\": \"👰🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1577,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person with veil: medium-dark skin tone\",\n        \"hexcode\": \"1F470-1F3FE\",\n        \"emoji\": \"👰🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1578,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person with veil: dark skin tone\",\n        \"hexcode\": \"1F470-1F3FF\",\n        \"emoji\": \"👰🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1579,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man with veil\",\n    \"hexcode\": \"1F470-200D-2642-FE0F\",\n    \"tags\": [\n      \"man\",\n      \"veil\",\n      \"wedding\"\n    ],\n    \"emoji\": \"👰‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1580,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man with veil: light skin tone\",\n        \"hexcode\": \"1F470-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👰🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1582,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man with veil: medium-light skin tone\",\n        \"hexcode\": \"1F470-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👰🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1584,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man with veil: medium skin tone\",\n        \"hexcode\": \"1F470-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👰🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1586,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man with veil: medium-dark skin tone\",\n        \"hexcode\": \"1F470-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👰🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1588,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man with veil: dark skin tone\",\n        \"hexcode\": \"1F470-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👰🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1590,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman with veil\",\n    \"hexcode\": \"1F470-200D-2640-FE0F\",\n    \"tags\": [\n      \"bride\",\n      \"veil\",\n      \"wedding\",\n      \"woman\"\n    ],\n    \"emoji\": \"👰‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1592,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman with veil: light skin tone\",\n        \"hexcode\": \"1F470-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👰🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1594,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman with veil: medium-light skin tone\",\n        \"hexcode\": \"1F470-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👰🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1596,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman with veil: medium skin tone\",\n        \"hexcode\": \"1F470-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👰🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1598,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman with veil: medium-dark skin tone\",\n        \"hexcode\": \"1F470-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👰🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1600,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman with veil: dark skin tone\",\n        \"hexcode\": \"1F470-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👰🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1602,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pregnant woman\",\n    \"hexcode\": \"1F930\",\n    \"tags\": [\n      \"pregnant\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1604,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"pregnant woman: light skin tone\",\n        \"hexcode\": \"1F930-1F3FB\",\n        \"emoji\": \"🤰🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1605,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pregnant woman: medium-light skin tone\",\n        \"hexcode\": \"1F930-1F3FC\",\n        \"emoji\": \"🤰🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1606,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pregnant woman: medium skin tone\",\n        \"hexcode\": \"1F930-1F3FD\",\n        \"emoji\": \"🤰🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1607,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pregnant woman: medium-dark skin tone\",\n        \"hexcode\": \"1F930-1F3FE\",\n        \"emoji\": \"🤰🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1608,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pregnant woman: dark skin tone\",\n        \"hexcode\": \"1F930-1F3FF\",\n        \"emoji\": \"🤰🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1609,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pregnant man\",\n    \"hexcode\": \"1FAC3\",\n    \"tags\": [\n      \"belly\",\n      \"bloated\",\n      \"full\",\n      \"man\",\n      \"overeat\",\n      \"pregnant\"\n    ],\n    \"emoji\": \"🫃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1610,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"pregnant man: light skin tone\",\n        \"hexcode\": \"1FAC3-1F3FB\",\n        \"emoji\": \"🫃🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1611,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pregnant man: medium-light skin tone\",\n        \"hexcode\": \"1FAC3-1F3FC\",\n        \"emoji\": \"🫃🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1612,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pregnant man: medium skin tone\",\n        \"hexcode\": \"1FAC3-1F3FD\",\n        \"emoji\": \"🫃🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1613,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pregnant man: medium-dark skin tone\",\n        \"hexcode\": \"1FAC3-1F3FE\",\n        \"emoji\": \"🫃🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1614,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pregnant man: dark skin tone\",\n        \"hexcode\": \"1FAC3-1F3FF\",\n        \"emoji\": \"🫃🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1615,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"pregnant person\",\n    \"hexcode\": \"1FAC4\",\n    \"tags\": [\n      \"belly\",\n      \"bloated\",\n      \"full\",\n      \"overeat\",\n      \"person\",\n      \"pregnant\",\n      \"stuffed\"\n    ],\n    \"emoji\": \"🫄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1616,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 14,\n    \"skins\": [\n      {\n        \"label\": \"pregnant person: light skin tone\",\n        \"hexcode\": \"1FAC4-1F3FB\",\n        \"emoji\": \"🫄🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1617,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"pregnant person: medium-light skin tone\",\n        \"hexcode\": \"1FAC4-1F3FC\",\n        \"emoji\": \"🫄🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1618,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"pregnant person: medium skin tone\",\n        \"hexcode\": \"1FAC4-1F3FD\",\n        \"emoji\": \"🫄🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1619,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"pregnant person: medium-dark skin tone\",\n        \"hexcode\": \"1FAC4-1F3FE\",\n        \"emoji\": \"🫄🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1620,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"pregnant person: dark skin tone\",\n        \"hexcode\": \"1FAC4-1F3FF\",\n        \"emoji\": \"🫄🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1621,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 14,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"breast-feeding\",\n    \"hexcode\": \"1F931\",\n    \"tags\": [\n      \"baby\",\n      \"breast\",\n      \"feeding\",\n      \"mom\",\n      \"mother\",\n      \"nursing\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1622,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"breast-feeding: light skin tone\",\n        \"hexcode\": \"1F931-1F3FB\",\n        \"emoji\": \"🤱🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1623,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"breast-feeding: medium-light skin tone\",\n        \"hexcode\": \"1F931-1F3FC\",\n        \"emoji\": \"🤱🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1624,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"breast-feeding: medium skin tone\",\n        \"hexcode\": \"1F931-1F3FD\",\n        \"emoji\": \"🤱🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1625,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"breast-feeding: medium-dark skin tone\",\n        \"hexcode\": \"1F931-1F3FE\",\n        \"emoji\": \"🤱🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1626,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"breast-feeding: dark skin tone\",\n        \"hexcode\": \"1F931-1F3FF\",\n        \"emoji\": \"🤱🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1627,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman feeding baby\",\n    \"hexcode\": \"1F469-200D-1F37C\",\n    \"tags\": [\n      \"baby\",\n      \"feed\",\n      \"feeding\",\n      \"mom\",\n      \"mother\",\n      \"nanny\",\n      \"newborn\",\n      \"nursing\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🍼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1628,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"woman feeding baby: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F37C\",\n        \"emoji\": \"👩🏻‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1629,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman feeding baby: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F37C\",\n        \"emoji\": \"👩🏼‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1630,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman feeding baby: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F37C\",\n        \"emoji\": \"👩🏽‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1631,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman feeding baby: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F37C\",\n        \"emoji\": \"👩🏾‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1632,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman feeding baby: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F37C\",\n        \"emoji\": \"👩🏿‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1633,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man feeding baby\",\n    \"hexcode\": \"1F468-200D-1F37C\",\n    \"tags\": [\n      \"baby\",\n      \"dad\",\n      \"father\",\n      \"feed\",\n      \"feeding\",\n      \"man\",\n      \"nanny\",\n      \"newborn\",\n      \"nursing\"\n    ],\n    \"emoji\": \"👨‍🍼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1634,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"man feeding baby: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F37C\",\n        \"emoji\": \"👨🏻‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1635,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man feeding baby: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F37C\",\n        \"emoji\": \"👨🏼‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1636,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man feeding baby: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F37C\",\n        \"emoji\": \"👨🏽‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1637,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man feeding baby: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F37C\",\n        \"emoji\": \"👨🏾‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1638,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man feeding baby: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F37C\",\n        \"emoji\": \"👨🏿‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1639,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person feeding baby\",\n    \"hexcode\": \"1F9D1-200D-1F37C\",\n    \"tags\": [\n      \"baby\",\n      \"feed\",\n      \"feeding\",\n      \"nanny\",\n      \"newborn\",\n      \"nursing\",\n      \"parent\"\n    ],\n    \"emoji\": \"🧑‍🍼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1640,\n    \"group\": 1,\n    \"subgroup\": 25,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"person feeding baby: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F37C\",\n        \"emoji\": \"🧑🏻‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1641,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person feeding baby: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F37C\",\n        \"emoji\": \"🧑🏼‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1642,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person feeding baby: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F37C\",\n        \"emoji\": \"🧑🏽‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1643,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person feeding baby: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F37C\",\n        \"emoji\": \"🧑🏾‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1644,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person feeding baby: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F37C\",\n        \"emoji\": \"🧑🏿‍🍼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1645,\n        \"group\": 1,\n        \"subgroup\": 25,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"baby angel\",\n    \"hexcode\": \"1F47C\",\n    \"tags\": [\n      \"angel\",\n      \"baby\",\n      \"church\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"tale\"\n    ],\n    \"emoji\": \"👼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1646,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"baby angel: light skin tone\",\n        \"hexcode\": \"1F47C-1F3FB\",\n        \"emoji\": \"👼🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1647,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"baby angel: medium-light skin tone\",\n        \"hexcode\": \"1F47C-1F3FC\",\n        \"emoji\": \"👼🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1648,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"baby angel: medium skin tone\",\n        \"hexcode\": \"1F47C-1F3FD\",\n        \"emoji\": \"👼🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1649,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"baby angel: medium-dark skin tone\",\n        \"hexcode\": \"1F47C-1F3FE\",\n        \"emoji\": \"👼🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1650,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"baby angel: dark skin tone\",\n        \"hexcode\": \"1F47C-1F3FF\",\n        \"emoji\": \"👼🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1651,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"Santa Claus\",\n    \"hexcode\": \"1F385\",\n    \"tags\": [\n      \"celebration\",\n      \"christmas\",\n      \"claus\",\n      \"fairy\",\n      \"fantasy\",\n      \"father\",\n      \"holiday\",\n      \"merry\",\n      \"santa\",\n      \"tale\",\n      \"xmas\"\n    ],\n    \"emoji\": \"🎅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1652,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"Santa Claus: light skin tone\",\n        \"hexcode\": \"1F385-1F3FB\",\n        \"emoji\": \"🎅🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1653,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"Santa Claus: medium-light skin tone\",\n        \"hexcode\": \"1F385-1F3FC\",\n        \"emoji\": \"🎅🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1654,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"Santa Claus: medium skin tone\",\n        \"hexcode\": \"1F385-1F3FD\",\n        \"emoji\": \"🎅🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1655,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"Santa Claus: medium-dark skin tone\",\n        \"hexcode\": \"1F385-1F3FE\",\n        \"emoji\": \"🎅🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1656,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"Santa Claus: dark skin tone\",\n        \"hexcode\": \"1F385-1F3FF\",\n        \"emoji\": \"🎅🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1657,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"Mrs. Claus\",\n    \"hexcode\": \"1F936\",\n    \"tags\": [\n      \"celebration\",\n      \"christmas\",\n      \"claus\",\n      \"fairy\",\n      \"fantasy\",\n      \"holiday\",\n      \"merry\",\n      \"mother\",\n      \"mrs\",\n      \"santa\",\n      \"tale\",\n      \"xmas\"\n    ],\n    \"emoji\": \"🤶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1658,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"Mrs. Claus: light skin tone\",\n        \"hexcode\": \"1F936-1F3FB\",\n        \"emoji\": \"🤶🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1659,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"Mrs. Claus: medium-light skin tone\",\n        \"hexcode\": \"1F936-1F3FC\",\n        \"emoji\": \"🤶🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1660,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"Mrs. Claus: medium skin tone\",\n        \"hexcode\": \"1F936-1F3FD\",\n        \"emoji\": \"🤶🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1661,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"Mrs. Claus: medium-dark skin tone\",\n        \"hexcode\": \"1F936-1F3FE\",\n        \"emoji\": \"🤶🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1662,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"Mrs. Claus: dark skin tone\",\n        \"hexcode\": \"1F936-1F3FF\",\n        \"emoji\": \"🤶🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1663,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"Mx Claus\",\n    \"hexcode\": \"1F9D1-200D-1F384\",\n    \"tags\": [\n      \"celebration\",\n      \"christmas\",\n      \"claus\",\n      \"fairy\",\n      \"fantasy\",\n      \"holiday\",\n      \"merry\",\n      \"mx\",\n      \"santa\",\n      \"tale\",\n      \"xmas\"\n    ],\n    \"emoji\": \"🧑‍🎄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1664,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 13,\n    \"skins\": [\n      {\n        \"label\": \"Mx Claus: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F384\",\n        \"emoji\": \"🧑🏻‍🎄\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1665,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 13,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"Mx Claus: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F384\",\n        \"emoji\": \"🧑🏼‍🎄\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1666,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 13,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"Mx Claus: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F384\",\n        \"emoji\": \"🧑🏽‍🎄\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1667,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 13,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"Mx Claus: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F384\",\n        \"emoji\": \"🧑🏾‍🎄\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1668,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 13,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"Mx Claus: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F384\",\n        \"emoji\": \"🧑🏿‍🎄\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1669,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 13,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"superhero\",\n    \"hexcode\": \"1F9B8\",\n    \"tags\": [\n      \"good\",\n      \"hero\",\n      \"superpower\"\n    ],\n    \"emoji\": \"🦸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1670,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"superhero: light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FB\",\n        \"emoji\": \"🦸🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1671,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"superhero: medium-light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FC\",\n        \"emoji\": \"🦸🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1672,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"superhero: medium skin tone\",\n        \"hexcode\": \"1F9B8-1F3FD\",\n        \"emoji\": \"🦸🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1673,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"superhero: medium-dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FE\",\n        \"emoji\": \"🦸🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1674,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"superhero: dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FF\",\n        \"emoji\": \"🦸🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1675,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man superhero\",\n    \"hexcode\": \"1F9B8-200D-2642-FE0F\",\n    \"tags\": [\n      \"good\",\n      \"hero\",\n      \"man\",\n      \"superhero\",\n      \"superpower\"\n    ],\n    \"emoji\": \"🦸‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1676,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man superhero: light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🦸🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1678,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man superhero: medium-light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🦸🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1680,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man superhero: medium skin tone\",\n        \"hexcode\": \"1F9B8-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🦸🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1682,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man superhero: medium-dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🦸🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1684,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man superhero: dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🦸🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1686,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman superhero\",\n    \"hexcode\": \"1F9B8-200D-2640-FE0F\",\n    \"tags\": [\n      \"good\",\n      \"hero\",\n      \"heroine\",\n      \"superhero\",\n      \"superpower\",\n      \"woman\"\n    ],\n    \"emoji\": \"🦸‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1688,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman superhero: light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🦸🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1690,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman superhero: medium-light skin tone\",\n        \"hexcode\": \"1F9B8-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🦸🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1692,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman superhero: medium skin tone\",\n        \"hexcode\": \"1F9B8-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🦸🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1694,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman superhero: medium-dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🦸🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1696,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman superhero: dark skin tone\",\n        \"hexcode\": \"1F9B8-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🦸🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1698,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"supervillain\",\n    \"hexcode\": \"1F9B9\",\n    \"tags\": [\n      \"bad\",\n      \"criminal\",\n      \"evil\",\n      \"superpower\",\n      \"villain\"\n    ],\n    \"emoji\": \"🦹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1700,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"skins\": [\n      {\n        \"label\": \"supervillain: light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FB\",\n        \"emoji\": \"🦹🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1701,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"supervillain: medium-light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FC\",\n        \"emoji\": \"🦹🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1702,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"supervillain: medium skin tone\",\n        \"hexcode\": \"1F9B9-1F3FD\",\n        \"emoji\": \"🦹🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1703,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"supervillain: medium-dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FE\",\n        \"emoji\": \"🦹🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1704,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"supervillain: dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FF\",\n        \"emoji\": \"🦹🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1705,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man supervillain\",\n    \"hexcode\": \"1F9B9-200D-2642-FE0F\",\n    \"tags\": [\n      \"bad\",\n      \"criminal\",\n      \"evil\",\n      \"man\",\n      \"superpower\",\n      \"supervillain\",\n      \"villain\"\n    ],\n    \"emoji\": \"🦹‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1706,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man supervillain: light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🦹🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1708,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man supervillain: medium-light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🦹🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1710,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man supervillain: medium skin tone\",\n        \"hexcode\": \"1F9B9-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🦹🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1712,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man supervillain: medium-dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🦹🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1714,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man supervillain: dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🦹🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1716,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman supervillain\",\n    \"hexcode\": \"1F9B9-200D-2640-FE0F\",\n    \"tags\": [\n      \"bad\",\n      \"criminal\",\n      \"evil\",\n      \"superpower\",\n      \"supervillain\",\n      \"villain\",\n      \"woman\"\n    ],\n    \"emoji\": \"🦹‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1718,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 11,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman supervillain: light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🦹🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1720,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman supervillain: medium-light skin tone\",\n        \"hexcode\": \"1F9B9-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🦹🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1722,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman supervillain: medium skin tone\",\n        \"hexcode\": \"1F9B9-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🦹🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1724,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman supervillain: medium-dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🦹🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1726,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman supervillain: dark skin tone\",\n        \"hexcode\": \"1F9B9-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🦹🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1728,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 11,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"mage\",\n    \"hexcode\": \"1F9D9\",\n    \"tags\": [\n      \"fantasy\",\n      \"magic\",\n      \"play\",\n      \"sorcerer\",\n      \"sorceress\",\n      \"sorcery\",\n      \"spell\",\n      \"summon\",\n      \"witch\",\n      \"wizard\"\n    ],\n    \"emoji\": \"🧙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1730,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"mage: light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FB\",\n        \"emoji\": \"🧙🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1731,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"mage: medium-light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FC\",\n        \"emoji\": \"🧙🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1732,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"mage: medium skin tone\",\n        \"hexcode\": \"1F9D9-1F3FD\",\n        \"emoji\": \"🧙🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1733,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"mage: medium-dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FE\",\n        \"emoji\": \"🧙🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1734,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"mage: dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FF\",\n        \"emoji\": \"🧙🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1735,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man mage\",\n    \"hexcode\": \"1F9D9-200D-2642-FE0F\",\n    \"tags\": [\n      \"fantasy\",\n      \"mage\",\n      \"magic\",\n      \"man\",\n      \"play\",\n      \"sorcerer\",\n      \"sorceress\",\n      \"sorcery\",\n      \"spell\",\n      \"summon\",\n      \"witch\",\n      \"wizard\"\n    ],\n    \"emoji\": \"🧙‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1736,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1,\n    \"emoticon\": \":{>\",\n    \"skins\": [\n      {\n        \"label\": \"man mage: light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧙🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1738,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man mage: medium-light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧙🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1740,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man mage: medium skin tone\",\n        \"hexcode\": \"1F9D9-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧙🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1742,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man mage: medium-dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧙🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1744,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man mage: dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧙🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1746,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman mage\",\n    \"hexcode\": \"1F9D9-200D-2640-FE0F\",\n    \"tags\": [\n      \"fantasy\",\n      \"mage\",\n      \"magic\",\n      \"play\",\n      \"sorcerer\",\n      \"sorceress\",\n      \"sorcery\",\n      \"spell\",\n      \"summon\",\n      \"witch\",\n      \"wizard\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧙‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1748,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman mage: light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧙🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1750,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman mage: medium-light skin tone\",\n        \"hexcode\": \"1F9D9-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧙🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1752,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman mage: medium skin tone\",\n        \"hexcode\": \"1F9D9-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧙🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1754,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman mage: medium-dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧙🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1756,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman mage: dark skin tone\",\n        \"hexcode\": \"1F9D9-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧙🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1758,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"fairy\",\n    \"hexcode\": \"1F9DA\",\n    \"tags\": [\n      \"fairytale\",\n      \"fantasy\",\n      \"myth\",\n      \"person\",\n      \"pixie\",\n      \"tale\",\n      \"wings\"\n    ],\n    \"emoji\": \"🧚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1760,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"fairy: light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FB\",\n        \"emoji\": \"🧚🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1761,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"fairy: medium-light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FC\",\n        \"emoji\": \"🧚🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1762,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"fairy: medium skin tone\",\n        \"hexcode\": \"1F9DA-1F3FD\",\n        \"emoji\": \"🧚🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1763,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"fairy: medium-dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FE\",\n        \"emoji\": \"🧚🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1764,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"fairy: dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FF\",\n        \"emoji\": \"🧚🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1765,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man fairy\",\n    \"hexcode\": \"1F9DA-200D-2642-FE0F\",\n    \"tags\": [\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"man\",\n      \"myth\",\n      \"oberon\",\n      \"person\",\n      \"pixie\",\n      \"puck\",\n      \"tale\",\n      \"wings\"\n    ],\n    \"emoji\": \"🧚‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1766,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man fairy: light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧚🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1768,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man fairy: medium-light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧚🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1770,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man fairy: medium skin tone\",\n        \"hexcode\": \"1F9DA-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧚🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1772,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man fairy: medium-dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧚🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1774,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man fairy: dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧚🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1776,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman fairy\",\n    \"hexcode\": \"1F9DA-200D-2640-FE0F\",\n    \"tags\": [\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"myth\",\n      \"person\",\n      \"pixie\",\n      \"tale\",\n      \"titania\",\n      \"wings\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧚‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1778,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman fairy: light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧚🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1780,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman fairy: medium-light skin tone\",\n        \"hexcode\": \"1F9DA-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧚🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1782,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman fairy: medium skin tone\",\n        \"hexcode\": \"1F9DA-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧚🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1784,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman fairy: medium-dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧚🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1786,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman fairy: dark skin tone\",\n        \"hexcode\": \"1F9DA-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧚🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1788,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"vampire\",\n    \"hexcode\": \"1F9DB\",\n    \"tags\": [\n      \"blood\",\n      \"dracula\",\n      \"fangs\",\n      \"halloween\",\n      \"scary\",\n      \"supernatural\",\n      \"teeth\",\n      \"undead\"\n    ],\n    \"emoji\": \"🧛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1790,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"emoticon\": \":E\",\n    \"skins\": [\n      {\n        \"label\": \"vampire: light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FB\",\n        \"emoji\": \"🧛🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1791,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"vampire: medium-light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FC\",\n        \"emoji\": \"🧛🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1792,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"vampire: medium skin tone\",\n        \"hexcode\": \"1F9DB-1F3FD\",\n        \"emoji\": \"🧛🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1793,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"vampire: medium-dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FE\",\n        \"emoji\": \"🧛🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1794,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"vampire: dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FF\",\n        \"emoji\": \"🧛🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1795,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man vampire\",\n    \"hexcode\": \"1F9DB-200D-2642-FE0F\",\n    \"tags\": [\n      \"blood\",\n      \"fangs\",\n      \"halloween\",\n      \"man\",\n      \"scary\",\n      \"supernatural\",\n      \"teeth\",\n      \"undead\",\n      \"vampire\"\n    ],\n    \"emoji\": \"🧛‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1796,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man vampire: light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧛🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1798,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man vampire: medium-light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧛🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1800,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man vampire: medium skin tone\",\n        \"hexcode\": \"1F9DB-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧛🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1802,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man vampire: medium-dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧛🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1804,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man vampire: dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧛🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1806,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman vampire\",\n    \"hexcode\": \"1F9DB-200D-2640-FE0F\",\n    \"tags\": [\n      \"blood\",\n      \"fangs\",\n      \"halloween\",\n      \"scary\",\n      \"supernatural\",\n      \"teeth\",\n      \"undead\",\n      \"vampire\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧛‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1808,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman vampire: light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧛🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1810,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman vampire: medium-light skin tone\",\n        \"hexcode\": \"1F9DB-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧛🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1812,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman vampire: medium skin tone\",\n        \"hexcode\": \"1F9DB-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧛🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1814,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman vampire: medium-dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧛🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1816,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman vampire: dark skin tone\",\n        \"hexcode\": \"1F9DB-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧛🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1818,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"merperson\",\n    \"hexcode\": \"1F9DC\",\n    \"tags\": [\n      \"creature\",\n      \"fairytale\",\n      \"folklore\",\n      \"ocean\",\n      \"sea\",\n      \"siren\",\n      \"trident\"\n    ],\n    \"emoji\": \"🧜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1820,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"merperson: light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FB\",\n        \"emoji\": \"🧜🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1821,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"merperson: medium-light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FC\",\n        \"emoji\": \"🧜🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1822,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"merperson: medium skin tone\",\n        \"hexcode\": \"1F9DC-1F3FD\",\n        \"emoji\": \"🧜🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1823,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"merperson: medium-dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FE\",\n        \"emoji\": \"🧜🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1824,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"merperson: dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FF\",\n        \"emoji\": \"🧜🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1825,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"merman\",\n    \"hexcode\": \"1F9DC-200D-2642-FE0F\",\n    \"tags\": [\n      \"creature\",\n      \"fairytale\",\n      \"folklore\",\n      \"neptune\",\n      \"ocean\",\n      \"poseidon\",\n      \"sea\",\n      \"siren\",\n      \"trident\",\n      \"triton\"\n    ],\n    \"emoji\": \"🧜‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1826,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"merman: light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧜🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1828,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"merman: medium-light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧜🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1830,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"merman: medium skin tone\",\n        \"hexcode\": \"1F9DC-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧜🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1832,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"merman: medium-dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧜🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1834,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"merman: dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧜🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1836,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"mermaid\",\n    \"hexcode\": \"1F9DC-200D-2640-FE0F\",\n    \"tags\": [\n      \"creature\",\n      \"fairytale\",\n      \"folklore\",\n      \"merwoman\",\n      \"ocean\",\n      \"sea\",\n      \"siren\",\n      \"trident\"\n    ],\n    \"emoji\": \"🧜‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1838,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"mermaid: light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧜🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1840,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"mermaid: medium-light skin tone\",\n        \"hexcode\": \"1F9DC-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧜🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1842,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"mermaid: medium skin tone\",\n        \"hexcode\": \"1F9DC-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧜🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1844,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"mermaid: medium-dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧜🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1846,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"mermaid: dark skin tone\",\n        \"hexcode\": \"1F9DC-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧜🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1848,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"elf\",\n    \"hexcode\": \"1F9DD\",\n    \"tags\": [\n      \"elves\",\n      \"enchantment\",\n      \"fantasy\",\n      \"folklore\",\n      \"magic\",\n      \"magical\",\n      \"myth\"\n    ],\n    \"emoji\": \"🧝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1850,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"elf: light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FB\",\n        \"emoji\": \"🧝🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1851,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"elf: medium-light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FC\",\n        \"emoji\": \"🧝🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1852,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"elf: medium skin tone\",\n        \"hexcode\": \"1F9DD-1F3FD\",\n        \"emoji\": \"🧝🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1853,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"elf: medium-dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FE\",\n        \"emoji\": \"🧝🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1854,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"elf: dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FF\",\n        \"emoji\": \"🧝🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1855,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man elf\",\n    \"hexcode\": \"1F9DD-200D-2642-FE0F\",\n    \"tags\": [\n      \"elf\",\n      \"elves\",\n      \"enchantment\",\n      \"fantasy\",\n      \"folklore\",\n      \"magic\",\n      \"magical\",\n      \"man\",\n      \"myth\"\n    ],\n    \"emoji\": \"🧝‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1856,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man elf: light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧝🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1858,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man elf: medium-light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧝🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1860,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man elf: medium skin tone\",\n        \"hexcode\": \"1F9DD-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧝🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1862,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man elf: medium-dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧝🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1864,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man elf: dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧝🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1866,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman elf\",\n    \"hexcode\": \"1F9DD-200D-2640-FE0F\",\n    \"tags\": [\n      \"elf\",\n      \"elves\",\n      \"enchantment\",\n      \"fantasy\",\n      \"folklore\",\n      \"magic\",\n      \"magical\",\n      \"myth\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧝‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1868,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman elf: light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧝🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1870,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman elf: medium-light skin tone\",\n        \"hexcode\": \"1F9DD-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧝🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1872,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman elf: medium skin tone\",\n        \"hexcode\": \"1F9DD-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧝🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1874,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman elf: medium-dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧝🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1876,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman elf: dark skin tone\",\n        \"hexcode\": \"1F9DD-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧝🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1878,\n        \"group\": 1,\n        \"subgroup\": 26,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"genie\",\n    \"hexcode\": \"1F9DE\",\n    \"tags\": [\n      \"djinn\",\n      \"fantasy\",\n      \"jinn\",\n      \"lamp\",\n      \"myth\",\n      \"rub\",\n      \"wishes\"\n    ],\n    \"emoji\": \"🧞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1880,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5\n  },\n  {\n    \"label\": \"man genie\",\n    \"hexcode\": \"1F9DE-200D-2642-FE0F\",\n    \"tags\": [\n      \"djinn\",\n      \"fantasy\",\n      \"genie\",\n      \"jinn\",\n      \"lamp\",\n      \"man\",\n      \"myth\",\n      \"rub\",\n      \"wishes\"\n    ],\n    \"emoji\": \"🧞‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1881,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1\n  },\n  {\n    \"label\": \"woman genie\",\n    \"hexcode\": \"1F9DE-200D-2640-FE0F\",\n    \"tags\": [\n      \"djinn\",\n      \"fantasy\",\n      \"genie\",\n      \"jinn\",\n      \"lamp\",\n      \"myth\",\n      \"rub\",\n      \"wishes\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧞‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1883,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0\n  },\n  {\n    \"label\": \"zombie\",\n    \"hexcode\": \"1F9DF\",\n    \"tags\": [\n      \"apocalypse\",\n      \"dead\",\n      \"halloween\",\n      \"horror\",\n      \"scary\",\n      \"undead\",\n      \"walking\"\n    ],\n    \"emoji\": \"🧟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1885,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"emoticon\": \"8#\"\n  },\n  {\n    \"label\": \"man zombie\",\n    \"hexcode\": \"1F9DF-200D-2642-FE0F\",\n    \"tags\": [\n      \"apocalypse\",\n      \"dead\",\n      \"halloween\",\n      \"horror\",\n      \"man\",\n      \"scary\",\n      \"undead\",\n      \"walking\",\n      \"zombie\"\n    ],\n    \"emoji\": \"🧟‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1886,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 1\n  },\n  {\n    \"label\": \"woman zombie\",\n    \"hexcode\": \"1F9DF-200D-2640-FE0F\",\n    \"tags\": [\n      \"apocalypse\",\n      \"dead\",\n      \"halloween\",\n      \"horror\",\n      \"scary\",\n      \"undead\",\n      \"walking\",\n      \"woman\",\n      \"zombie\"\n    ],\n    \"emoji\": \"🧟‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1888,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 5,\n    \"gender\": 0\n  },\n  {\n    \"label\": \"troll\",\n    \"hexcode\": \"1F9CC\",\n    \"tags\": [\n      \"fairy\",\n      \"fantasy\",\n      \"monster\",\n      \"tale\",\n      \"trolling\"\n    ],\n    \"emoji\": \"🧌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1890,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 14\n  },\n  {\n    \"label\": \"hairy creature\",\n    \"hexcode\": \"1FAC8\",\n    \"tags\": [\n      \"bigfoot\",\n      \"cryptid\",\n      \"forest\",\n      \"giant\",\n      \"hairy\",\n      \"sasquatch\",\n      \"woodwose\",\n      \"yeti\"\n    ],\n    \"emoji\": \"🫈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1891,\n    \"group\": 1,\n    \"subgroup\": 26,\n    \"version\": 17\n  },\n  {\n    \"label\": \"person getting massage\",\n    \"hexcode\": \"1F486\",\n    \"tags\": [\n      \"face\",\n      \"getting\",\n      \"headache\",\n      \"massage\",\n      \"person\",\n      \"relax\",\n      \"relaxing\",\n      \"salon\",\n      \"soothe\",\n      \"spa\",\n      \"tension\",\n      \"therapy\",\n      \"treatment\"\n    ],\n    \"emoji\": \"💆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1892,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person getting massage: light skin tone\",\n        \"hexcode\": \"1F486-1F3FB\",\n        \"emoji\": \"💆🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1893,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person getting massage: medium-light skin tone\",\n        \"hexcode\": \"1F486-1F3FC\",\n        \"emoji\": \"💆🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1894,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person getting massage: medium skin tone\",\n        \"hexcode\": \"1F486-1F3FD\",\n        \"emoji\": \"💆🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1895,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person getting massage: medium-dark skin tone\",\n        \"hexcode\": \"1F486-1F3FE\",\n        \"emoji\": \"💆🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1896,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person getting massage: dark skin tone\",\n        \"hexcode\": \"1F486-1F3FF\",\n        \"emoji\": \"💆🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1897,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man getting massage\",\n    \"hexcode\": \"1F486-200D-2642-FE0F\",\n    \"tags\": [\n      \"face\",\n      \"getting\",\n      \"headache\",\n      \"man\",\n      \"massage\",\n      \"relax\",\n      \"relaxing\",\n      \"salon\",\n      \"soothe\",\n      \"spa\",\n      \"tension\",\n      \"therapy\",\n      \"treatment\"\n    ],\n    \"emoji\": \"💆‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1898,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man getting massage: light skin tone\",\n        \"hexcode\": \"1F486-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"💆🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1900,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man getting massage: medium-light skin tone\",\n        \"hexcode\": \"1F486-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"💆🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1902,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man getting massage: medium skin tone\",\n        \"hexcode\": \"1F486-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"💆🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1904,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man getting massage: medium-dark skin tone\",\n        \"hexcode\": \"1F486-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"💆🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1906,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man getting massage: dark skin tone\",\n        \"hexcode\": \"1F486-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"💆🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1908,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman getting massage\",\n    \"hexcode\": \"1F486-200D-2640-FE0F\",\n    \"tags\": [\n      \"face\",\n      \"getting\",\n      \"headache\",\n      \"massage\",\n      \"relax\",\n      \"relaxing\",\n      \"salon\",\n      \"soothe\",\n      \"spa\",\n      \"tension\",\n      \"therapy\",\n      \"treatment\",\n      \"woman\"\n    ],\n    \"emoji\": \"💆‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1910,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman getting massage: light skin tone\",\n        \"hexcode\": \"1F486-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"💆🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1912,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman getting massage: medium-light skin tone\",\n        \"hexcode\": \"1F486-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"💆🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1914,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman getting massage: medium skin tone\",\n        \"hexcode\": \"1F486-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"💆🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1916,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman getting massage: medium-dark skin tone\",\n        \"hexcode\": \"1F486-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"💆🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1918,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman getting massage: dark skin tone\",\n        \"hexcode\": \"1F486-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"💆🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1920,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person getting haircut\",\n    \"hexcode\": \"1F487\",\n    \"tags\": [\n      \"barber\",\n      \"beauty\",\n      \"chop\",\n      \"cosmetology\",\n      \"cut\",\n      \"groom\",\n      \"hair\",\n      \"haircut\",\n      \"parlor\",\n      \"person\",\n      \"shears\",\n      \"style\"\n    ],\n    \"emoji\": \"💇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1922,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person getting haircut: light skin tone\",\n        \"hexcode\": \"1F487-1F3FB\",\n        \"emoji\": \"💇🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1923,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person getting haircut: medium-light skin tone\",\n        \"hexcode\": \"1F487-1F3FC\",\n        \"emoji\": \"💇🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1924,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person getting haircut: medium skin tone\",\n        \"hexcode\": \"1F487-1F3FD\",\n        \"emoji\": \"💇🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1925,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person getting haircut: medium-dark skin tone\",\n        \"hexcode\": \"1F487-1F3FE\",\n        \"emoji\": \"💇🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1926,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person getting haircut: dark skin tone\",\n        \"hexcode\": \"1F487-1F3FF\",\n        \"emoji\": \"💇🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1927,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man getting haircut\",\n    \"hexcode\": \"1F487-200D-2642-FE0F\",\n    \"tags\": [\n      \"barber\",\n      \"beauty\",\n      \"chop\",\n      \"cosmetology\",\n      \"cut\",\n      \"groom\",\n      \"hair\",\n      \"haircut\",\n      \"man\",\n      \"parlor\",\n      \"person\",\n      \"shears\",\n      \"style\"\n    ],\n    \"emoji\": \"💇‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1928,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man getting haircut: light skin tone\",\n        \"hexcode\": \"1F487-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"💇🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1930,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man getting haircut: medium-light skin tone\",\n        \"hexcode\": \"1F487-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"💇🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1932,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man getting haircut: medium skin tone\",\n        \"hexcode\": \"1F487-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"💇🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1934,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man getting haircut: medium-dark skin tone\",\n        \"hexcode\": \"1F487-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"💇🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1936,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man getting haircut: dark skin tone\",\n        \"hexcode\": \"1F487-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"💇🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1938,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman getting haircut\",\n    \"hexcode\": \"1F487-200D-2640-FE0F\",\n    \"tags\": [\n      \"barber\",\n      \"beauty\",\n      \"chop\",\n      \"cosmetology\",\n      \"cut\",\n      \"groom\",\n      \"hair\",\n      \"haircut\",\n      \"parlor\",\n      \"person\",\n      \"shears\",\n      \"style\",\n      \"woman\"\n    ],\n    \"emoji\": \"💇‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1940,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman getting haircut: light skin tone\",\n        \"hexcode\": \"1F487-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"💇🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1942,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman getting haircut: medium-light skin tone\",\n        \"hexcode\": \"1F487-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"💇🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1944,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman getting haircut: medium skin tone\",\n        \"hexcode\": \"1F487-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"💇🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1946,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman getting haircut: medium-dark skin tone\",\n        \"hexcode\": \"1F487-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"💇🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1948,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman getting haircut: dark skin tone\",\n        \"hexcode\": \"1F487-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"💇🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1950,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person walking\",\n    \"hexcode\": \"1F6B6\",\n    \"tags\": [\n      \"amble\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"person\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\"\n    ],\n    \"emoji\": \"🚶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1952,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person walking: light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FB\",\n        \"emoji\": \"🚶🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1953,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person walking: medium-light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FC\",\n        \"emoji\": \"🚶🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1954,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person walking: medium skin tone\",\n        \"hexcode\": \"1F6B6-1F3FD\",\n        \"emoji\": \"🚶🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1955,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person walking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FE\",\n        \"emoji\": \"🚶🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1956,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person walking: dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FF\",\n        \"emoji\": \"🚶🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1957,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man walking\",\n    \"hexcode\": \"1F6B6-200D-2642-FE0F\",\n    \"tags\": [\n      \"amble\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\"\n    ],\n    \"emoji\": \"🚶‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1958,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man walking: light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🚶🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1960,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man walking: medium-light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🚶🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1962,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man walking: medium skin tone\",\n        \"hexcode\": \"1F6B6-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🚶🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1964,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man walking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🚶🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1966,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man walking: dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🚶🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1968,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman walking\",\n    \"hexcode\": \"1F6B6-200D-2640-FE0F\",\n    \"tags\": [\n      \"amble\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\",\n      \"woman\"\n    ],\n    \"emoji\": \"🚶‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1970,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman walking: light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🚶🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1972,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman walking: medium-light skin tone\",\n        \"hexcode\": \"1F6B6-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🚶🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1974,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman walking: medium skin tone\",\n        \"hexcode\": \"1F6B6-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🚶🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1976,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman walking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🚶🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1978,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman walking: dark skin tone\",\n        \"hexcode\": \"1F6B6-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🚶🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1980,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person walking: facing right\",\n    \"hexcode\": \"1F6B6-200D-27A1-FE0F\",\n    \"tags\": [\n      \"amble\",\n      \"facing\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"person\",\n      \"right\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\"\n    ],\n    \"emoji\": \"🚶‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1982,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person walking: light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FB-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏻‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1984,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person walking: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FC-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1986,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person walking: medium skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FD-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1988,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person walking: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FE-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏾‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1990,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person walking: dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FF-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏿‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1992,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman walking: facing right\",\n    \"hexcode\": \"1F6B6-200D-2640-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"amble\",\n      \"facing\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"right\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\",\n      \"woman\"\n    ],\n    \"emoji\": \"🚶‍♀️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 1994,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman walking: light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FB-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏻‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 1998,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman walking: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FC-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏼‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2002,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman walking: medium skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FD-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏽‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2006,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman walking: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FE-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏾‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2010,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman walking: dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FF-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏿‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2014,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man walking: facing right\",\n    \"hexcode\": \"1F6B6-200D-2642-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"amble\",\n      \"facing\",\n      \"gait\",\n      \"hike\",\n      \"man\",\n      \"pace\",\n      \"pedestrian\",\n      \"right\",\n      \"stride\",\n      \"stroll\",\n      \"walk\",\n      \"walking\"\n    ],\n    \"emoji\": \"🚶‍♂️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2018,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man walking: light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FB-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏻‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2022,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man walking: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FC-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏼‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2026,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man walking: medium skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FD-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏽‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2030,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man walking: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FE-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏾‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2034,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man walking: dark skin tone, facing right\",\n        \"hexcode\": \"1F6B6-1F3FF-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🚶🏿‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2038,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person standing\",\n    \"hexcode\": \"1F9CD\",\n    \"tags\": [\n      \"person\",\n      \"stand\",\n      \"standing\"\n    ],\n    \"emoji\": \"🧍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2042,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"person standing: light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FB\",\n        \"emoji\": \"🧍🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2043,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person standing: medium-light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FC\",\n        \"emoji\": \"🧍🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2044,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person standing: medium skin tone\",\n        \"hexcode\": \"1F9CD-1F3FD\",\n        \"emoji\": \"🧍🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2045,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person standing: medium-dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FE\",\n        \"emoji\": \"🧍🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2046,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person standing: dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FF\",\n        \"emoji\": \"🧍🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2047,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man standing\",\n    \"hexcode\": \"1F9CD-200D-2642-FE0F\",\n    \"tags\": [\n      \"man\",\n      \"stand\",\n      \"standing\"\n    ],\n    \"emoji\": \"🧍‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2048,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man standing: light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧍🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2050,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man standing: medium-light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧍🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2052,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man standing: medium skin tone\",\n        \"hexcode\": \"1F9CD-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧍🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2054,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man standing: medium-dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧍🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2056,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man standing: dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧍🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2058,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman standing\",\n    \"hexcode\": \"1F9CD-200D-2640-FE0F\",\n    \"tags\": [\n      \"stand\",\n      \"standing\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧍‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2060,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman standing: light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧍🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2062,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman standing: medium-light skin tone\",\n        \"hexcode\": \"1F9CD-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧍🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2064,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman standing: medium skin tone\",\n        \"hexcode\": \"1F9CD-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧍🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2066,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman standing: medium-dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧍🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2068,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman standing: dark skin tone\",\n        \"hexcode\": \"1F9CD-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧍🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2070,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person kneeling\",\n    \"hexcode\": \"1F9CE\",\n    \"tags\": [\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"person\"\n    ],\n    \"emoji\": \"🧎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2072,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"person kneeling: light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FB\",\n        \"emoji\": \"🧎🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2073,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person kneeling: medium-light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FC\",\n        \"emoji\": \"🧎🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2074,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person kneeling: medium skin tone\",\n        \"hexcode\": \"1F9CE-1F3FD\",\n        \"emoji\": \"🧎🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2075,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person kneeling: medium-dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FE\",\n        \"emoji\": \"🧎🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2076,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person kneeling: dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FF\",\n        \"emoji\": \"🧎🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2077,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man kneeling\",\n    \"hexcode\": \"1F9CE-200D-2642-FE0F\",\n    \"tags\": [\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"man\"\n    ],\n    \"emoji\": \"🧎‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2078,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man kneeling: light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧎🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2080,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man kneeling: medium-light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧎🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2082,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man kneeling: medium skin tone\",\n        \"hexcode\": \"1F9CE-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧎🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2084,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man kneeling: medium-dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧎🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2086,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man kneeling: dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧎🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2088,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman kneeling\",\n    \"hexcode\": \"1F9CE-200D-2640-FE0F\",\n    \"tags\": [\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧎‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2090,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman kneeling: light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧎🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2092,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman kneeling: medium-light skin tone\",\n        \"hexcode\": \"1F9CE-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧎🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2094,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman kneeling: medium skin tone\",\n        \"hexcode\": \"1F9CE-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧎🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2096,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman kneeling: medium-dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧎🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2098,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman kneeling: dark skin tone\",\n        \"hexcode\": \"1F9CE-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧎🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2100,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person kneeling: facing right\",\n    \"hexcode\": \"1F9CE-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"person\",\n      \"right\"\n    ],\n    \"emoji\": \"🧎‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2102,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person kneeling: light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FB-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏻‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2104,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person kneeling: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FC-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2106,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person kneeling: medium skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FD-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2108,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person kneeling: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FE-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏾‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2110,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person kneeling: dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FF-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏿‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2112,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman kneeling: facing right\",\n    \"hexcode\": \"1F9CE-200D-2640-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"right\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧎‍♀️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2114,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman kneeling: light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FB-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏻‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2118,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman kneeling: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FC-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏼‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2122,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman kneeling: medium skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FD-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏽‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2126,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman kneeling: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FE-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏾‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2130,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman kneeling: dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FF-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏿‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2134,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man kneeling: facing right\",\n    \"hexcode\": \"1F9CE-200D-2642-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"kneel\",\n      \"kneeling\",\n      \"knees\",\n      \"man\",\n      \"right\"\n    ],\n    \"emoji\": \"🧎‍♂️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2138,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man kneeling: light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FB-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏻‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2142,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man kneeling: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FC-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏼‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2146,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man kneeling: medium skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FD-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏽‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2150,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man kneeling: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FE-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏾‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2154,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man kneeling: dark skin tone, facing right\",\n        \"hexcode\": \"1F9CE-1F3FF-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🧎🏿‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2158,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person with white cane\",\n    \"hexcode\": \"1F9D1-200D-1F9AF\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"person\",\n      \"probing\",\n      \"white\"\n    ],\n    \"emoji\": \"🧑‍🦯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2162,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person with white cane: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9AF\",\n        \"emoji\": \"🧑🏻‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2163,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person with white cane: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9AF\",\n        \"emoji\": \"🧑🏼‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2164,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person with white cane: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9AF\",\n        \"emoji\": \"🧑🏽‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2165,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person with white cane: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9AF\",\n        \"emoji\": \"🧑🏾‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2166,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person with white cane: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9AF\",\n        \"emoji\": \"🧑🏿‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2167,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person with white cane: facing right\",\n    \"hexcode\": \"1F9D1-200D-1F9AF-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"facing\",\n      \"person\",\n      \"probing\",\n      \"right\",\n      \"white\"\n    ],\n    \"emoji\": \"🧑‍🦯‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2168,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person with white cane: light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏻‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2170,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person with white cane: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏼‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2172,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person with white cane: medium skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏽‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2174,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person with white cane: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏾‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2176,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person with white cane: dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏿‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2178,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man with white cane\",\n    \"hexcode\": \"1F468-200D-1F9AF\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"man\",\n      \"probing\",\n      \"white\"\n    ],\n    \"emoji\": \"👨‍🦯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2180,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"man with white cane: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9AF\",\n        \"emoji\": \"👨🏻‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2181,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man with white cane: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9AF\",\n        \"emoji\": \"👨🏼‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2182,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man with white cane: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9AF\",\n        \"emoji\": \"👨🏽‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2183,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man with white cane: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9AF\",\n        \"emoji\": \"👨🏾‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2184,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man with white cane: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9AF\",\n        \"emoji\": \"👨🏿‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2185,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man with white cane: facing right\",\n    \"hexcode\": \"1F468-200D-1F9AF-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"facing\",\n      \"man\",\n      \"probing\",\n      \"right\",\n      \"white\"\n    ],\n    \"emoji\": \"👨‍🦯‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2186,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"man with white cane: light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏻‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2188,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man with white cane: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏼‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2190,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man with white cane: medium skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏽‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2192,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man with white cane: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏾‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2194,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man with white cane: dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏿‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2196,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman with white cane\",\n    \"hexcode\": \"1F469-200D-1F9AF\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"probing\",\n      \"white\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2198,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"woman with white cane: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9AF\",\n        \"emoji\": \"👩🏻‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2199,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman with white cane: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9AF\",\n        \"emoji\": \"👩🏼‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2200,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman with white cane: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9AF\",\n        \"emoji\": \"👩🏽‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2201,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman with white cane: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9AF\",\n        \"emoji\": \"👩🏾‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2202,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman with white cane: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9AF\",\n        \"emoji\": \"👩🏿‍🦯\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2203,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman with white cane: facing right\",\n    \"hexcode\": \"1F469-200D-1F9AF-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"facing\",\n      \"probing\",\n      \"right\",\n      \"white\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦯‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2204,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"woman with white cane: light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏻‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2206,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman with white cane: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏼‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2208,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman with white cane: medium skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏽‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2210,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman with white cane: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏾‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2212,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman with white cane: dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9AF-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏿‍🦯‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2214,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in motorized wheelchair\",\n    \"hexcode\": \"1F9D1-200D-1F9BC\",\n    \"tags\": [\n      \"accessibility\",\n      \"motorized\",\n      \"person\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🧑‍🦼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2216,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person in motorized wheelchair: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9BC\",\n        \"emoji\": \"🧑🏻‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2217,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9BC\",\n        \"emoji\": \"🧑🏼‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2218,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9BC\",\n        \"emoji\": \"🧑🏽‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2219,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9BC\",\n        \"emoji\": \"🧑🏾‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2220,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in motorized wheelchair: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9BC\",\n        \"emoji\": \"🧑🏿‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2221,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in motorized wheelchair: facing right\",\n    \"hexcode\": \"1F9D1-200D-1F9BC-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"motorized\",\n      \"person\",\n      \"right\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🧑‍🦼‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2222,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person in motorized wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏻‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2224,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏼‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2226,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏽‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2228,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in motorized wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏾‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2230,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in motorized wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏿‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2232,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in motorized wheelchair\",\n    \"hexcode\": \"1F468-200D-1F9BC\",\n    \"tags\": [\n      \"accessibility\",\n      \"man\",\n      \"motorized\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"👨‍🦼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2234,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"man in motorized wheelchair: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9BC\",\n        \"emoji\": \"👨🏻‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2235,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9BC\",\n        \"emoji\": \"👨🏼‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2236,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9BC\",\n        \"emoji\": \"👨🏽‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2237,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9BC\",\n        \"emoji\": \"👨🏾‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2238,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in motorized wheelchair: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9BC\",\n        \"emoji\": \"👨🏿‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2239,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in motorized wheelchair: facing right\",\n    \"hexcode\": \"1F468-200D-1F9BC-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"man\",\n      \"motorized\",\n      \"right\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"👨‍🦼‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2240,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"man in motorized wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏻‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2242,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏼‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2244,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏽‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2246,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in motorized wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏾‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2248,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in motorized wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏿‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2250,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in motorized wheelchair\",\n    \"hexcode\": \"1F469-200D-1F9BC\",\n    \"tags\": [\n      \"accessibility\",\n      \"motorized\",\n      \"wheelchair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2252,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"woman in motorized wheelchair: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9BC\",\n        \"emoji\": \"👩🏻‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2253,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9BC\",\n        \"emoji\": \"👩🏼‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2254,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9BC\",\n        \"emoji\": \"👩🏽‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2255,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9BC\",\n        \"emoji\": \"👩🏾‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2256,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9BC\",\n        \"emoji\": \"👩🏿‍🦼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2257,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in motorized wheelchair: facing right\",\n    \"hexcode\": \"1F469-200D-1F9BC-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"motorized\",\n      \"right\",\n      \"wheelchair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦼‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2258,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"woman in motorized wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏻‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2260,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏼‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2262,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏽‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2264,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏾‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2266,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in motorized wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9BC-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏿‍🦼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2268,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in manual wheelchair\",\n    \"hexcode\": \"1F9D1-200D-1F9BD\",\n    \"tags\": [\n      \"accessibility\",\n      \"manual\",\n      \"person\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🧑‍🦽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2270,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12.1,\n    \"skins\": [\n      {\n        \"label\": \"person in manual wheelchair: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9BD\",\n        \"emoji\": \"🧑🏻‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2271,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9BD\",\n        \"emoji\": \"🧑🏼‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2272,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9BD\",\n        \"emoji\": \"🧑🏽‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2273,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9BD\",\n        \"emoji\": \"🧑🏾‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2274,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in manual wheelchair: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9BD\",\n        \"emoji\": \"🧑🏿‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2275,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in manual wheelchair: facing right\",\n    \"hexcode\": \"1F9D1-200D-1F9BD-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"manual\",\n      \"person\",\n      \"right\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🧑‍🦽‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2276,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person in manual wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏻‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2278,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏼‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2280,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏽‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2282,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in manual wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏾‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2284,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in manual wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"🧑🏿‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2286,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in manual wheelchair\",\n    \"hexcode\": \"1F468-200D-1F9BD\",\n    \"tags\": [\n      \"accessibility\",\n      \"man\",\n      \"manual\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"👨‍🦽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2288,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"man in manual wheelchair: light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9BD\",\n        \"emoji\": \"👨🏻‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2289,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9BD\",\n        \"emoji\": \"👨🏼‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2290,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9BD\",\n        \"emoji\": \"👨🏽‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2291,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9BD\",\n        \"emoji\": \"👨🏾‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2292,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in manual wheelchair: dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9BD\",\n        \"emoji\": \"👨🏿‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2293,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in manual wheelchair: facing right\",\n    \"hexcode\": \"1F468-200D-1F9BD-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"man\",\n      \"manual\",\n      \"right\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"👨‍🦽‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2294,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"man in manual wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏻‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2296,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏼‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2298,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏽‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2300,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in manual wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏾‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2302,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in manual wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👨🏿‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2304,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in manual wheelchair\",\n    \"hexcode\": \"1F469-200D-1F9BD\",\n    \"tags\": [\n      \"accessibility\",\n      \"manual\",\n      \"wheelchair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2306,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"woman in manual wheelchair: light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9BD\",\n        \"emoji\": \"👩🏻‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2307,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9BD\",\n        \"emoji\": \"👩🏼‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2308,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9BD\",\n        \"emoji\": \"👩🏽‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2309,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9BD\",\n        \"emoji\": \"👩🏾‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2310,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in manual wheelchair: dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9BD\",\n        \"emoji\": \"👩🏿‍🦽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2311,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in manual wheelchair: facing right\",\n    \"hexcode\": \"1F469-200D-1F9BD-200D-27A1-FE0F\",\n    \"tags\": [\n      \"accessibility\",\n      \"facing\",\n      \"manual\",\n      \"right\",\n      \"wheelchair\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍🦽‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2312,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"woman in manual wheelchair: light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏻‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2314,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏼‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2316,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏽‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2318,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in manual wheelchair: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏾‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2320,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in manual wheelchair: dark skin tone, facing right\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F9BD-200D-27A1-FE0F\",\n        \"emoji\": \"👩🏿‍🦽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2322,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person running\",\n    \"hexcode\": \"1F3C3\",\n    \"tags\": [\n      \"fast\",\n      \"hurry\",\n      \"marathon\",\n      \"move\",\n      \"person\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"run\",\n      \"rush\",\n      \"speed\"\n    ],\n    \"emoji\": \"🏃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2324,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person running: light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FB\",\n        \"emoji\": \"🏃🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2325,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person running: medium-light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FC\",\n        \"emoji\": \"🏃🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2326,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person running: medium skin tone\",\n        \"hexcode\": \"1F3C3-1F3FD\",\n        \"emoji\": \"🏃🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2327,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person running: medium-dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FE\",\n        \"emoji\": \"🏃🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2328,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person running: dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FF\",\n        \"emoji\": \"🏃🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2329,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man running\",\n    \"hexcode\": \"1F3C3-200D-2642-FE0F\",\n    \"tags\": [\n      \"fast\",\n      \"hurry\",\n      \"man\",\n      \"marathon\",\n      \"move\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"run\",\n      \"rush\",\n      \"speed\"\n    ],\n    \"emoji\": \"🏃‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2330,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man running: light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🏃🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2332,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man running: medium-light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🏃🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2334,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man running: medium skin tone\",\n        \"hexcode\": \"1F3C3-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🏃🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2336,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man running: medium-dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🏃🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2338,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man running: dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🏃🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2340,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman running\",\n    \"hexcode\": \"1F3C3-200D-2640-FE0F\",\n    \"tags\": [\n      \"fast\",\n      \"hurry\",\n      \"marathon\",\n      \"move\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"run\",\n      \"rush\",\n      \"speed\",\n      \"woman\"\n    ],\n    \"emoji\": \"🏃‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2342,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman running: light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🏃🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2344,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman running: medium-light skin tone\",\n        \"hexcode\": \"1F3C3-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🏃🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2346,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman running: medium skin tone\",\n        \"hexcode\": \"1F3C3-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🏃🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2348,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman running: medium-dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🏃🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2350,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman running: dark skin tone\",\n        \"hexcode\": \"1F3C3-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🏃🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2352,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person running: facing right\",\n    \"hexcode\": \"1F3C3-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"fast\",\n      \"hurry\",\n      \"marathon\",\n      \"move\",\n      \"person\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"right\",\n      \"run\",\n      \"rush\",\n      \"speed\"\n    ],\n    \"emoji\": \"🏃‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2354,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"skins\": [\n      {\n        \"label\": \"person running: light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FB-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏻‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2356,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person running: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FC-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏼‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2358,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person running: medium skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FD-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏽‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2360,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person running: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FE-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏾‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2362,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person running: dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FF-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏿‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2364,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman running: facing right\",\n    \"hexcode\": \"1F3C3-200D-2640-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"fast\",\n      \"hurry\",\n      \"marathon\",\n      \"move\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"right\",\n      \"run\",\n      \"rush\",\n      \"speed\",\n      \"woman\"\n    ],\n    \"emoji\": \"🏃‍♀️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2366,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman running: light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FB-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏻‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2370,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman running: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FC-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏼‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2374,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman running: medium skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FD-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏽‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2378,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman running: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FE-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏾‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2382,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman running: dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FF-200D-2640-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏿‍♀️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2386,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man running: facing right\",\n    \"hexcode\": \"1F3C3-200D-2642-FE0F-200D-27A1-FE0F\",\n    \"tags\": [\n      \"facing\",\n      \"fast\",\n      \"hurry\",\n      \"man\",\n      \"marathon\",\n      \"move\",\n      \"quick\",\n      \"race\",\n      \"racing\",\n      \"right\",\n      \"run\",\n      \"rush\",\n      \"speed\"\n    ],\n    \"emoji\": \"🏃‍♂️‍➡️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2390,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 15.1,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man running: light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FB-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏻‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2394,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man running: medium-light skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FC-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏼‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2398,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man running: medium skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FD-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏽‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2402,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man running: medium-dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FE-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏾‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2406,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man running: dark skin tone, facing right\",\n        \"hexcode\": \"1F3C3-1F3FF-200D-2642-FE0F-200D-27A1-FE0F\",\n        \"emoji\": \"🏃🏿‍♂️‍➡️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2410,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 15.1,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"ballet dancer\",\n    \"hexcode\": \"1F9D1-200D-1FA70\",\n    \"tags\": [\n      \"ballet\",\n      \"dancer\"\n    ],\n    \"emoji\": \"🧑‍🩰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2414,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 17,\n    \"skins\": [\n      {\n        \"label\": \"ballet dancer: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1FA70\",\n        \"emoji\": \"🧑🏻‍🩰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2415,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"ballet dancer: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1FA70\",\n        \"emoji\": \"🧑🏼‍🩰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2416,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"ballet dancer: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1FA70\",\n        \"emoji\": \"🧑🏽‍🩰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2417,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"ballet dancer: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1FA70\",\n        \"emoji\": \"🧑🏾‍🩰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2418,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"ballet dancer: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1FA70\",\n        \"emoji\": \"🧑🏿‍🩰\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2419,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman dancing\",\n    \"hexcode\": \"1F483\",\n    \"tags\": [\n      \"dance\",\n      \"dancer\",\n      \"dancing\",\n      \"elegant\",\n      \"festive\",\n      \"flair\",\n      \"flamenco\",\n      \"groove\",\n      \"let’s\",\n      \"salsa\",\n      \"tango\",\n      \"woman\"\n    ],\n    \"emoji\": \"💃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2420,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"woman dancing: light skin tone\",\n        \"hexcode\": \"1F483-1F3FB\",\n        \"emoji\": \"💃🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2421,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman dancing: medium-light skin tone\",\n        \"hexcode\": \"1F483-1F3FC\",\n        \"emoji\": \"💃🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2422,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman dancing: medium skin tone\",\n        \"hexcode\": \"1F483-1F3FD\",\n        \"emoji\": \"💃🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2423,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman dancing: medium-dark skin tone\",\n        \"hexcode\": \"1F483-1F3FE\",\n        \"emoji\": \"💃🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2424,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman dancing: dark skin tone\",\n        \"hexcode\": \"1F483-1F3FF\",\n        \"emoji\": \"💃🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2425,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man dancing\",\n    \"hexcode\": \"1F57A\",\n    \"tags\": [\n      \"dance\",\n      \"dancer\",\n      \"dancing\",\n      \"elegant\",\n      \"festive\",\n      \"flair\",\n      \"flamenco\",\n      \"groove\",\n      \"let’s\",\n      \"man\",\n      \"salsa\",\n      \"tango\"\n    ],\n    \"emoji\": \"🕺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2426,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"man dancing: light skin tone\",\n        \"hexcode\": \"1F57A-1F3FB\",\n        \"emoji\": \"🕺🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2427,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man dancing: medium-light skin tone\",\n        \"hexcode\": \"1F57A-1F3FC\",\n        \"emoji\": \"🕺🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2428,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man dancing: medium skin tone\",\n        \"hexcode\": \"1F57A-1F3FD\",\n        \"emoji\": \"🕺🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2429,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man dancing: medium-dark skin tone\",\n        \"hexcode\": \"1F57A-1F3FE\",\n        \"emoji\": \"🕺🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2430,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man dancing: dark skin tone\",\n        \"hexcode\": \"1F57A-1F3FF\",\n        \"emoji\": \"🕺🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2431,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in suit levitating\",\n    \"hexcode\": \"1F574\",\n    \"tags\": [\n      \"business\",\n      \"levitating\",\n      \"person\",\n      \"suit\"\n    ],\n    \"emoji\": \"🕴️\",\n    \"text\": \"🕴︎\",\n    \"type\": 0,\n    \"order\": 2433,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"person in suit levitating: light skin tone\",\n        \"hexcode\": \"1F574-1F3FB\",\n        \"emoji\": \"🕴🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2434,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in suit levitating: medium-light skin tone\",\n        \"hexcode\": \"1F574-1F3FC\",\n        \"emoji\": \"🕴🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2435,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in suit levitating: medium skin tone\",\n        \"hexcode\": \"1F574-1F3FD\",\n        \"emoji\": \"🕴🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2436,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in suit levitating: medium-dark skin tone\",\n        \"hexcode\": \"1F574-1F3FE\",\n        \"emoji\": \"🕴🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2437,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in suit levitating: dark skin tone\",\n        \"hexcode\": \"1F574-1F3FF\",\n        \"emoji\": \"🕴🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2438,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"people with bunny ears\",\n    \"hexcode\": \"1F46F\",\n    \"tags\": [\n      \"bestie\",\n      \"bff\",\n      \"bunny\",\n      \"counterpart\",\n      \"dancer\",\n      \"double\",\n      \"ear\",\n      \"identical\",\n      \"pair\",\n      \"party\",\n      \"partying\",\n      \"people\",\n      \"soulmate\",\n      \"twin\",\n      \"twinsies\"\n    ],\n    \"emoji\": \"👯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2439,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"people with bunny ears: light skin tone\",\n        \"hexcode\": \"1F46F-1F3FB\",\n        \"emoji\": \"👯🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2440,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"people with bunny ears: medium-light skin tone\",\n        \"hexcode\": \"1F46F-1F3FC\",\n        \"emoji\": \"👯🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2441,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"people with bunny ears: medium skin tone\",\n        \"hexcode\": \"1F46F-1F3FD\",\n        \"emoji\": \"👯🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2442,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"people with bunny ears: medium-dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FE\",\n        \"emoji\": \"👯🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2443,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"people with bunny ears: dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FF\",\n        \"emoji\": \"👯🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2444,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"people with bunny ears: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F430-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏻‍🐰‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2469,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F430-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏻‍🐰‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2470,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F430-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏻‍🐰‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2471,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F430-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏻‍🐰‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2472,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F430-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏼‍🐰‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2473,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F430-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏼‍🐰‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2474,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F430-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏼‍🐰‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2475,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F430-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏼‍🐰‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2476,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F430-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏽‍🐰‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2477,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F430-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏽‍🐰‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2478,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F430-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏽‍🐰‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2479,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F430-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏽‍🐰‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2480,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F430-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏾‍🐰‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2481,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F430-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏾‍🐰‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2482,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F430-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏾‍🐰‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2483,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F430-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏾‍🐰‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2484,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F430-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏿‍🐰‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2485,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F430-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏿‍🐰‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2486,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F430-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏿‍🐰‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2487,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"people with bunny ears: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F430-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏿‍🐰‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2488,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"men with bunny ears\",\n    \"hexcode\": \"1F46F-200D-2642-FE0F\",\n    \"tags\": [\n      \"bestie\",\n      \"bff\",\n      \"bunny\",\n      \"counterpart\",\n      \"dancer\",\n      \"double\",\n      \"ear\",\n      \"identical\",\n      \"men\",\n      \"pair\",\n      \"party\",\n      \"partying\",\n      \"people\",\n      \"soulmate\",\n      \"twin\",\n      \"twinsies\"\n    ],\n    \"emoji\": \"👯‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2445,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"men with bunny ears: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F430-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏻‍🐰‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2489,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F430-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏻‍🐰‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2490,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F430-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏻‍🐰‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2491,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F430-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏻‍🐰‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2492,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F430-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏼‍🐰‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2493,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F430-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏼‍🐰‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2494,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F430-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏼‍🐰‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2495,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F430-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏼‍🐰‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2496,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F430-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏽‍🐰‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2497,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F430-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏽‍🐰‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2498,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F430-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏽‍🐰‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2499,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F430-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏽‍🐰‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2500,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F430-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏾‍🐰‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2501,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F430-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏾‍🐰‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2502,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F430-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏾‍🐰‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2503,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F430-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏾‍🐰‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2504,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F430-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏿‍🐰‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2505,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F430-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏿‍🐰‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2506,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F430-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏿‍🐰‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2507,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F430-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏿‍🐰‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2508,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"men with bunny ears: light skin tone\",\n        \"hexcode\": \"1F46F-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"👯🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2447,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"men with bunny ears: medium-light skin tone\",\n        \"hexcode\": \"1F46F-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"👯🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2449,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"men with bunny ears: medium skin tone\",\n        \"hexcode\": \"1F46F-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"👯🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2451,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"men with bunny ears: medium-dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"👯🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2453,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"men with bunny ears: dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"👯🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2455,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"women with bunny ears\",\n    \"hexcode\": \"1F46F-200D-2640-FE0F\",\n    \"tags\": [\n      \"bestie\",\n      \"bff\",\n      \"bunny\",\n      \"counterpart\",\n      \"dancer\",\n      \"double\",\n      \"ear\",\n      \"identical\",\n      \"pair\",\n      \"party\",\n      \"partying\",\n      \"people\",\n      \"soulmate\",\n      \"twin\",\n      \"twinsies\",\n      \"women\"\n    ],\n    \"emoji\": \"👯‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2457,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"women with bunny ears: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F430-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏻‍🐰‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2509,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F430-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏻‍🐰‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2510,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F430-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏻‍🐰‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2511,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F430-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏻‍🐰‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2512,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F430-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏼‍🐰‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2513,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F430-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏼‍🐰‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2514,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F430-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏼‍🐰‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2515,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F430-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏼‍🐰‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2516,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F430-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏽‍🐰‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2517,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F430-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏽‍🐰‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2518,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F430-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏽‍🐰‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2519,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F430-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏽‍🐰‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2520,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F430-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏾‍🐰‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2521,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F430-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏾‍🐰‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2522,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F430-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏾‍🐰‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2523,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F430-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏾‍🐰‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2524,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F430-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏿‍🐰‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2525,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F430-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏿‍🐰‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2526,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F430-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏿‍🐰‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2527,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F430-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏿‍🐰‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2528,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"women with bunny ears: light skin tone\",\n        \"hexcode\": \"1F46F-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"👯🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2459,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"women with bunny ears: medium-light skin tone\",\n        \"hexcode\": \"1F46F-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"👯🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2461,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"women with bunny ears: medium skin tone\",\n        \"hexcode\": \"1F46F-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"👯🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2463,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"women with bunny ears: medium-dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"👯🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2465,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"women with bunny ears: dark skin tone\",\n        \"hexcode\": \"1F46F-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"👯🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2467,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in steamy room\",\n    \"hexcode\": \"1F9D6\",\n    \"tags\": [\n      \"day\",\n      \"luxurious\",\n      \"pamper\",\n      \"person\",\n      \"relax\",\n      \"room\",\n      \"sauna\",\n      \"spa\",\n      \"steam\",\n      \"steambath\",\n      \"unwind\"\n    ],\n    \"emoji\": \"🧖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2529,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"person in steamy room: light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FB\",\n        \"emoji\": \"🧖🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2530,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in steamy room: medium-light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FC\",\n        \"emoji\": \"🧖🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2531,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in steamy room: medium skin tone\",\n        \"hexcode\": \"1F9D6-1F3FD\",\n        \"emoji\": \"🧖🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2532,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in steamy room: medium-dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FE\",\n        \"emoji\": \"🧖🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2533,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in steamy room: dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FF\",\n        \"emoji\": \"🧖🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2534,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in steamy room\",\n    \"hexcode\": \"1F9D6-200D-2642-FE0F\",\n    \"tags\": [\n      \"day\",\n      \"luxurious\",\n      \"man\",\n      \"pamper\",\n      \"relax\",\n      \"room\",\n      \"sauna\",\n      \"spa\",\n      \"steam\",\n      \"steambath\",\n      \"unwind\"\n    ],\n    \"emoji\": \"🧖‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2535,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man in steamy room: light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧖🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2537,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in steamy room: medium-light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧖🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2539,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in steamy room: medium skin tone\",\n        \"hexcode\": \"1F9D6-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧖🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2541,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in steamy room: medium-dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧖🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2543,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in steamy room: dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧖🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2545,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in steamy room\",\n    \"hexcode\": \"1F9D6-200D-2640-FE0F\",\n    \"tags\": [\n      \"day\",\n      \"luxurious\",\n      \"pamper\",\n      \"relax\",\n      \"room\",\n      \"sauna\",\n      \"spa\",\n      \"steam\",\n      \"steambath\",\n      \"unwind\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧖‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2547,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman in steamy room: light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧖🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2549,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in steamy room: medium-light skin tone\",\n        \"hexcode\": \"1F9D6-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧖🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2551,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in steamy room: medium skin tone\",\n        \"hexcode\": \"1F9D6-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧖🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2553,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in steamy room: medium-dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧖🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2555,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in steamy room: dark skin tone\",\n        \"hexcode\": \"1F9D6-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧖🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2557,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person climbing\",\n    \"hexcode\": \"1F9D7\",\n    \"tags\": [\n      \"climb\",\n      \"climber\",\n      \"climbing\",\n      \"mountain\",\n      \"person\",\n      \"rock\",\n      \"scale\",\n      \"up\"\n    ],\n    \"emoji\": \"🧗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2559,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"person climbing: light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FB\",\n        \"emoji\": \"🧗🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2560,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person climbing: medium-light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FC\",\n        \"emoji\": \"🧗🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2561,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person climbing: medium skin tone\",\n        \"hexcode\": \"1F9D7-1F3FD\",\n        \"emoji\": \"🧗🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2562,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person climbing: medium-dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FE\",\n        \"emoji\": \"🧗🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2563,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person climbing: dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FF\",\n        \"emoji\": \"🧗🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2564,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man climbing\",\n    \"hexcode\": \"1F9D7-200D-2642-FE0F\",\n    \"tags\": [\n      \"climb\",\n      \"climber\",\n      \"climbing\",\n      \"man\",\n      \"mountain\",\n      \"rock\",\n      \"scale\",\n      \"up\"\n    ],\n    \"emoji\": \"🧗‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2565,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man climbing: light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧗🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2567,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man climbing: medium-light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧗🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2569,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man climbing: medium skin tone\",\n        \"hexcode\": \"1F9D7-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧗🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2571,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man climbing: medium-dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧗🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2573,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man climbing: dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧗🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2575,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman climbing\",\n    \"hexcode\": \"1F9D7-200D-2640-FE0F\",\n    \"tags\": [\n      \"climb\",\n      \"climber\",\n      \"climbing\",\n      \"mountain\",\n      \"rock\",\n      \"scale\",\n      \"up\",\n      \"woman\"\n    ],\n    \"emoji\": \"🧗‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2577,\n    \"group\": 1,\n    \"subgroup\": 27,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman climbing: light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧗🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2579,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman climbing: medium-light skin tone\",\n        \"hexcode\": \"1F9D7-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧗🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2581,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman climbing: medium skin tone\",\n        \"hexcode\": \"1F9D7-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧗🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2583,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman climbing: medium-dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧗🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2585,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman climbing: dark skin tone\",\n        \"hexcode\": \"1F9D7-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧗🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2587,\n        \"group\": 1,\n        \"subgroup\": 27,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person fencing\",\n    \"hexcode\": \"1F93A\",\n    \"tags\": [\n      \"fencer\",\n      \"fencing\",\n      \"person\",\n      \"sword\"\n    ],\n    \"emoji\": \"🤺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2589,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3\n  },\n  {\n    \"label\": \"horse racing\",\n    \"hexcode\": \"1F3C7\",\n    \"tags\": [\n      \"horse\",\n      \"jockey\",\n      \"racehorse\",\n      \"racing\",\n      \"riding\",\n      \"sport\"\n    ],\n    \"emoji\": \"🏇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2590,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"horse racing: light skin tone\",\n        \"hexcode\": \"1F3C7-1F3FB\",\n        \"emoji\": \"🏇🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2591,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"horse racing: medium-light skin tone\",\n        \"hexcode\": \"1F3C7-1F3FC\",\n        \"emoji\": \"🏇🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2592,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"horse racing: medium skin tone\",\n        \"hexcode\": \"1F3C7-1F3FD\",\n        \"emoji\": \"🏇🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2593,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"horse racing: medium-dark skin tone\",\n        \"hexcode\": \"1F3C7-1F3FE\",\n        \"emoji\": \"🏇🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2594,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"horse racing: dark skin tone\",\n        \"hexcode\": \"1F3C7-1F3FF\",\n        \"emoji\": \"🏇🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2595,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"skier\",\n    \"hexcode\": \"26F7\",\n    \"tags\": [\n      \"ski\",\n      \"snow\"\n    ],\n    \"emoji\": \"⛷️\",\n    \"text\": \"⛷︎\",\n    \"type\": 0,\n    \"order\": 2597,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"snowboarder\",\n    \"hexcode\": \"1F3C2\",\n    \"tags\": [\n      \"ski\",\n      \"snow\",\n      \"snowboard\",\n      \"sport\"\n    ],\n    \"emoji\": \"🏂️\",\n    \"text\": \"🏂︎\",\n    \"type\": 1,\n    \"order\": 2598,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"snowboarder: light skin tone\",\n        \"hexcode\": \"1F3C2-1F3FB\",\n        \"emoji\": \"🏂🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2599,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"snowboarder: medium-light skin tone\",\n        \"hexcode\": \"1F3C2-1F3FC\",\n        \"emoji\": \"🏂🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2600,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"snowboarder: medium skin tone\",\n        \"hexcode\": \"1F3C2-1F3FD\",\n        \"emoji\": \"🏂🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2601,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"snowboarder: medium-dark skin tone\",\n        \"hexcode\": \"1F3C2-1F3FE\",\n        \"emoji\": \"🏂🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2602,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"snowboarder: dark skin tone\",\n        \"hexcode\": \"1F3C2-1F3FF\",\n        \"emoji\": \"🏂🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2603,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person golfing\",\n    \"hexcode\": \"1F3CC\",\n    \"tags\": [\n      \"ball\",\n      \"birdie\",\n      \"caddy\",\n      \"driving\",\n      \"golf\",\n      \"golfing\",\n      \"green\",\n      \"person\",\n      \"pga\",\n      \"putt\",\n      \"range\",\n      \"tee\"\n    ],\n    \"emoji\": \"🏌️\",\n    \"text\": \"🏌︎\",\n    \"type\": 0,\n    \"order\": 2605,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"person golfing: light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FB\",\n        \"emoji\": \"🏌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2606,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person golfing: medium-light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FC\",\n        \"emoji\": \"🏌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2607,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person golfing: medium skin tone\",\n        \"hexcode\": \"1F3CC-1F3FD\",\n        \"emoji\": \"🏌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2608,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person golfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FE\",\n        \"emoji\": \"🏌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2609,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person golfing: dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FF\",\n        \"emoji\": \"🏌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2610,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man golfing\",\n    \"hexcode\": \"1F3CC-FE0F-200D-2642-FE0F\",\n    \"tags\": [\n      \"ball\",\n      \"birdie\",\n      \"caddy\",\n      \"driving\",\n      \"golf\",\n      \"golfing\",\n      \"green\",\n      \"man\",\n      \"pga\",\n      \"putt\",\n      \"range\",\n      \"tee\"\n    ],\n    \"emoji\": \"🏌️‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2611,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man golfing: light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🏌🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2615,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man golfing: medium-light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🏌🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2617,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man golfing: medium skin tone\",\n        \"hexcode\": \"1F3CC-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🏌🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2619,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man golfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🏌🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2621,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man golfing: dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🏌🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2623,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman golfing\",\n    \"hexcode\": \"1F3CC-FE0F-200D-2640-FE0F\",\n    \"tags\": [\n      \"ball\",\n      \"birdie\",\n      \"caddy\",\n      \"driving\",\n      \"golf\",\n      \"golfing\",\n      \"green\",\n      \"pga\",\n      \"putt\",\n      \"range\",\n      \"tee\",\n      \"woman\"\n    ],\n    \"emoji\": \"🏌️‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2625,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman golfing: light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🏌🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2629,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman golfing: medium-light skin tone\",\n        \"hexcode\": \"1F3CC-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🏌🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2631,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman golfing: medium skin tone\",\n        \"hexcode\": \"1F3CC-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🏌🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2633,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman golfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🏌🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2635,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman golfing: dark skin tone\",\n        \"hexcode\": \"1F3CC-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🏌🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2637,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person surfing\",\n    \"hexcode\": \"1F3C4\",\n    \"tags\": [\n      \"beach\",\n      \"ocean\",\n      \"person\",\n      \"sport\",\n      \"surf\",\n      \"surfer\",\n      \"surfing\",\n      \"swell\",\n      \"waves\"\n    ],\n    \"emoji\": \"🏄️\",\n    \"text\": \"🏄︎\",\n    \"type\": 1,\n    \"order\": 2639,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person surfing: light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FB\",\n        \"emoji\": \"🏄🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2640,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person surfing: medium-light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FC\",\n        \"emoji\": \"🏄🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2641,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person surfing: medium skin tone\",\n        \"hexcode\": \"1F3C4-1F3FD\",\n        \"emoji\": \"🏄🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2642,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person surfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FE\",\n        \"emoji\": \"🏄🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2643,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person surfing: dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FF\",\n        \"emoji\": \"🏄🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2644,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man surfing\",\n    \"hexcode\": \"1F3C4-200D-2642-FE0F\",\n    \"tags\": [\n      \"beach\",\n      \"man\",\n      \"ocean\",\n      \"sport\",\n      \"surf\",\n      \"surfer\",\n      \"surfing\",\n      \"swell\",\n      \"waves\"\n    ],\n    \"emoji\": \"🏄‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2645,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man surfing: light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🏄🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2647,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man surfing: medium-light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🏄🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2649,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man surfing: medium skin tone\",\n        \"hexcode\": \"1F3C4-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🏄🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2651,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man surfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🏄🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2653,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man surfing: dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🏄🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2655,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman surfing\",\n    \"hexcode\": \"1F3C4-200D-2640-FE0F\",\n    \"tags\": [\n      \"beach\",\n      \"ocean\",\n      \"person\",\n      \"sport\",\n      \"surf\",\n      \"surfer\",\n      \"surfing\",\n      \"swell\",\n      \"waves\"\n    ],\n    \"emoji\": \"🏄‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2657,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman surfing: light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🏄🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2659,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman surfing: medium-light skin tone\",\n        \"hexcode\": \"1F3C4-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🏄🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2661,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman surfing: medium skin tone\",\n        \"hexcode\": \"1F3C4-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🏄🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2663,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman surfing: medium-dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🏄🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2665,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman surfing: dark skin tone\",\n        \"hexcode\": \"1F3C4-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🏄🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2667,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person rowing boat\",\n    \"hexcode\": \"1F6A3\",\n    \"tags\": [\n      \"boat\",\n      \"canoe\",\n      \"cruise\",\n      \"fishing\",\n      \"lake\",\n      \"oar\",\n      \"paddle\",\n      \"person\",\n      \"raft\",\n      \"river\",\n      \"row\",\n      \"rowboat\",\n      \"rowing\"\n    ],\n    \"emoji\": \"🚣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2669,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"person rowing boat: light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FB\",\n        \"emoji\": \"🚣🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2670,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person rowing boat: medium-light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FC\",\n        \"emoji\": \"🚣🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2671,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person rowing boat: medium skin tone\",\n        \"hexcode\": \"1F6A3-1F3FD\",\n        \"emoji\": \"🚣🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2672,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person rowing boat: medium-dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FE\",\n        \"emoji\": \"🚣🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2673,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person rowing boat: dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FF\",\n        \"emoji\": \"🚣🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2674,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man rowing boat\",\n    \"hexcode\": \"1F6A3-200D-2642-FE0F\",\n    \"tags\": [\n      \"boat\",\n      \"canoe\",\n      \"cruise\",\n      \"fishing\",\n      \"lake\",\n      \"man\",\n      \"oar\",\n      \"paddle\",\n      \"raft\",\n      \"river\",\n      \"row\",\n      \"rowboat\",\n      \"rowing\"\n    ],\n    \"emoji\": \"🚣‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2675,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man rowing boat: light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🚣🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2677,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man rowing boat: medium-light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🚣🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2679,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man rowing boat: medium skin tone\",\n        \"hexcode\": \"1F6A3-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🚣🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2681,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man rowing boat: medium-dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🚣🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2683,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man rowing boat: dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🚣🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2685,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman rowing boat\",\n    \"hexcode\": \"1F6A3-200D-2640-FE0F\",\n    \"tags\": [\n      \"boat\",\n      \"canoe\",\n      \"cruise\",\n      \"fishing\",\n      \"lake\",\n      \"oar\",\n      \"paddle\",\n      \"raft\",\n      \"river\",\n      \"row\",\n      \"rowboat\",\n      \"rowing\",\n      \"woman\"\n    ],\n    \"emoji\": \"🚣‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2687,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman rowing boat: light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🚣🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2689,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman rowing boat: medium-light skin tone\",\n        \"hexcode\": \"1F6A3-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🚣🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2691,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman rowing boat: medium skin tone\",\n        \"hexcode\": \"1F6A3-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🚣🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2693,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman rowing boat: medium-dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🚣🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2695,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman rowing boat: dark skin tone\",\n        \"hexcode\": \"1F6A3-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🚣🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2697,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person swimming\",\n    \"hexcode\": \"1F3CA\",\n    \"tags\": [\n      \"freestyle\",\n      \"person\",\n      \"sport\",\n      \"swim\",\n      \"swimmer\",\n      \"swimming\",\n      \"triathlon\"\n    ],\n    \"emoji\": \"🏊️\",\n    \"text\": \"🏊︎\",\n    \"type\": 1,\n    \"order\": 2699,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person swimming: light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FB\",\n        \"emoji\": \"🏊🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2700,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person swimming: medium-light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FC\",\n        \"emoji\": \"🏊🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2701,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person swimming: medium skin tone\",\n        \"hexcode\": \"1F3CA-1F3FD\",\n        \"emoji\": \"🏊🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2702,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person swimming: medium-dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FE\",\n        \"emoji\": \"🏊🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2703,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person swimming: dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FF\",\n        \"emoji\": \"🏊🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2704,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man swimming\",\n    \"hexcode\": \"1F3CA-200D-2642-FE0F\",\n    \"tags\": [\n      \"freestyle\",\n      \"man\",\n      \"sport\",\n      \"swim\",\n      \"swimmer\",\n      \"swimming\",\n      \"triathlon\"\n    ],\n    \"emoji\": \"🏊‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2705,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man swimming: light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🏊🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2707,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man swimming: medium-light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🏊🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2709,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man swimming: medium skin tone\",\n        \"hexcode\": \"1F3CA-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🏊🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2711,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man swimming: medium-dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🏊🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2713,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man swimming: dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🏊🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2715,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman swimming\",\n    \"hexcode\": \"1F3CA-200D-2640-FE0F\",\n    \"tags\": [\n      \"freestyle\",\n      \"man\",\n      \"sport\",\n      \"swim\",\n      \"swimmer\",\n      \"swimming\",\n      \"triathlon\"\n    ],\n    \"emoji\": \"🏊‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2717,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman swimming: light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🏊🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2719,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman swimming: medium-light skin tone\",\n        \"hexcode\": \"1F3CA-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🏊🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2721,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman swimming: medium skin tone\",\n        \"hexcode\": \"1F3CA-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🏊🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2723,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman swimming: medium-dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🏊🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2725,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman swimming: dark skin tone\",\n        \"hexcode\": \"1F3CA-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🏊🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2727,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person bouncing ball\",\n    \"hexcode\": \"26F9\",\n    \"tags\": [\n      \"athletic\",\n      \"ball\",\n      \"basketball\",\n      \"bouncing\",\n      \"championship\",\n      \"dribble\",\n      \"net\",\n      \"person\",\n      \"player\",\n      \"throw\"\n    ],\n    \"emoji\": \"⛹️\",\n    \"text\": \"⛹︎\",\n    \"type\": 0,\n    \"order\": 2730,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"person bouncing ball: light skin tone\",\n        \"hexcode\": \"26F9-1F3FB\",\n        \"emoji\": \"⛹🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2731,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person bouncing ball: medium-light skin tone\",\n        \"hexcode\": \"26F9-1F3FC\",\n        \"emoji\": \"⛹🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2732,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person bouncing ball: medium skin tone\",\n        \"hexcode\": \"26F9-1F3FD\",\n        \"emoji\": \"⛹🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2733,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person bouncing ball: medium-dark skin tone\",\n        \"hexcode\": \"26F9-1F3FE\",\n        \"emoji\": \"⛹🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2734,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person bouncing ball: dark skin tone\",\n        \"hexcode\": \"26F9-1F3FF\",\n        \"emoji\": \"⛹🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2735,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man bouncing ball\",\n    \"hexcode\": \"26F9-FE0F-200D-2642-FE0F\",\n    \"tags\": [\n      \"athletic\",\n      \"ball\",\n      \"basketball\",\n      \"bouncing\",\n      \"championship\",\n      \"dribble\",\n      \"man\",\n      \"net\",\n      \"player\",\n      \"throw\"\n    ],\n    \"emoji\": \"⛹️‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2736,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man bouncing ball: light skin tone\",\n        \"hexcode\": \"26F9-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"⛹🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2740,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man bouncing ball: medium-light skin tone\",\n        \"hexcode\": \"26F9-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"⛹🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2742,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man bouncing ball: medium skin tone\",\n        \"hexcode\": \"26F9-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"⛹🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2744,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man bouncing ball: medium-dark skin tone\",\n        \"hexcode\": \"26F9-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"⛹🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2746,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man bouncing ball: dark skin tone\",\n        \"hexcode\": \"26F9-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"⛹🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2748,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman bouncing ball\",\n    \"hexcode\": \"26F9-FE0F-200D-2640-FE0F\",\n    \"tags\": [\n      \"athletic\",\n      \"ball\",\n      \"basketball\",\n      \"bouncing\",\n      \"championship\",\n      \"dribble\",\n      \"net\",\n      \"player\",\n      \"throw\",\n      \"woman\"\n    ],\n    \"emoji\": \"⛹️‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2750,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman bouncing ball: light skin tone\",\n        \"hexcode\": \"26F9-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"⛹🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2754,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman bouncing ball: medium-light skin tone\",\n        \"hexcode\": \"26F9-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"⛹🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2756,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman bouncing ball: medium skin tone\",\n        \"hexcode\": \"26F9-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"⛹🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2758,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman bouncing ball: medium-dark skin tone\",\n        \"hexcode\": \"26F9-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"⛹🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2760,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman bouncing ball: dark skin tone\",\n        \"hexcode\": \"26F9-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"⛹🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2762,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person lifting weights\",\n    \"hexcode\": \"1F3CB\",\n    \"tags\": [\n      \"barbell\",\n      \"bodybuilder\",\n      \"deadlift\",\n      \"lifter\",\n      \"lifting\",\n      \"person\",\n      \"powerlifting\",\n      \"weight\",\n      \"weightlifter\",\n      \"weights\",\n      \"workout\"\n    ],\n    \"emoji\": \"🏋️\",\n    \"text\": \"🏋︎\",\n    \"type\": 0,\n    \"order\": 2765,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 0.7,\n    \"skins\": [\n      {\n        \"label\": \"person lifting weights: light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FB\",\n        \"emoji\": \"🏋🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2766,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person lifting weights: medium-light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FC\",\n        \"emoji\": \"🏋🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2767,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person lifting weights: medium skin tone\",\n        \"hexcode\": \"1F3CB-1F3FD\",\n        \"emoji\": \"🏋🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2768,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person lifting weights: medium-dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FE\",\n        \"emoji\": \"🏋🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2769,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person lifting weights: dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FF\",\n        \"emoji\": \"🏋🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2770,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 2,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man lifting weights\",\n    \"hexcode\": \"1F3CB-FE0F-200D-2642-FE0F\",\n    \"tags\": [\n      \"barbell\",\n      \"bodybuilder\",\n      \"deadlift\",\n      \"lifter\",\n      \"lifting\",\n      \"man\",\n      \"powerlifting\",\n      \"weight\",\n      \"weightlifter\",\n      \"weights\",\n      \"workout\"\n    ],\n    \"emoji\": \"🏋️‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2771,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man lifting weights: light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🏋🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2775,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man lifting weights: medium-light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🏋🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2777,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man lifting weights: medium skin tone\",\n        \"hexcode\": \"1F3CB-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🏋🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2779,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man lifting weights: medium-dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🏋🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2781,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man lifting weights: dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🏋🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2783,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman lifting weights\",\n    \"hexcode\": \"1F3CB-FE0F-200D-2640-FE0F\",\n    \"tags\": [\n      \"barbell\",\n      \"bodybuilder\",\n      \"deadlift\",\n      \"lifter\",\n      \"lifting\",\n      \"powerlifting\",\n      \"weight\",\n      \"weightlifter\",\n      \"weights\",\n      \"woman\",\n      \"workout\"\n    ],\n    \"emoji\": \"🏋️‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2785,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman lifting weights: light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🏋🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2789,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman lifting weights: medium-light skin tone\",\n        \"hexcode\": \"1F3CB-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🏋🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2791,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman lifting weights: medium skin tone\",\n        \"hexcode\": \"1F3CB-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🏋🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2793,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman lifting weights: medium-dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🏋🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2795,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman lifting weights: dark skin tone\",\n        \"hexcode\": \"1F3CB-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🏋🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2797,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person biking\",\n    \"hexcode\": \"1F6B4\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"person\",\n      \"riding\",\n      \"sport\"\n    ],\n    \"emoji\": \"🚴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2799,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"person biking: light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FB\",\n        \"emoji\": \"🚴🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2800,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FC\",\n        \"emoji\": \"🚴🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2801,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person biking: medium skin tone\",\n        \"hexcode\": \"1F6B4-1F3FD\",\n        \"emoji\": \"🚴🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2802,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FE\",\n        \"emoji\": \"🚴🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2803,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person biking: dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FF\",\n        \"emoji\": \"🚴🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2804,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man biking\",\n    \"hexcode\": \"1F6B4-200D-2642-FE0F\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"man\",\n      \"riding\",\n      \"sport\"\n    ],\n    \"emoji\": \"🚴‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2805,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man biking: light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🚴🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2807,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🚴🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2809,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man biking: medium skin tone\",\n        \"hexcode\": \"1F6B4-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🚴🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2811,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🚴🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2813,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man biking: dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🚴🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2815,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman biking\",\n    \"hexcode\": \"1F6B4-200D-2640-FE0F\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"riding\",\n      \"sport\",\n      \"woman\"\n    ],\n    \"emoji\": \"🚴‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2817,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman biking: light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🚴🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2819,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B4-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🚴🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2821,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman biking: medium skin tone\",\n        \"hexcode\": \"1F6B4-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🚴🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2823,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🚴🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2825,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman biking: dark skin tone\",\n        \"hexcode\": \"1F6B4-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🚴🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2827,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person mountain biking\",\n    \"hexcode\": \"1F6B5\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"mountain\",\n      \"person\",\n      \"riding\",\n      \"sport\"\n    ],\n    \"emoji\": \"🚵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2829,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"person mountain biking: light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FB\",\n        \"emoji\": \"🚵🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2830,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person mountain biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FC\",\n        \"emoji\": \"🚵🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2831,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person mountain biking: medium skin tone\",\n        \"hexcode\": \"1F6B5-1F3FD\",\n        \"emoji\": \"🚵🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2832,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person mountain biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FE\",\n        \"emoji\": \"🚵🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2833,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person mountain biking: dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FF\",\n        \"emoji\": \"🚵🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2834,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man mountain biking\",\n    \"hexcode\": \"1F6B5-200D-2642-FE0F\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"man\",\n      \"mountain\",\n      \"riding\",\n      \"sport\"\n    ],\n    \"emoji\": \"🚵‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2835,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man mountain biking: light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🚵🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2837,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man mountain biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🚵🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2839,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man mountain biking: medium skin tone\",\n        \"hexcode\": \"1F6B5-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🚵🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2841,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man mountain biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🚵🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2843,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man mountain biking: dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🚵🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2845,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman mountain biking\",\n    \"hexcode\": \"1F6B5-200D-2640-FE0F\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicyclist\",\n      \"bike\",\n      \"biking\",\n      \"cycle\",\n      \"cyclist\",\n      \"mountain\",\n      \"riding\",\n      \"sport\",\n      \"woman\"\n    ],\n    \"emoji\": \"🚵‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2847,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman mountain biking: light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🚵🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2849,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman mountain biking: medium-light skin tone\",\n        \"hexcode\": \"1F6B5-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🚵🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2851,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman mountain biking: medium skin tone\",\n        \"hexcode\": \"1F6B5-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🚵🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2853,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman mountain biking: medium-dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🚵🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2855,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman mountain biking: dark skin tone\",\n        \"hexcode\": \"1F6B5-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🚵🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2857,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person cartwheeling\",\n    \"hexcode\": \"1F938\",\n    \"tags\": [\n      \"active\",\n      \"cartwheel\",\n      \"cartwheeling\",\n      \"excited\",\n      \"flip\",\n      \"gymnastics\",\n      \"happy\",\n      \"person\",\n      \"somersault\"\n    ],\n    \"emoji\": \"🤸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2859,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person cartwheeling: light skin tone\",\n        \"hexcode\": \"1F938-1F3FB\",\n        \"emoji\": \"🤸🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2860,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person cartwheeling: medium-light skin tone\",\n        \"hexcode\": \"1F938-1F3FC\",\n        \"emoji\": \"🤸🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2861,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person cartwheeling: medium skin tone\",\n        \"hexcode\": \"1F938-1F3FD\",\n        \"emoji\": \"🤸🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2862,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person cartwheeling: medium-dark skin tone\",\n        \"hexcode\": \"1F938-1F3FE\",\n        \"emoji\": \"🤸🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2863,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person cartwheeling: dark skin tone\",\n        \"hexcode\": \"1F938-1F3FF\",\n        \"emoji\": \"🤸🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2864,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man cartwheeling\",\n    \"hexcode\": \"1F938-200D-2642-FE0F\",\n    \"tags\": [\n      \"active\",\n      \"cartwheel\",\n      \"cartwheeling\",\n      \"excited\",\n      \"flip\",\n      \"gymnastics\",\n      \"happy\",\n      \"man\",\n      \"somersault\"\n    ],\n    \"emoji\": \"🤸‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2865,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man cartwheeling: light skin tone\",\n        \"hexcode\": \"1F938-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤸🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2867,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man cartwheeling: medium-light skin tone\",\n        \"hexcode\": \"1F938-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤸🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2869,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man cartwheeling: medium skin tone\",\n        \"hexcode\": \"1F938-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤸🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2871,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man cartwheeling: medium-dark skin tone\",\n        \"hexcode\": \"1F938-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤸🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2873,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man cartwheeling: dark skin tone\",\n        \"hexcode\": \"1F938-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤸🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2875,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman cartwheeling\",\n    \"hexcode\": \"1F938-200D-2640-FE0F\",\n    \"tags\": [\n      \"active\",\n      \"cartwheel\",\n      \"cartwheeling\",\n      \"excited\",\n      \"flip\",\n      \"gymnastics\",\n      \"happy\",\n      \"somersault\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤸‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2877,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman cartwheeling: light skin tone\",\n        \"hexcode\": \"1F938-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤸🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2879,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman cartwheeling: medium-light skin tone\",\n        \"hexcode\": \"1F938-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤸🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2881,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman cartwheeling: medium skin tone\",\n        \"hexcode\": \"1F938-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤸🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2883,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman cartwheeling: medium-dark skin tone\",\n        \"hexcode\": \"1F938-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤸🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2885,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman cartwheeling: dark skin tone\",\n        \"hexcode\": \"1F938-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤸🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2887,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"people wrestling\",\n    \"hexcode\": \"1F93C\",\n    \"tags\": [\n      \"combat\",\n      \"duel\",\n      \"grapple\",\n      \"people\",\n      \"ring\",\n      \"tournament\",\n      \"wrestle\",\n      \"wrestling\"\n    ],\n    \"emoji\": \"🤼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2889,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"people wrestling: light skin tone\",\n        \"hexcode\": \"1F93C-1F3FB\",\n        \"emoji\": \"🤼🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2890,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"people wrestling: medium-light skin tone\",\n        \"hexcode\": \"1F93C-1F3FC\",\n        \"emoji\": \"🤼🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2891,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"people wrestling: medium skin tone\",\n        \"hexcode\": \"1F93C-1F3FD\",\n        \"emoji\": \"🤼🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2892,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"people wrestling: medium-dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FE\",\n        \"emoji\": \"🤼🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2893,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"people wrestling: dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FF\",\n        \"emoji\": \"🤼🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2894,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"people wrestling: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1FAEF-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏻‍🫯‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2919,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"people wrestling: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1FAEF-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏻‍🫯‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2920,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"people wrestling: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1FAEF-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏻‍🫯‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2921,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"people wrestling: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1FAEF-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏻‍🫯‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2922,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1FAEF-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏼‍🫯‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2923,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1FAEF-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏼‍🫯‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2924,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1FAEF-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏼‍🫯‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2925,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1FAEF-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏼‍🫯‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2926,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1FAEF-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏽‍🫯‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2927,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1FAEF-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏽‍🫯‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2928,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1FAEF-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏽‍🫯‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2929,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1FAEF-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏽‍🫯‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2930,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1FAEF-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏾‍🫯‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2931,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1FAEF-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏾‍🫯‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2932,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1FAEF-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏾‍🫯‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2933,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"people wrestling: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1FAEF-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏾‍🫯‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2934,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"people wrestling: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1FAEF-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏿‍🫯‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2935,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"people wrestling: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1FAEF-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏿‍🫯‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2936,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"people wrestling: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1FAEF-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏿‍🫯‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2937,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"people wrestling: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1FAEF-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏿‍🫯‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2938,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"men wrestling\",\n    \"hexcode\": \"1F93C-200D-2642-FE0F\",\n    \"tags\": [\n      \"combat\",\n      \"duel\",\n      \"grapple\",\n      \"men\",\n      \"ring\",\n      \"tournament\",\n      \"wrestle\",\n      \"wrestling\"\n    ],\n    \"emoji\": \"🤼‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2895,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"men wrestling: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1FAEF-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏻‍🫯‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2939,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"men wrestling: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1FAEF-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏻‍🫯‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2940,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"men wrestling: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1FAEF-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏻‍🫯‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2941,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"men wrestling: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1FAEF-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏻‍🫯‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2942,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1FAEF-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏼‍🫯‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2943,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1FAEF-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏼‍🫯‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2944,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1FAEF-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏼‍🫯‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2945,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1FAEF-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏼‍🫯‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2946,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1FAEF-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏽‍🫯‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2947,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1FAEF-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏽‍🫯‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2948,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1FAEF-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏽‍🫯‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2949,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1FAEF-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏽‍🫯‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2950,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1FAEF-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏾‍🫯‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2951,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1FAEF-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏾‍🫯‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2952,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1FAEF-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏾‍🫯‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2953,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"men wrestling: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1FAEF-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏾‍🫯‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2954,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"men wrestling: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1FAEF-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏿‍🫯‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2955,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"men wrestling: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1FAEF-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏿‍🫯‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2956,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"men wrestling: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1FAEF-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏿‍🫯‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2957,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"men wrestling: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1FAEF-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏿‍🫯‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2958,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"men wrestling: light skin tone\",\n        \"hexcode\": \"1F93C-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤼🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2897,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"men wrestling: medium-light skin tone\",\n        \"hexcode\": \"1F93C-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤼🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2899,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"men wrestling: medium skin tone\",\n        \"hexcode\": \"1F93C-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤼🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2901,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"men wrestling: medium-dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤼🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2903,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"men wrestling: dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤼🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2905,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"women wrestling\",\n    \"hexcode\": \"1F93C-200D-2640-FE0F\",\n    \"tags\": [\n      \"combat\",\n      \"duel\",\n      \"grapple\",\n      \"ring\",\n      \"tournament\",\n      \"women\",\n      \"wrestle\",\n      \"wrestling\"\n    ],\n    \"emoji\": \"🤼‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2907,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"women wrestling: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1FAEF-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏻‍🫯‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2959,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"women wrestling: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1FAEF-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏻‍🫯‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2960,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"women wrestling: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1FAEF-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏻‍🫯‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2961,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"women wrestling: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1FAEF-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏻‍🫯‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2962,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1FAEF-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏼‍🫯‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2963,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1FAEF-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏼‍🫯‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2964,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1FAEF-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏼‍🫯‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2965,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1FAEF-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏼‍🫯‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2966,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1FAEF-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏽‍🫯‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2967,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1FAEF-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏽‍🫯‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2968,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1FAEF-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏽‍🫯‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2969,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1FAEF-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏽‍🫯‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2970,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1FAEF-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏾‍🫯‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2971,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1FAEF-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏾‍🫯‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2972,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1FAEF-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏾‍🫯‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2973,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"women wrestling: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1FAEF-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏾‍🫯‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2974,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"women wrestling: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1FAEF-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏿‍🫯‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2975,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"women wrestling: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1FAEF-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏿‍🫯‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2976,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"women wrestling: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1FAEF-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏿‍🫯‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2977,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"women wrestling: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1FAEF-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏿‍🫯‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2978,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"women wrestling: light skin tone\",\n        \"hexcode\": \"1F93C-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤼🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2909,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"women wrestling: medium-light skin tone\",\n        \"hexcode\": \"1F93C-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤼🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2911,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"women wrestling: medium skin tone\",\n        \"hexcode\": \"1F93C-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤼🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2913,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"women wrestling: medium-dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤼🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2915,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"women wrestling: dark skin tone\",\n        \"hexcode\": \"1F93C-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤼🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2917,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 17,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person playing water polo\",\n    \"hexcode\": \"1F93D\",\n    \"tags\": [\n      \"person\",\n      \"playing\",\n      \"polo\",\n      \"sport\",\n      \"swimming\",\n      \"water\",\n      \"waterpolo\"\n    ],\n    \"emoji\": \"🤽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2979,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person playing water polo: light skin tone\",\n        \"hexcode\": \"1F93D-1F3FB\",\n        \"emoji\": \"🤽🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2980,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person playing water polo: medium-light skin tone\",\n        \"hexcode\": \"1F93D-1F3FC\",\n        \"emoji\": \"🤽🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2981,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person playing water polo: medium skin tone\",\n        \"hexcode\": \"1F93D-1F3FD\",\n        \"emoji\": \"🤽🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2982,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person playing water polo: medium-dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FE\",\n        \"emoji\": \"🤽🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2983,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person playing water polo: dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FF\",\n        \"emoji\": \"🤽🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2984,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man playing water polo\",\n    \"hexcode\": \"1F93D-200D-2642-FE0F\",\n    \"tags\": [\n      \"man\",\n      \"playing\",\n      \"polo\",\n      \"sport\",\n      \"swimming\",\n      \"water\",\n      \"waterpolo\"\n    ],\n    \"emoji\": \"🤽‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2985,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man playing water polo: light skin tone\",\n        \"hexcode\": \"1F93D-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤽🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2987,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man playing water polo: medium-light skin tone\",\n        \"hexcode\": \"1F93D-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤽🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2989,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man playing water polo: medium skin tone\",\n        \"hexcode\": \"1F93D-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤽🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2991,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man playing water polo: medium-dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤽🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2993,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man playing water polo: dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤽🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2995,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman playing water polo\",\n    \"hexcode\": \"1F93D-200D-2640-FE0F\",\n    \"tags\": [\n      \"playing\",\n      \"polo\",\n      \"sport\",\n      \"swimming\",\n      \"water\",\n      \"waterpolo\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤽‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 2997,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman playing water polo: light skin tone\",\n        \"hexcode\": \"1F93D-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤽🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 2999,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman playing water polo: medium-light skin tone\",\n        \"hexcode\": \"1F93D-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤽🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3001,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman playing water polo: medium skin tone\",\n        \"hexcode\": \"1F93D-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤽🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3003,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman playing water polo: medium-dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤽🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3005,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman playing water polo: dark skin tone\",\n        \"hexcode\": \"1F93D-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤽🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3007,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person playing handball\",\n    \"hexcode\": \"1F93E\",\n    \"tags\": [\n      \"athletics\",\n      \"ball\",\n      \"catch\",\n      \"chuck\",\n      \"handball\",\n      \"hurl\",\n      \"lob\",\n      \"person\",\n      \"pitch\",\n      \"playing\",\n      \"sport\",\n      \"throw\",\n      \"toss\"\n    ],\n    \"emoji\": \"🤾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3009,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person playing handball: light skin tone\",\n        \"hexcode\": \"1F93E-1F3FB\",\n        \"emoji\": \"🤾🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3010,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person playing handball: medium-light skin tone\",\n        \"hexcode\": \"1F93E-1F3FC\",\n        \"emoji\": \"🤾🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3011,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person playing handball: medium skin tone\",\n        \"hexcode\": \"1F93E-1F3FD\",\n        \"emoji\": \"🤾🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3012,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person playing handball: medium-dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FE\",\n        \"emoji\": \"🤾🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3013,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person playing handball: dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FF\",\n        \"emoji\": \"🤾🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3014,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man playing handball\",\n    \"hexcode\": \"1F93E-200D-2642-FE0F\",\n    \"tags\": [\n      \"athletics\",\n      \"ball\",\n      \"catch\",\n      \"chuck\",\n      \"handball\",\n      \"hurl\",\n      \"lob\",\n      \"man\",\n      \"pitch\",\n      \"playing\",\n      \"sport\",\n      \"throw\",\n      \"toss\"\n    ],\n    \"emoji\": \"🤾‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3015,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man playing handball: light skin tone\",\n        \"hexcode\": \"1F93E-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤾🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3017,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man playing handball: medium-light skin tone\",\n        \"hexcode\": \"1F93E-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤾🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3019,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man playing handball: medium skin tone\",\n        \"hexcode\": \"1F93E-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤾🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3021,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man playing handball: medium-dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤾🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3023,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man playing handball: dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤾🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3025,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman playing handball\",\n    \"hexcode\": \"1F93E-200D-2640-FE0F\",\n    \"tags\": [\n      \"athletics\",\n      \"ball\",\n      \"catch\",\n      \"chuck\",\n      \"handball\",\n      \"hurl\",\n      \"lob\",\n      \"pitch\",\n      \"playing\",\n      \"sport\",\n      \"throw\",\n      \"toss\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤾‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3027,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman playing handball: light skin tone\",\n        \"hexcode\": \"1F93E-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤾🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3029,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman playing handball: medium-light skin tone\",\n        \"hexcode\": \"1F93E-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤾🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3031,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman playing handball: medium skin tone\",\n        \"hexcode\": \"1F93E-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤾🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3033,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman playing handball: medium-dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤾🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3035,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman playing handball: dark skin tone\",\n        \"hexcode\": \"1F93E-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤾🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3037,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person juggling\",\n    \"hexcode\": \"1F939\",\n    \"tags\": [\n      \"act\",\n      \"balance\",\n      \"balancing\",\n      \"handle\",\n      \"juggle\",\n      \"juggling\",\n      \"manage\",\n      \"multitask\",\n      \"person\",\n      \"skill\"\n    ],\n    \"emoji\": \"🤹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3039,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 3,\n    \"skins\": [\n      {\n        \"label\": \"person juggling: light skin tone\",\n        \"hexcode\": \"1F939-1F3FB\",\n        \"emoji\": \"🤹🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3040,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person juggling: medium-light skin tone\",\n        \"hexcode\": \"1F939-1F3FC\",\n        \"emoji\": \"🤹🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3041,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person juggling: medium skin tone\",\n        \"hexcode\": \"1F939-1F3FD\",\n        \"emoji\": \"🤹🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3042,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person juggling: medium-dark skin tone\",\n        \"hexcode\": \"1F939-1F3FE\",\n        \"emoji\": \"🤹🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3043,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person juggling: dark skin tone\",\n        \"hexcode\": \"1F939-1F3FF\",\n        \"emoji\": \"🤹🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3044,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 3,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man juggling\",\n    \"hexcode\": \"1F939-200D-2642-FE0F\",\n    \"tags\": [\n      \"act\",\n      \"balance\",\n      \"balancing\",\n      \"handle\",\n      \"juggle\",\n      \"juggling\",\n      \"man\",\n      \"manage\",\n      \"multitask\",\n      \"skill\"\n    ],\n    \"emoji\": \"🤹‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3045,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man juggling: light skin tone\",\n        \"hexcode\": \"1F939-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🤹🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3047,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man juggling: medium-light skin tone\",\n        \"hexcode\": \"1F939-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🤹🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3049,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man juggling: medium skin tone\",\n        \"hexcode\": \"1F939-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🤹🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3051,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man juggling: medium-dark skin tone\",\n        \"hexcode\": \"1F939-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🤹🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3053,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man juggling: dark skin tone\",\n        \"hexcode\": \"1F939-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🤹🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3055,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman juggling\",\n    \"hexcode\": \"1F939-200D-2640-FE0F\",\n    \"tags\": [\n      \"act\",\n      \"balance\",\n      \"balancing\",\n      \"handle\",\n      \"juggle\",\n      \"juggling\",\n      \"manage\",\n      \"multitask\",\n      \"skill\",\n      \"woman\"\n    ],\n    \"emoji\": \"🤹‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3057,\n    \"group\": 1,\n    \"subgroup\": 28,\n    \"version\": 4,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman juggling: light skin tone\",\n        \"hexcode\": \"1F939-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🤹🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3059,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman juggling: medium-light skin tone\",\n        \"hexcode\": \"1F939-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🤹🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3061,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman juggling: medium skin tone\",\n        \"hexcode\": \"1F939-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🤹🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3063,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman juggling: medium-dark skin tone\",\n        \"hexcode\": \"1F939-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🤹🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3065,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman juggling: dark skin tone\",\n        \"hexcode\": \"1F939-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🤹🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3067,\n        \"group\": 1,\n        \"subgroup\": 28,\n        \"version\": 4,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in lotus position\",\n    \"hexcode\": \"1F9D8\",\n    \"tags\": [\n      \"cross\",\n      \"legged\",\n      \"legs\",\n      \"lotus\",\n      \"meditation\",\n      \"peace\",\n      \"person\",\n      \"position\",\n      \"relax\",\n      \"serenity\",\n      \"yoga\",\n      \"yogi\",\n      \"zen\"\n    ],\n    \"emoji\": \"🧘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3069,\n    \"group\": 1,\n    \"subgroup\": 29,\n    \"version\": 5,\n    \"skins\": [\n      {\n        \"label\": \"person in lotus position: light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FB\",\n        \"emoji\": \"🧘🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3070,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in lotus position: medium-light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FC\",\n        \"emoji\": \"🧘🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3071,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in lotus position: medium skin tone\",\n        \"hexcode\": \"1F9D8-1F3FD\",\n        \"emoji\": \"🧘🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3072,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in lotus position: medium-dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FE\",\n        \"emoji\": \"🧘🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3073,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in lotus position: dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FF\",\n        \"emoji\": \"🧘🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3074,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"man in lotus position\",\n    \"hexcode\": \"1F9D8-200D-2642-FE0F\",\n    \"tags\": [\n      \"cross\",\n      \"legged\",\n      \"legs\",\n      \"lotus\",\n      \"man\",\n      \"meditation\",\n      \"peace\",\n      \"position\",\n      \"relax\",\n      \"serenity\",\n      \"yoga\",\n      \"yogi\",\n      \"zen\"\n    ],\n    \"emoji\": \"🧘‍♂️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3075,\n    \"group\": 1,\n    \"subgroup\": 29,\n    \"version\": 5,\n    \"gender\": 1,\n    \"skins\": [\n      {\n        \"label\": \"man in lotus position: light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FB-200D-2642-FE0F\",\n        \"emoji\": \"🧘🏻‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3077,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"man in lotus position: medium-light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FC-200D-2642-FE0F\",\n        \"emoji\": \"🧘🏼‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3079,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"man in lotus position: medium skin tone\",\n        \"hexcode\": \"1F9D8-1F3FD-200D-2642-FE0F\",\n        \"emoji\": \"🧘🏽‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3081,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"man in lotus position: medium-dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FE-200D-2642-FE0F\",\n        \"emoji\": \"🧘🏾‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3083,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"man in lotus position: dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FF-200D-2642-FE0F\",\n        \"emoji\": \"🧘🏿‍♂️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3085,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"woman in lotus position\",\n    \"hexcode\": \"1F9D8-200D-2640-FE0F\",\n    \"tags\": [\n      \"cross\",\n      \"legged\",\n      \"legs\",\n      \"lotus\",\n      \"meditation\",\n      \"peace\",\n      \"position\",\n      \"relax\",\n      \"serenity\",\n      \"woman\",\n      \"yoga\",\n      \"yogi\",\n      \"zen\"\n    ],\n    \"emoji\": \"🧘‍♀️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3087,\n    \"group\": 1,\n    \"subgroup\": 29,\n    \"version\": 5,\n    \"gender\": 0,\n    \"skins\": [\n      {\n        \"label\": \"woman in lotus position: light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FB-200D-2640-FE0F\",\n        \"emoji\": \"🧘🏻‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3089,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman in lotus position: medium-light skin tone\",\n        \"hexcode\": \"1F9D8-1F3FC-200D-2640-FE0F\",\n        \"emoji\": \"🧘🏼‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3091,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman in lotus position: medium skin tone\",\n        \"hexcode\": \"1F9D8-1F3FD-200D-2640-FE0F\",\n        \"emoji\": \"🧘🏽‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3093,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman in lotus position: medium-dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FE-200D-2640-FE0F\",\n        \"emoji\": \"🧘🏾‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3095,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman in lotus position: dark skin tone\",\n        \"hexcode\": \"1F9D8-1F3FF-200D-2640-FE0F\",\n        \"emoji\": \"🧘🏿‍♀️\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3097,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 5,\n        \"gender\": 0,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person taking bath\",\n    \"hexcode\": \"1F6C0\",\n    \"tags\": [\n      \"bath\",\n      \"bathtub\",\n      \"person\",\n      \"taking\",\n      \"tub\"\n    ],\n    \"emoji\": \"🛀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3099,\n    \"group\": 1,\n    \"subgroup\": 29,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"person taking bath: light skin tone\",\n        \"hexcode\": \"1F6C0-1F3FB\",\n        \"emoji\": \"🛀🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3100,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person taking bath: medium-light skin tone\",\n        \"hexcode\": \"1F6C0-1F3FC\",\n        \"emoji\": \"🛀🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3101,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person taking bath: medium skin tone\",\n        \"hexcode\": \"1F6C0-1F3FD\",\n        \"emoji\": \"🛀🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3102,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person taking bath: medium-dark skin tone\",\n        \"hexcode\": \"1F6C0-1F3FE\",\n        \"emoji\": \"🛀🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3103,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person taking bath: dark skin tone\",\n        \"hexcode\": \"1F6C0-1F3FF\",\n        \"emoji\": \"🛀🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3104,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"person in bed\",\n    \"hexcode\": \"1F6CC\",\n    \"tags\": [\n      \"bed\",\n      \"bedtime\",\n      \"good\",\n      \"goodnight\",\n      \"hotel\",\n      \"nap\",\n      \"night\",\n      \"person\",\n      \"sleep\",\n      \"tired\",\n      \"zzz\"\n    ],\n    \"emoji\": \"🛌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3105,\n    \"group\": 1,\n    \"subgroup\": 29,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"person in bed: light skin tone\",\n        \"hexcode\": \"1F6CC-1F3FB\",\n        \"emoji\": \"🛌🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3106,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 4,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"person in bed: medium-light skin tone\",\n        \"hexcode\": \"1F6CC-1F3FC\",\n        \"emoji\": \"🛌🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3107,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 4,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"person in bed: medium skin tone\",\n        \"hexcode\": \"1F6CC-1F3FD\",\n        \"emoji\": \"🛌🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3108,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 4,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"person in bed: medium-dark skin tone\",\n        \"hexcode\": \"1F6CC-1F3FE\",\n        \"emoji\": \"🛌🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3109,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 4,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"person in bed: dark skin tone\",\n        \"hexcode\": \"1F6CC-1F3FF\",\n        \"emoji\": \"🛌🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3110,\n        \"group\": 1,\n        \"subgroup\": 29,\n        \"version\": 4,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"people holding hands\",\n    \"hexcode\": \"1F9D1-200D-1F91D-200D-1F9D1\",\n    \"tags\": [\n      \"bae\",\n      \"bestie\",\n      \"bff\",\n      \"couple\",\n      \"dating\",\n      \"flirt\",\n      \"friends\",\n      \"hand\",\n      \"hold\",\n      \"people\",\n      \"twins\"\n    ],\n    \"emoji\": \"🧑‍🤝‍🧑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3111,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 12,\n    \"skins\": [\n      {\n        \"label\": \"people holding hands: light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏻‍🤝‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3112,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"people holding hands: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏻‍🤝‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3113,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"people holding hands: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏻‍🤝‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3114,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"people holding hands: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏻‍🤝‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3115,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"people holding hands: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-1F91D-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏻‍🤝‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3116,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏼‍🤝‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3117,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏼‍🤝‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3118,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"people holding hands: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏼‍🤝‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3119,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏼‍🤝‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3120,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-1F91D-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏼‍🤝‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3121,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏽‍🤝‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3122,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏽‍🤝‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3123,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏽‍🤝‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3124,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"people holding hands: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏽‍🤝‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3125,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-1F91D-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏽‍🤝‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3126,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏾‍🤝‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3127,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏾‍🤝‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3128,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏾‍🤝‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3129,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"people holding hands: medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏾‍🤝‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3130,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"people holding hands: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-1F91D-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏾‍🤝‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3131,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"people holding hands: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏿‍🤝‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3132,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"people holding hands: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏿‍🤝‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3133,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"people holding hands: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏿‍🤝‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3134,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"people holding hands: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏿‍🤝‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3135,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"people holding hands: dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-1F91D-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏿‍🤝‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3136,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"women holding hands\",\n    \"hexcode\": \"1F46D\",\n    \"tags\": [\n      \"bae\",\n      \"bestie\",\n      \"bff\",\n      \"couple\",\n      \"dating\",\n      \"flirt\",\n      \"friends\",\n      \"girls\",\n      \"hand\",\n      \"hold\",\n      \"sisters\",\n      \"twins\",\n      \"women\"\n    ],\n    \"emoji\": \"👭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3137,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"women holding hands: light skin tone\",\n        \"hexcode\": \"1F46D-1F3FB\",\n        \"emoji\": \"👭🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3138,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"women holding hands: medium-light skin tone\",\n        \"hexcode\": \"1F46D-1F3FC\",\n        \"emoji\": \"👭🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3144,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"women holding hands: medium skin tone\",\n        \"hexcode\": \"1F46D-1F3FD\",\n        \"emoji\": \"👭🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3150,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"women holding hands: medium-dark skin tone\",\n        \"hexcode\": \"1F46D-1F3FE\",\n        \"emoji\": \"👭🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3156,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"women holding hands: dark skin tone\",\n        \"hexcode\": \"1F46D-1F3FF\",\n        \"emoji\": \"👭🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3162,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"women holding hands: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏻‍🤝‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3139,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"women holding hands: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏻‍🤝‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3140,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"women holding hands: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏻‍🤝‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3141,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"women holding hands: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏻‍🤝‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3142,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏼‍🤝‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3143,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏼‍🤝‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3145,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏼‍🤝‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3146,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏼‍🤝‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3147,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏽‍🤝‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3148,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏽‍🤝‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3149,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏽‍🤝‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3151,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏽‍🤝‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3152,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏾‍🤝‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3153,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏾‍🤝‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3154,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏾‍🤝‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3155,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"women holding hands: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏾‍🤝‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3157,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"women holding hands: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏿‍🤝‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3158,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"women holding hands: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏿‍🤝‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3159,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"women holding hands: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏿‍🤝‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3160,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"women holding hands: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏿‍🤝‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3161,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"woman and man holding hands\",\n    \"hexcode\": \"1F46B\",\n    \"tags\": [\n      \"bae\",\n      \"bestie\",\n      \"bff\",\n      \"couple\",\n      \"dating\",\n      \"flirt\",\n      \"friends\",\n      \"hand\",\n      \"hold\",\n      \"man\",\n      \"twins\",\n      \"woman\"\n    ],\n    \"emoji\": \"👫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3163,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"woman and man holding hands: light skin tone\",\n        \"hexcode\": \"1F46B-1F3FB\",\n        \"emoji\": \"👫🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3164,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-light skin tone\",\n        \"hexcode\": \"1F46B-1F3FC\",\n        \"emoji\": \"👫🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3170,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"woman and man holding hands: medium skin tone\",\n        \"hexcode\": \"1F46B-1F3FD\",\n        \"emoji\": \"👫🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3176,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-dark skin tone\",\n        \"hexcode\": \"1F46B-1F3FE\",\n        \"emoji\": \"👫🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3182,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"woman and man holding hands: dark skin tone\",\n        \"hexcode\": \"1F46B-1F3FF\",\n        \"emoji\": \"👫🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3188,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"woman and man holding hands: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏻‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3165,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏻‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3166,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏻‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3167,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏻‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3168,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏼‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3169,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏼‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3171,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏼‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3172,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏼‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3173,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏽‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3174,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏽‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3175,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏽‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3177,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏽‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3178,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏾‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3179,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏾‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3180,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏾‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3181,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏾‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3183,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏿‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3184,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏿‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3185,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏿‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3186,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"woman and man holding hands: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏿‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3187,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"men holding hands\",\n    \"hexcode\": \"1F46C\",\n    \"tags\": [\n      \"bae\",\n      \"bestie\",\n      \"bff\",\n      \"boys\",\n      \"brothers\",\n      \"couple\",\n      \"dating\",\n      \"flirt\",\n      \"friends\",\n      \"hand\",\n      \"hold\",\n      \"men\",\n      \"twins\"\n    ],\n    \"emoji\": \"👬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3189,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 1,\n    \"skins\": [\n      {\n        \"label\": \"men holding hands: light skin tone\",\n        \"hexcode\": \"1F46C-1F3FB\",\n        \"emoji\": \"👬🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3190,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"men holding hands: medium-light skin tone\",\n        \"hexcode\": \"1F46C-1F3FC\",\n        \"emoji\": \"👬🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3196,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"men holding hands: medium skin tone\",\n        \"hexcode\": \"1F46C-1F3FD\",\n        \"emoji\": \"👬🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3202,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"men holding hands: medium-dark skin tone\",\n        \"hexcode\": \"1F46C-1F3FE\",\n        \"emoji\": \"👬🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3208,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"men holding hands: dark skin tone\",\n        \"hexcode\": \"1F46C-1F3FF\",\n        \"emoji\": \"👬🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3214,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"men holding hands: light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏻‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3191,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"men holding hands: light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏻‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3192,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"men holding hands: light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏻‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3193,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"men holding hands: light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏻‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3194,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏼‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3195,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏼‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3197,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏼‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3198,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏼‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3199,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏽‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3200,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏽‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3201,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏽‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3203,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏽‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3204,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏾‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3205,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏾‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3206,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏾‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3207,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"men holding hands: medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-1F91D-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏾‍🤝‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3209,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"men holding hands: dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F91D-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏿‍🤝‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3210,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"men holding hands: dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F91D-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏿‍🤝‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3211,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"men holding hands: dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F91D-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏿‍🤝‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3212,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"men holding hands: dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-1F91D-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏿‍🤝‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3213,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 12,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"kiss\",\n    \"hexcode\": \"1F48F\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"date\",\n      \"dating\",\n      \"heart\",\n      \"love\",\n      \"mwah\",\n      \"person\",\n      \"romance\",\n      \"together\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"💏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3215,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"kiss: light skin tone\",\n        \"hexcode\": \"1F48F-1F3FB\",\n        \"emoji\": \"💏🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3216,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"kiss: medium-light skin tone\",\n        \"hexcode\": \"1F48F-1F3FC\",\n        \"emoji\": \"💏🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3217,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"kiss: medium skin tone\",\n        \"hexcode\": \"1F48F-1F3FD\",\n        \"emoji\": \"💏🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3218,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"kiss: medium-dark skin tone\",\n        \"hexcode\": \"1F48F-1F3FE\",\n        \"emoji\": \"💏🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3219,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"kiss: dark skin tone\",\n        \"hexcode\": \"1F48F-1F3FF\",\n        \"emoji\": \"💏🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3220,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"kiss: person, person, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏻‍❤️‍💋‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3221,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏻‍❤️‍💋‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3223,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏻‍❤️‍💋‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3225,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏻‍❤️‍💋‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3227,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏼‍❤️‍💋‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3229,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏼‍❤️‍💋‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3231,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏼‍❤️‍💋‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3233,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏼‍❤️‍💋‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3235,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏽‍❤️‍💋‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3237,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏽‍❤️‍💋‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3239,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏽‍❤️‍💋‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3241,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏽‍❤️‍💋‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3243,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏾‍❤️‍💋‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3245,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏾‍❤️‍💋‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3247,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏾‍❤️‍💋‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3249,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏾‍❤️‍💋‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3251,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏿‍❤️‍💋‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3253,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏿‍❤️‍💋‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3255,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏿‍❤️‍💋‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3257,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: person, person, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏿‍❤️‍💋‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3259,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"kiss: woman, man\",\n    \"hexcode\": \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"date\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"man\",\n      \"mwah\",\n      \"person\",\n      \"romance\",\n      \"together\",\n      \"woman\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"👩‍❤️‍💋‍👨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3261,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"kiss: woman, man, light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3263,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"kiss: woman, man, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3265,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3267,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3269,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3271,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3273,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3275,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3277,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3279,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3281,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3283,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3285,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3287,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"kiss: woman, man, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3289,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3291,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3293,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3295,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3297,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3299,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"kiss: woman, man, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3301,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3303,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3305,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3307,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3309,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, man, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3311,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"kiss: man, man\",\n    \"hexcode\": \"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"date\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"man\",\n      \"mwah\",\n      \"person\",\n      \"romance\",\n      \"together\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"👨‍❤️‍💋‍👨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3313,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"kiss: man, man, light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏻‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3315,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"kiss: man, man, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏻‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3317,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏻‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3319,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏻‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3321,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏻‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3323,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏼‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3325,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏼‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3327,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"kiss: man, man, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏼‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3329,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏼‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3331,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏼‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3333,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏽‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3335,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏽‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3337,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏽‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3339,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"kiss: man, man, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏽‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3341,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏽‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3343,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏾‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3345,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏾‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3347,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏾‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3349,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏾‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3351,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"kiss: man, man, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏾‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3353,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏿‍❤️‍💋‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3355,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏿‍❤️‍💋‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3357,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏿‍❤️‍💋‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3359,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏿‍❤️‍💋‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3361,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: man, man, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏿‍❤️‍💋‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3363,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"kiss: woman, woman\",\n    \"hexcode\": \"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"date\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"mwah\",\n      \"person\",\n      \"romance\",\n      \"together\",\n      \"woman\",\n      \"xoxo\"\n    ],\n    \"emoji\": \"👩‍❤️‍💋‍👩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3365,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"kiss: woman, woman, light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3367,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"kiss: woman, woman, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3369,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3371,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3373,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏻‍❤️‍💋‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3375,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3377,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3379,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3381,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3383,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏼‍❤️‍💋‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3385,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3387,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3389,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3391,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3393,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏽‍❤️‍💋‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3395,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3397,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3399,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3401,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3403,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"kiss: woman, woman, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏾‍❤️‍💋‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3405,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3407,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3409,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3411,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3413,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"kiss: woman, woman, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F48B-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏿‍❤️‍💋‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3415,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"couple with heart\",\n    \"hexcode\": \"1F491\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"person\",\n      \"relationship\",\n      \"romance\",\n      \"together\",\n      \"you\"\n    ],\n    \"emoji\": \"💑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3417,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 0.6,\n    \"skins\": [\n      {\n        \"label\": \"couple with heart: light skin tone\",\n        \"hexcode\": \"1F491-1F3FB\",\n        \"emoji\": \"💑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3418,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"couple with heart: medium-light skin tone\",\n        \"hexcode\": \"1F491-1F3FC\",\n        \"emoji\": \"💑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3419,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"couple with heart: medium skin tone\",\n        \"hexcode\": \"1F491-1F3FD\",\n        \"emoji\": \"💑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3420,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"couple with heart: medium-dark skin tone\",\n        \"hexcode\": \"1F491-1F3FE\",\n        \"emoji\": \"💑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3421,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"couple with heart: dark skin tone\",\n        \"hexcode\": \"1F491-1F3FF\",\n        \"emoji\": \"💑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3422,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      },\n      {\n        \"label\": \"couple with heart: person, person, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏻‍❤️‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3423,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏻‍❤️‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3425,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏻‍❤️‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3427,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FB-200D-2764-FE0F-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏻‍❤️‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3429,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏼‍❤️‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3431,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏼‍❤️‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3433,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏼‍❤️‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3435,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FC-200D-2764-FE0F-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏼‍❤️‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3437,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏽‍❤️‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3439,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏽‍❤️‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3441,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏽‍❤️‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3443,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FD-200D-2764-FE0F-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏽‍❤️‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3445,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏾‍❤️‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3447,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏾‍❤️‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3449,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏾‍❤️‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3451,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FE-200D-2764-FE0F-200D-1F9D1-1F3FF\",\n        \"emoji\": \"🧑🏾‍❤️‍🧑🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3453,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F9D1-1F3FB\",\n        \"emoji\": \"🧑🏿‍❤️‍🧑🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3455,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F9D1-1F3FC\",\n        \"emoji\": \"🧑🏿‍❤️‍🧑🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3457,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F9D1-1F3FD\",\n        \"emoji\": \"🧑🏿‍❤️‍🧑🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3459,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: person, person, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F9D1-1F3FF-200D-2764-FE0F-200D-1F9D1-1F3FE\",\n        \"emoji\": \"🧑🏿‍❤️‍🧑🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3461,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      }\n    ]\n  },\n  {\n    \"label\": \"couple with heart: woman, man\",\n    \"hexcode\": \"1F469-200D-2764-FE0F-200D-1F468\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"man\",\n      \"person\",\n      \"relationship\",\n      \"romance\",\n      \"together\",\n      \"woman\",\n      \"you\"\n    ],\n    \"emoji\": \"👩‍❤️‍👨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3463,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"couple with heart: woman, man, light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏻‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3465,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"couple with heart: woman, man, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏻‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3467,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏻‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3469,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏻‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3471,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏻‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3473,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏼‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3475,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏼‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3477,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏼‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3479,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏼‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3481,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏼‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3483,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏽‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3485,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏽‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3487,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏽‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3489,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏽‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3491,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏽‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3493,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏾‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3495,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏾‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3497,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏾‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3499,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏾‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3501,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"couple with heart: woman, man, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏾‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3503,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👩🏿‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3505,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👩🏿‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3507,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👩🏿‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3509,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👩🏿‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3511,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, man, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👩🏿‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3513,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"couple with heart: man, man\",\n    \"hexcode\": \"1F468-200D-2764-FE0F-200D-1F468\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"man\",\n      \"person\",\n      \"relationship\",\n      \"romance\",\n      \"together\",\n      \"you\"\n    ],\n    \"emoji\": \"👨‍❤️‍👨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3515,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"couple with heart: man, man, light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏻‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3517,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"couple with heart: man, man, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏻‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3519,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏻‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3521,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏻‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3523,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FB-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏻‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3525,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏼‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3527,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏼‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3529,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏼‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3531,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏼‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3533,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FC-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏼‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3535,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏽‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3537,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏽‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3539,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏽‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3541,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏽‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3543,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FD-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏽‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3545,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏾‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3547,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏾‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3549,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏾‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3551,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏾‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3553,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"couple with heart: man, man, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FE-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏾‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3555,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F468-1F3FB\",\n        \"emoji\": \"👨🏿‍❤️‍👨🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3557,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F468-1F3FC\",\n        \"emoji\": \"👨🏿‍❤️‍👨🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3559,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F468-1F3FD\",\n        \"emoji\": \"👨🏿‍❤️‍👨🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3561,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F468-1F3FE\",\n        \"emoji\": \"👨🏿‍❤️‍👨🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3563,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: man, man, dark skin tone\",\n        \"hexcode\": \"1F468-1F3FF-200D-2764-FE0F-200D-1F468-1F3FF\",\n        \"emoji\": \"👨🏿‍❤️‍👨🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3565,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"couple with heart: woman, woman\",\n    \"hexcode\": \"1F469-200D-2764-FE0F-200D-1F469\",\n    \"tags\": [\n      \"anniversary\",\n      \"babe\",\n      \"bae\",\n      \"couple\",\n      \"dating\",\n      \"heart\",\n      \"kiss\",\n      \"love\",\n      \"person\",\n      \"relationship\",\n      \"romance\",\n      \"together\",\n      \"woman\",\n      \"you\"\n    ],\n    \"emoji\": \"👩‍❤️‍👩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3567,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2,\n    \"skins\": [\n      {\n        \"label\": \"couple with heart: woman, woman, light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏻‍❤️‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3569,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 1\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, light skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏻‍❤️‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3571,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏻‍❤️‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3573,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏻‍❤️‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3575,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FB-200D-2764-FE0F-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏻‍❤️‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3577,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          1,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-light skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏼‍❤️‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3579,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏼‍❤️‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3581,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 2\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-light skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏼‍❤️‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3583,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏼‍❤️‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3585,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-light skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FC-200D-2764-FE0F-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏼‍❤️‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3587,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          2,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏽‍❤️‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3589,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏽‍❤️‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3591,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏽‍❤️‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3593,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 3\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏽‍❤️‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3595,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FD-200D-2764-FE0F-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏽‍❤️‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3597,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          3,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏾‍❤️‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3599,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏾‍❤️‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3601,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏾‍❤️‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3603,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏾‍❤️‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3605,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 4\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, medium-dark skin tone, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FE-200D-2764-FE0F-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏾‍❤️‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3607,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          4,\n          5\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, dark skin tone, light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F469-1F3FB\",\n        \"emoji\": \"👩🏿‍❤️‍👩🏻\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3609,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          1\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, dark skin tone, medium-light skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F469-1F3FC\",\n        \"emoji\": \"👩🏿‍❤️‍👩🏼\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3611,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          2\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, dark skin tone, medium skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F469-1F3FD\",\n        \"emoji\": \"👩🏿‍❤️‍👩🏽\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3613,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          3\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, dark skin tone, medium-dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F469-1F3FE\",\n        \"emoji\": \"👩🏿‍❤️‍👩🏾\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3615,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": [\n          5,\n          4\n        ]\n      },\n      {\n        \"label\": \"couple with heart: woman, woman, dark skin tone\",\n        \"hexcode\": \"1F469-1F3FF-200D-2764-FE0F-200D-1F469-1F3FF\",\n        \"emoji\": \"👩🏿‍❤️‍👩🏿\",\n        \"text\": \"\",\n        \"type\": 1,\n        \"order\": 3617,\n        \"group\": 1,\n        \"subgroup\": 30,\n        \"version\": 13.1,\n        \"tone\": 5\n      }\n    ]\n  },\n  {\n    \"label\": \"family: man, woman, boy\",\n    \"hexcode\": \"1F468-200D-1F469-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\",\n      \"woman\"\n    ],\n    \"emoji\": \"👨‍👩‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3619,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, woman, girl\",\n    \"hexcode\": \"1F468-200D-1F469-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\",\n      \"woman\"\n    ],\n    \"emoji\": \"👨‍👩‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3620,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, woman, girl, boy\",\n    \"hexcode\": \"1F468-200D-1F469-200D-1F467-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\",\n      \"woman\"\n    ],\n    \"emoji\": \"👨‍👩‍👧‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3621,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, woman, boy, boy\",\n    \"hexcode\": \"1F468-200D-1F469-200D-1F466-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\",\n      \"woman\"\n    ],\n    \"emoji\": \"👨‍👩‍👦‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3622,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, woman, girl, girl\",\n    \"hexcode\": \"1F468-200D-1F469-200D-1F467-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\",\n      \"woman\"\n    ],\n    \"emoji\": \"👨‍👩‍👧‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3623,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, man, boy\",\n    \"hexcode\": \"1F468-200D-1F468-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👨‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3624,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, man, girl\",\n    \"hexcode\": \"1F468-200D-1F468-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👨‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3625,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, man, girl, boy\",\n    \"hexcode\": \"1F468-200D-1F468-200D-1F467-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👨‍👧‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3626,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, man, boy, boy\",\n    \"hexcode\": \"1F468-200D-1F468-200D-1F466-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👨‍👦‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3627,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, man, girl, girl\",\n    \"hexcode\": \"1F468-200D-1F468-200D-1F467-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👨‍👧‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3628,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: woman, woman, boy\",\n    \"hexcode\": \"1F469-200D-1F469-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👩‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3629,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: woman, woman, girl\",\n    \"hexcode\": \"1F469-200D-1F469-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👩‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3630,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: woman, woman, girl, boy\",\n    \"hexcode\": \"1F469-200D-1F469-200D-1F467-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👩‍👧‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3631,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: woman, woman, boy, boy\",\n    \"hexcode\": \"1F469-200D-1F469-200D-1F466-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👩‍👦‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3632,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: woman, woman, girl, girl\",\n    \"hexcode\": \"1F469-200D-1F469-200D-1F467-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👩‍👧‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3633,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 2\n  },\n  {\n    \"label\": \"family: man, boy\",\n    \"hexcode\": \"1F468-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3634,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: man, boy, boy\",\n    \"hexcode\": \"1F468-200D-1F466-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👦‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3635,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: man, girl\",\n    \"hexcode\": \"1F468-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3636,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: man, girl, boy\",\n    \"hexcode\": \"1F468-200D-1F467-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👧‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3637,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: man, girl, girl\",\n    \"hexcode\": \"1F468-200D-1F467-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"man\"\n    ],\n    \"emoji\": \"👨‍👧‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3638,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: woman, boy\",\n    \"hexcode\": \"1F469-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3639,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: woman, boy, boy\",\n    \"hexcode\": \"1F469-200D-1F466-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👦‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3640,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: woman, girl\",\n    \"hexcode\": \"1F469-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3641,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: woman, girl, boy\",\n    \"hexcode\": \"1F469-200D-1F467-200D-1F466\",\n    \"tags\": [\n      \"boy\",\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👧‍👦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3642,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"family: woman, girl, girl\",\n    \"hexcode\": \"1F469-200D-1F467-200D-1F467\",\n    \"tags\": [\n      \"child\",\n      \"family\",\n      \"girl\",\n      \"woman\"\n    ],\n    \"emoji\": \"👩‍👧‍👧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3643,\n    \"group\": 1,\n    \"subgroup\": 30,\n    \"version\": 4\n  },\n  {\n    \"label\": \"speaking head\",\n    \"hexcode\": \"1F5E3\",\n    \"tags\": [\n      \"face\",\n      \"head\",\n      \"silhouette\",\n      \"speak\",\n      \"speaking\"\n    ],\n    \"emoji\": \"🗣️\",\n    \"text\": \"🗣︎\",\n    \"type\": 0,\n    \"order\": 3645,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"bust in silhouette\",\n    \"hexcode\": \"1F464\",\n    \"tags\": [\n      \"bust\",\n      \"mysterious\",\n      \"shadow\",\n      \"silhouette\"\n    ],\n    \"emoji\": \"👤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3646,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"busts in silhouette\",\n    \"hexcode\": \"1F465\",\n    \"tags\": [\n      \"bff\",\n      \"bust\",\n      \"busts\",\n      \"everyone\",\n      \"friend\",\n      \"friends\",\n      \"people\",\n      \"silhouette\"\n    ],\n    \"emoji\": \"👥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3647,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 1\n  },\n  {\n    \"label\": \"people hugging\",\n    \"hexcode\": \"1FAC2\",\n    \"tags\": [\n      \"comfort\",\n      \"embrace\",\n      \"farewell\",\n      \"friendship\",\n      \"goodbye\",\n      \"hello\",\n      \"hug\",\n      \"hugging\",\n      \"love\",\n      \"people\",\n      \"thanks\"\n    ],\n    \"emoji\": \"🫂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3648,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 13\n  },\n  {\n    \"label\": \"family\",\n    \"hexcode\": \"1F46A\",\n    \"tags\": [\n      \"child\"\n    ],\n    \"emoji\": \"👪️\",\n    \"text\": \"👪︎\",\n    \"type\": 1,\n    \"order\": 3649,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"family: adult, adult, child\",\n    \"hexcode\": \"1F9D1-200D-1F9D1-200D-1F9D2\",\n    \"tags\": [\n      \"adult\",\n      \"child\",\n      \"family\"\n    ],\n    \"emoji\": \"🧑‍🧑‍🧒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3650,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"family: adult, adult, child, child\",\n    \"hexcode\": \"1F9D1-200D-1F9D1-200D-1F9D2-200D-1F9D2\",\n    \"tags\": [\n      \"adult\",\n      \"child\",\n      \"family\"\n    ],\n    \"emoji\": \"🧑‍🧑‍🧒‍🧒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3651,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"family: adult, child\",\n    \"hexcode\": \"1F9D1-200D-1F9D2\",\n    \"tags\": [\n      \"adult\",\n      \"child\",\n      \"family\"\n    ],\n    \"emoji\": \"🧑‍🧒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3652,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"family: adult, child, child\",\n    \"hexcode\": \"1F9D1-200D-1F9D2-200D-1F9D2\",\n    \"tags\": [\n      \"adult\",\n      \"child\",\n      \"family\"\n    ],\n    \"emoji\": \"🧑‍🧒‍🧒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3653,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"footprints\",\n    \"hexcode\": \"1F463\",\n    \"tags\": [\n      \"barefoot\",\n      \"clothing\",\n      \"footprint\",\n      \"omw\",\n      \"print\",\n      \"walk\"\n    ],\n    \"emoji\": \"👣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3654,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fingerprint\",\n    \"hexcode\": \"1FAC6\",\n    \"tags\": [\n      \"clue\",\n      \"crime\",\n      \"detective\",\n      \"forensics\",\n      \"identity\",\n      \"mystery\",\n      \"print\",\n      \"safety\",\n      \"trace\"\n    ],\n    \"emoji\": \"🫆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3655,\n    \"group\": 1,\n    \"subgroup\": 31,\n    \"version\": 16\n  },\n  {\n    \"label\": \"light skin tone\",\n    \"hexcode\": \"1F3FB\",\n    \"tags\": [\n      \"1–2\",\n      \"light\",\n      \"skin\",\n      \"tone\",\n      \"type\"\n    ],\n    \"emoji\": \"🏻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3656,\n    \"group\": 2,\n    \"subgroup\": 32,\n    \"version\": 1\n  },\n  {\n    \"label\": \"medium-light skin tone\",\n    \"hexcode\": \"1F3FC\",\n    \"tags\": [\n      \"3\",\n      \"medium-light\",\n      \"skin\",\n      \"tone\",\n      \"type\"\n    ],\n    \"emoji\": \"🏼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3657,\n    \"group\": 2,\n    \"subgroup\": 32,\n    \"version\": 1\n  },\n  {\n    \"label\": \"medium skin tone\",\n    \"hexcode\": \"1F3FD\",\n    \"tags\": [\n      \"4\",\n      \"medium\",\n      \"skin\",\n      \"tone\",\n      \"type\"\n    ],\n    \"emoji\": \"🏽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3658,\n    \"group\": 2,\n    \"subgroup\": 32,\n    \"version\": 1\n  },\n  {\n    \"label\": \"medium-dark skin tone\",\n    \"hexcode\": \"1F3FE\",\n    \"tags\": [\n      \"5\",\n      \"medium-dark\",\n      \"skin\",\n      \"tone\",\n      \"type\"\n    ],\n    \"emoji\": \"🏾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3659,\n    \"group\": 2,\n    \"subgroup\": 32,\n    \"version\": 1\n  },\n  {\n    \"label\": \"dark skin tone\",\n    \"hexcode\": \"1F3FF\",\n    \"tags\": [\n      \"6\",\n      \"dark\",\n      \"skin\",\n      \"tone\",\n      \"type\"\n    ],\n    \"emoji\": \"🏿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3660,\n    \"group\": 2,\n    \"subgroup\": 32,\n    \"version\": 1\n  },\n  {\n    \"label\": \"red hair\",\n    \"hexcode\": \"1F9B0\",\n    \"tags\": [\n      \"ginger\",\n      \"hair\",\n      \"red\",\n      \"redhead\"\n    ],\n    \"emoji\": \"🦰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3661,\n    \"group\": 2,\n    \"subgroup\": 33,\n    \"version\": 11\n  },\n  {\n    \"label\": \"curly hair\",\n    \"hexcode\": \"1F9B1\",\n    \"tags\": [\n      \"afro\",\n      \"curly\",\n      \"hair\",\n      \"ringlets\"\n    ],\n    \"emoji\": \"🦱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3662,\n    \"group\": 2,\n    \"subgroup\": 33,\n    \"version\": 11\n  },\n  {\n    \"label\": \"white hair\",\n    \"hexcode\": \"1F9B3\",\n    \"tags\": [\n      \"gray\",\n      \"hair\",\n      \"old\",\n      \"white\"\n    ],\n    \"emoji\": \"🦳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3663,\n    \"group\": 2,\n    \"subgroup\": 33,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bald\",\n    \"hexcode\": \"1F9B2\",\n    \"tags\": [\n      \"chemotherapy\",\n      \"hair\",\n      \"hairless\",\n      \"no\",\n      \"shaven\"\n    ],\n    \"emoji\": \"🦲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3664,\n    \"group\": 2,\n    \"subgroup\": 33,\n    \"version\": 11\n  },\n  {\n    \"label\": \"monkey face\",\n    \"hexcode\": \"1F435\",\n    \"tags\": [\n      \"animal\",\n      \"banana\",\n      \"face\",\n      \"monkey\"\n    ],\n    \"emoji\": \"🐵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3665,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"monkey\",\n    \"hexcode\": \"1F412\",\n    \"tags\": [\n      \"animal\",\n      \"banana\"\n    ],\n    \"emoji\": \"🐒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3666,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"gorilla\",\n    \"hexcode\": \"1F98D\",\n    \"tags\": [\n      \"animal\"\n    ],\n    \"emoji\": \"🦍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3667,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 3\n  },\n  {\n    \"label\": \"orangutan\",\n    \"hexcode\": \"1F9A7\",\n    \"tags\": [\n      \"animal\",\n      \"ape\",\n      \"monkey\"\n    ],\n    \"emoji\": \"🦧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3668,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"dog face\",\n    \"hexcode\": \"1F436\",\n    \"tags\": [\n      \"adorbs\",\n      \"animal\",\n      \"dog\",\n      \"face\",\n      \"pet\",\n      \"puppies\",\n      \"puppy\"\n    ],\n    \"emoji\": \"🐶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3669,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dog\",\n    \"hexcode\": \"1F415\",\n    \"tags\": [\n      \"animal\",\n      \"animals\",\n      \"dogs\",\n      \"pet\"\n    ],\n    \"emoji\": \"🐕️\",\n    \"text\": \"🐕︎\",\n    \"type\": 1,\n    \"order\": 3670,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"guide dog\",\n    \"hexcode\": \"1F9AE\",\n    \"tags\": [\n      \"accessibility\",\n      \"animal\",\n      \"blind\",\n      \"dog\",\n      \"guide\"\n    ],\n    \"emoji\": \"🦮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3671,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"service dog\",\n    \"hexcode\": \"1F415-200D-1F9BA\",\n    \"tags\": [\n      \"accessibility\",\n      \"animal\",\n      \"assistance\",\n      \"dog\",\n      \"service\"\n    ],\n    \"emoji\": \"🐕‍🦺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3672,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"poodle\",\n    \"hexcode\": \"1F429\",\n    \"tags\": [\n      \"animal\",\n      \"dog\",\n      \"fluffy\"\n    ],\n    \"emoji\": \"🐩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3673,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wolf\",\n    \"hexcode\": \"1F43A\",\n    \"tags\": [\n      \"animal\",\n      \"face\"\n    ],\n    \"emoji\": \"🐺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3674,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fox\",\n    \"hexcode\": \"1F98A\",\n    \"tags\": [\n      \"animal\",\n      \"face\"\n    ],\n    \"emoji\": \"🦊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3675,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 3\n  },\n  {\n    \"label\": \"raccoon\",\n    \"hexcode\": \"1F99D\",\n    \"tags\": [\n      \"animal\",\n      \"curious\",\n      \"sly\"\n    ],\n    \"emoji\": \"🦝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3676,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 11\n  },\n  {\n    \"label\": \"cat face\",\n    \"hexcode\": \"1F431\",\n    \"tags\": [\n      \"animal\",\n      \"cat\",\n      \"face\",\n      \"kitten\",\n      \"kitty\",\n      \"pet\"\n    ],\n    \"emoji\": \"🐱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3677,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cat\",\n    \"hexcode\": \"1F408\",\n    \"tags\": [\n      \"animal\",\n      \"animals\",\n      \"cats\",\n      \"kitten\",\n      \"pet\"\n    ],\n    \"emoji\": \"🐈️\",\n    \"text\": \"🐈︎\",\n    \"type\": 1,\n    \"order\": 3678,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"black cat\",\n    \"hexcode\": \"1F408-200D-2B1B\",\n    \"tags\": [\n      \"animal\",\n      \"black\",\n      \"cat\",\n      \"feline\",\n      \"halloween\",\n      \"meow\",\n      \"unlucky\"\n    ],\n    \"emoji\": \"🐈‍⬛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3679,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 13\n  },\n  {\n    \"label\": \"lion\",\n    \"hexcode\": \"1F981\",\n    \"tags\": [\n      \"alpha\",\n      \"animal\",\n      \"face\",\n      \"leo\",\n      \"mane\",\n      \"order\",\n      \"rawr\",\n      \"roar\",\n      \"safari\",\n      \"strong\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🦁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3680,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"tiger face\",\n    \"hexcode\": \"1F42F\",\n    \"tags\": [\n      \"animal\",\n      \"big\",\n      \"cat\",\n      \"face\",\n      \"predator\",\n      \"tiger\"\n    ],\n    \"emoji\": \"🐯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3681,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tiger\",\n    \"hexcode\": \"1F405\",\n    \"tags\": [\n      \"animal\",\n      \"big\",\n      \"cat\",\n      \"predator\",\n      \"zoo\"\n    ],\n    \"emoji\": \"🐅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3682,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"leopard\",\n    \"hexcode\": \"1F406\",\n    \"tags\": [\n      \"animal\",\n      \"big\",\n      \"cat\",\n      \"predator\",\n      \"zoo\"\n    ],\n    \"emoji\": \"🐆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3683,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"horse face\",\n    \"hexcode\": \"1F434\",\n    \"tags\": [\n      \"animal\",\n      \"dressage\",\n      \"equine\",\n      \"face\",\n      \"farm\",\n      \"horse\",\n      \"horses\"\n    ],\n    \"emoji\": \"🐴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3684,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"moose\",\n    \"hexcode\": \"1FACE\",\n    \"tags\": [\n      \"alces\",\n      \"animal\",\n      \"antlers\",\n      \"elk\",\n      \"mammal\"\n    ],\n    \"emoji\": \"🫎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3685,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 15\n  },\n  {\n    \"label\": \"donkey\",\n    \"hexcode\": \"1FACF\",\n    \"tags\": [\n      \"animal\",\n      \"ass\",\n      \"burro\",\n      \"hinny\",\n      \"mammal\",\n      \"mule\",\n      \"stubborn\"\n    ],\n    \"emoji\": \"🫏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3686,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 15\n  },\n  {\n    \"label\": \"horse\",\n    \"hexcode\": \"1F40E\",\n    \"tags\": [\n      \"animal\",\n      \"equestrian\",\n      \"farm\",\n      \"racehorse\",\n      \"racing\"\n    ],\n    \"emoji\": \"🐎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3687,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"unicorn\",\n    \"hexcode\": \"1F984\",\n    \"tags\": [\n      \"face\"\n    ],\n    \"emoji\": \"🦄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3688,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"zebra\",\n    \"hexcode\": \"1F993\",\n    \"tags\": [\n      \"animal\",\n      \"stripe\"\n    ],\n    \"emoji\": \"🦓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3689,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 5\n  },\n  {\n    \"label\": \"deer\",\n    \"hexcode\": \"1F98C\",\n    \"tags\": [\n      \"animal\"\n    ],\n    \"emoji\": \"🦌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3690,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 3\n  },\n  {\n    \"label\": \"bison\",\n    \"hexcode\": \"1F9AC\",\n    \"tags\": [\n      \"animal\",\n      \"buffalo\",\n      \"herd\",\n      \"wisent\"\n    ],\n    \"emoji\": \"🦬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3691,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 13\n  },\n  {\n    \"label\": \"cow face\",\n    \"hexcode\": \"1F42E\",\n    \"tags\": [\n      \"animal\",\n      \"cow\",\n      \"face\",\n      \"farm\",\n      \"milk\",\n      \"moo\"\n    ],\n    \"emoji\": \"🐮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3692,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ox\",\n    \"hexcode\": \"1F402\",\n    \"tags\": [\n      \"animal\",\n      \"animals\",\n      \"bull\",\n      \"farm\",\n      \"taurus\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🐂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3693,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"water buffalo\",\n    \"hexcode\": \"1F403\",\n    \"tags\": [\n      \"animal\",\n      \"buffalo\",\n      \"water\",\n      \"zoo\"\n    ],\n    \"emoji\": \"🐃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3694,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"cow\",\n    \"hexcode\": \"1F404\",\n    \"tags\": [\n      \"animal\",\n      \"animals\",\n      \"farm\",\n      \"milk\",\n      \"moo\"\n    ],\n    \"emoji\": \"🐄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3695,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"pig face\",\n    \"hexcode\": \"1F437\",\n    \"tags\": [\n      \"animal\",\n      \"bacon\",\n      \"face\",\n      \"farm\",\n      \"pig\",\n      \"pork\"\n    ],\n    \"emoji\": \"🐷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3696,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pig\",\n    \"hexcode\": \"1F416\",\n    \"tags\": [\n      \"animal\",\n      \"bacon\",\n      \"farm\",\n      \"pork\",\n      \"sow\"\n    ],\n    \"emoji\": \"🐖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3697,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"boar\",\n    \"hexcode\": \"1F417\",\n    \"tags\": [\n      \"animal\",\n      \"pig\"\n    ],\n    \"emoji\": \"🐗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3698,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pig nose\",\n    \"hexcode\": \"1F43D\",\n    \"tags\": [\n      \"animal\",\n      \"face\",\n      \"farm\",\n      \"nose\",\n      \"pig\",\n      \"smell\",\n      \"snout\"\n    ],\n    \"emoji\": \"🐽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3699,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ram\",\n    \"hexcode\": \"1F40F\",\n    \"tags\": [\n      \"animal\",\n      \"aries\",\n      \"horns\",\n      \"male\",\n      \"sheep\",\n      \"zodiac\",\n      \"zoo\"\n    ],\n    \"emoji\": \"🐏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3700,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"ewe\",\n    \"hexcode\": \"1F411\",\n    \"tags\": [\n      \"animal\",\n      \"baa\",\n      \"farm\",\n      \"female\",\n      \"fluffy\",\n      \"lamb\",\n      \"sheep\",\n      \"wool\"\n    ],\n    \"emoji\": \"🐑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3701,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"goat\",\n    \"hexcode\": \"1F410\",\n    \"tags\": [\n      \"animal\",\n      \"capricorn\",\n      \"farm\",\n      \"milk\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🐐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3702,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"camel\",\n    \"hexcode\": \"1F42A\",\n    \"tags\": [\n      \"animal\",\n      \"desert\",\n      \"dromedary\",\n      \"hump\",\n      \"one\"\n    ],\n    \"emoji\": \"🐪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3703,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"two-hump camel\",\n    \"hexcode\": \"1F42B\",\n    \"tags\": [\n      \"animal\",\n      \"bactrian\",\n      \"camel\",\n      \"desert\",\n      \"hump\",\n      \"two\",\n      \"two-hump\"\n    ],\n    \"emoji\": \"🐫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3704,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"llama\",\n    \"hexcode\": \"1F999\",\n    \"tags\": [\n      \"alpaca\",\n      \"animal\",\n      \"guanaco\",\n      \"vicuña\",\n      \"wool\"\n    ],\n    \"emoji\": \"🦙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3705,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 11\n  },\n  {\n    \"label\": \"giraffe\",\n    \"hexcode\": \"1F992\",\n    \"tags\": [\n      \"animal\",\n      \"spots\"\n    ],\n    \"emoji\": \"🦒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3706,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 5\n  },\n  {\n    \"label\": \"elephant\",\n    \"hexcode\": \"1F418\",\n    \"tags\": [\n      \"animal\"\n    ],\n    \"emoji\": \"🐘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3707,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mammoth\",\n    \"hexcode\": \"1F9A3\",\n    \"tags\": [\n      \"animal\",\n      \"extinction\",\n      \"large\",\n      \"tusk\",\n      \"wooly\"\n    ],\n    \"emoji\": \"🦣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3708,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 13\n  },\n  {\n    \"label\": \"rhinoceros\",\n    \"hexcode\": \"1F98F\",\n    \"tags\": [\n      \"animal\"\n    ],\n    \"emoji\": \"🦏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3709,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 3\n  },\n  {\n    \"label\": \"hippopotamus\",\n    \"hexcode\": \"1F99B\",\n    \"tags\": [\n      \"animal\",\n      \"hippo\"\n    ],\n    \"emoji\": \"🦛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3710,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 11\n  },\n  {\n    \"label\": \"mouse face\",\n    \"hexcode\": \"1F42D\",\n    \"tags\": [\n      \"animal\",\n      \"face\",\n      \"mouse\"\n    ],\n    \"emoji\": \"🐭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3711,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mouse\",\n    \"hexcode\": \"1F401\",\n    \"tags\": [\n      \"animal\",\n      \"animals\"\n    ],\n    \"emoji\": \"🐁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3712,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"rat\",\n    \"hexcode\": \"1F400\",\n    \"tags\": [\n      \"animal\"\n    ],\n    \"emoji\": \"🐀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3713,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hamster\",\n    \"hexcode\": \"1F439\",\n    \"tags\": [\n      \"animal\",\n      \"face\",\n      \"pet\"\n    ],\n    \"emoji\": \"🐹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3714,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rabbit face\",\n    \"hexcode\": \"1F430\",\n    \"tags\": [\n      \"animal\",\n      \"bunny\",\n      \"face\",\n      \"pet\",\n      \"rabbit\"\n    ],\n    \"emoji\": \"🐰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3715,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rabbit\",\n    \"hexcode\": \"1F407\",\n    \"tags\": [\n      \"animal\",\n      \"bunny\",\n      \"pet\"\n    ],\n    \"emoji\": \"🐇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3716,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 1\n  },\n  {\n    \"label\": \"chipmunk\",\n    \"hexcode\": \"1F43F\",\n    \"tags\": [\n      \"animal\",\n      \"squirrel\"\n    ],\n    \"emoji\": \"🐿️\",\n    \"text\": \"🐿︎\",\n    \"type\": 0,\n    \"order\": 3718,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"beaver\",\n    \"hexcode\": \"1F9AB\",\n    \"tags\": [\n      \"animal\",\n      \"dam\",\n      \"teeth\"\n    ],\n    \"emoji\": \"🦫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3719,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 13\n  },\n  {\n    \"label\": \"hedgehog\",\n    \"hexcode\": \"1F994\",\n    \"tags\": [\n      \"animal\",\n      \"spiny\"\n    ],\n    \"emoji\": \"🦔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3720,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bat\",\n    \"hexcode\": \"1F987\",\n    \"tags\": [\n      \"animal\",\n      \"vampire\"\n    ],\n    \"emoji\": \"🦇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3721,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 3\n  },\n  {\n    \"label\": \"bear\",\n    \"hexcode\": \"1F43B\",\n    \"tags\": [\n      \"animal\",\n      \"face\",\n      \"grizzly\",\n      \"growl\",\n      \"honey\"\n    ],\n    \"emoji\": \"🐻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3722,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"polar bear\",\n    \"hexcode\": \"1F43B-200D-2744-FE0F\",\n    \"tags\": [\n      \"animal\",\n      \"arctic\",\n      \"bear\",\n      \"polar\",\n      \"white\"\n    ],\n    \"emoji\": \"🐻‍❄️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3723,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 13\n  },\n  {\n    \"label\": \"koala\",\n    \"hexcode\": \"1F428\",\n    \"tags\": [\n      \"animal\",\n      \"australia\",\n      \"bear\",\n      \"down\",\n      \"face\",\n      \"marsupial\",\n      \"under\"\n    ],\n    \"emoji\": \"🐨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3725,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"panda\",\n    \"hexcode\": \"1F43C\",\n    \"tags\": [\n      \"animal\",\n      \"bamboo\",\n      \"face\"\n    ],\n    \"emoji\": \"🐼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3726,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sloth\",\n    \"hexcode\": \"1F9A5\",\n    \"tags\": [\n      \"lazy\",\n      \"slow\"\n    ],\n    \"emoji\": \"🦥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3727,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"otter\",\n    \"hexcode\": \"1F9A6\",\n    \"tags\": [\n      \"animal\",\n      \"fishing\",\n      \"playful\"\n    ],\n    \"emoji\": \"🦦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3728,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"skunk\",\n    \"hexcode\": \"1F9A8\",\n    \"tags\": [\n      \"animal\",\n      \"stink\"\n    ],\n    \"emoji\": \"🦨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3729,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 12\n  },\n  {\n    \"label\": \"kangaroo\",\n    \"hexcode\": \"1F998\",\n    \"tags\": [\n      \"animal\",\n      \"joey\",\n      \"jump\",\n      \"marsupial\"\n    ],\n    \"emoji\": \"🦘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3730,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 11\n  },\n  {\n    \"label\": \"badger\",\n    \"hexcode\": \"1F9A1\",\n    \"tags\": [\n      \"animal\",\n      \"honey\",\n      \"pester\"\n    ],\n    \"emoji\": \"🦡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3731,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 11\n  },\n  {\n    \"label\": \"paw prints\",\n    \"hexcode\": \"1F43E\",\n    \"tags\": [\n      \"feet\",\n      \"paw\",\n      \"paws\",\n      \"print\",\n      \"prints\"\n    ],\n    \"emoji\": \"🐾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3732,\n    \"group\": 3,\n    \"subgroup\": 34,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"turkey\",\n    \"hexcode\": \"1F983\",\n    \"tags\": [\n      \"bird\",\n      \"gobble\",\n      \"thanksgiving\"\n    ],\n    \"emoji\": \"🦃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3733,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 1\n  },\n  {\n    \"label\": \"chicken\",\n    \"hexcode\": \"1F414\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3734,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rooster\",\n    \"hexcode\": \"1F413\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3735,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hatching chick\",\n    \"hexcode\": \"1F423\",\n    \"tags\": [\n      \"animal\",\n      \"baby\",\n      \"bird\",\n      \"chick\",\n      \"egg\",\n      \"hatching\"\n    ],\n    \"emoji\": \"🐣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3736,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"baby chick\",\n    \"hexcode\": \"1F424\",\n    \"tags\": [\n      \"animal\",\n      \"baby\",\n      \"bird\",\n      \"chick\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3737,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"front-facing baby chick\",\n    \"hexcode\": \"1F425\",\n    \"tags\": [\n      \"animal\",\n      \"baby\",\n      \"bird\",\n      \"chick\",\n      \"front-facing\",\n      \"newborn\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3738,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bird\",\n    \"hexcode\": \"1F426\",\n    \"tags\": [\n      \"animal\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐦️\",\n    \"text\": \"🐦︎\",\n    \"type\": 1,\n    \"order\": 3739,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"penguin\",\n    \"hexcode\": \"1F427\",\n    \"tags\": [\n      \"animal\",\n      \"antarctica\",\n      \"bird\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🐧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3740,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dove\",\n    \"hexcode\": \"1F54A\",\n    \"tags\": [\n      \"bird\",\n      \"fly\",\n      \"ornithology\",\n      \"peace\"\n    ],\n    \"emoji\": \"🕊️\",\n    \"text\": \"🕊︎\",\n    \"type\": 0,\n    \"order\": 3742,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"eagle\",\n    \"hexcode\": \"1F985\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🦅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3743,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 3\n  },\n  {\n    \"label\": \"duck\",\n    \"hexcode\": \"1F986\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🦆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3744,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 3\n  },\n  {\n    \"label\": \"swan\",\n    \"hexcode\": \"1F9A2\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"cygnet\",\n      \"duckling\",\n      \"ornithology\",\n      \"ugly\"\n    ],\n    \"emoji\": \"🦢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3745,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 11\n  },\n  {\n    \"label\": \"owl\",\n    \"hexcode\": \"1F989\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\",\n      \"wise\"\n    ],\n    \"emoji\": \"🦉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3746,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 3\n  },\n  {\n    \"label\": \"dodo\",\n    \"hexcode\": \"1F9A4\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"extinction\",\n      \"large\",\n      \"ornithology\"\n    ],\n    \"emoji\": \"🦤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3747,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 13\n  },\n  {\n    \"label\": \"feather\",\n    \"hexcode\": \"1FAB6\",\n    \"tags\": [\n      \"bird\",\n      \"flight\",\n      \"light\",\n      \"plumage\"\n    ],\n    \"emoji\": \"🪶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3748,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 13\n  },\n  {\n    \"label\": \"flamingo\",\n    \"hexcode\": \"1F9A9\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"flamboyant\",\n      \"ornithology\",\n      \"tropical\"\n    ],\n    \"emoji\": \"🦩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3749,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 12\n  },\n  {\n    \"label\": \"peacock\",\n    \"hexcode\": \"1F99A\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"colorful\",\n      \"ornithology\",\n      \"ostentatious\",\n      \"peahen\",\n      \"pretty\",\n      \"proud\"\n    ],\n    \"emoji\": \"🦚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3750,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 11\n  },\n  {\n    \"label\": \"parrot\",\n    \"hexcode\": \"1F99C\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"ornithology\",\n      \"pirate\",\n      \"talk\"\n    ],\n    \"emoji\": \"🦜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3751,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 11\n  },\n  {\n    \"label\": \"wing\",\n    \"hexcode\": \"1FABD\",\n    \"tags\": [\n      \"angelic\",\n      \"ascend\",\n      \"aviation\",\n      \"bird\",\n      \"fly\",\n      \"flying\",\n      \"heavenly\",\n      \"mythology\",\n      \"soar\"\n    ],\n    \"emoji\": \"🪽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3752,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 15\n  },\n  {\n    \"label\": \"black bird\",\n    \"hexcode\": \"1F426-200D-2B1B\",\n    \"tags\": [\n      \"animal\",\n      \"beak\",\n      \"bird\",\n      \"black\",\n      \"caw\",\n      \"corvid\",\n      \"crow\",\n      \"ornithology\",\n      \"raven\",\n      \"rook\"\n    ],\n    \"emoji\": \"🐦‍⬛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3753,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 15\n  },\n  {\n    \"label\": \"goose\",\n    \"hexcode\": \"1FABF\",\n    \"tags\": [\n      \"animal\",\n      \"bird\",\n      \"duck\",\n      \"flock\",\n      \"fowl\",\n      \"gaggle\",\n      \"gander\",\n      \"geese\",\n      \"honk\",\n      \"ornithology\",\n      \"silly\"\n    ],\n    \"emoji\": \"🪿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3754,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 15\n  },\n  {\n    \"label\": \"phoenix\",\n    \"hexcode\": \"1F426-200D-1F525\",\n    \"tags\": [\n      \"ascend\",\n      \"ascension\",\n      \"emerge\",\n      \"fantasy\",\n      \"firebird\",\n      \"glory\",\n      \"immortal\",\n      \"rebirth\",\n      \"reincarnation\",\n      \"reinvent\",\n      \"renewal\",\n      \"revival\",\n      \"revive\",\n      \"rise\",\n      \"transform\"\n    ],\n    \"emoji\": \"🐦‍🔥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3755,\n    \"group\": 3,\n    \"subgroup\": 35,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"frog\",\n    \"hexcode\": \"1F438\",\n    \"tags\": [\n      \"animal\",\n      \"face\"\n    ],\n    \"emoji\": \"🐸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3756,\n    \"group\": 3,\n    \"subgroup\": 36,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"crocodile\",\n    \"hexcode\": \"1F40A\",\n    \"tags\": [\n      \"animal\",\n      \"zoo\"\n    ],\n    \"emoji\": \"🐊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3757,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 1\n  },\n  {\n    \"label\": \"turtle\",\n    \"hexcode\": \"1F422\",\n    \"tags\": [\n      \"animal\",\n      \"terrapin\",\n      \"tortoise\"\n    ],\n    \"emoji\": \"🐢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3758,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"lizard\",\n    \"hexcode\": \"1F98E\",\n    \"tags\": [\n      \"animal\",\n      \"reptile\"\n    ],\n    \"emoji\": \"🦎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3759,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 3\n  },\n  {\n    \"label\": \"snake\",\n    \"hexcode\": \"1F40D\",\n    \"tags\": [\n      \"animal\",\n      \"bearer\",\n      \"ophiuchus\",\n      \"serpent\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🐍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3760,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dragon face\",\n    \"hexcode\": \"1F432\",\n    \"tags\": [\n      \"animal\",\n      \"dragon\",\n      \"face\",\n      \"fairy\",\n      \"fairytale\",\n      \"tale\"\n    ],\n    \"emoji\": \"🐲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3761,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dragon\",\n    \"hexcode\": \"1F409\",\n    \"tags\": [\n      \"animal\",\n      \"fairy\",\n      \"fairytale\",\n      \"knights\",\n      \"tale\"\n    ],\n    \"emoji\": \"🐉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3762,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 1\n  },\n  {\n    \"label\": \"sauropod\",\n    \"hexcode\": \"1F995\",\n    \"tags\": [\n      \"brachiosaurus\",\n      \"brontosaurus\",\n      \"dinosaur\",\n      \"diplodocus\"\n    ],\n    \"emoji\": \"🦕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3763,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 5\n  },\n  {\n    \"label\": \"T-Rex\",\n    \"hexcode\": \"1F996\",\n    \"tags\": [\n      \"dinosaur\",\n      \"rex\",\n      \"t\",\n      \"t-rex\",\n      \"tyrannosaurus\"\n    ],\n    \"emoji\": \"🦖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3764,\n    \"group\": 3,\n    \"subgroup\": 37,\n    \"version\": 5\n  },\n  {\n    \"label\": \"spouting whale\",\n    \"hexcode\": \"1F433\",\n    \"tags\": [\n      \"animal\",\n      \"beach\",\n      \"face\",\n      \"ocean\",\n      \"spouting\",\n      \"whale\"\n    ],\n    \"emoji\": \"🐳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3765,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"whale\",\n    \"hexcode\": \"1F40B\",\n    \"tags\": [\n      \"animal\",\n      \"beach\",\n      \"ocean\"\n    ],\n    \"emoji\": \"🐋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3766,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 1\n  },\n  {\n    \"label\": \"dolphin\",\n    \"hexcode\": \"1F42C\",\n    \"tags\": [\n      \"animal\",\n      \"beach\",\n      \"flipper\",\n      \"ocean\"\n    ],\n    \"emoji\": \"🐬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3767,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"orca\",\n    \"hexcode\": \"1FACD\",\n    \"tags\": [\n      \"marine\",\n      \"ocean\",\n      \"whale\"\n    ],\n    \"emoji\": \"🫍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3768,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 17\n  },\n  {\n    \"label\": \"seal\",\n    \"hexcode\": \"1F9AD\",\n    \"tags\": [\n      \"animal\",\n      \"lion\",\n      \"ocean\",\n      \"sea\"\n    ],\n    \"emoji\": \"🦭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3769,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 13\n  },\n  {\n    \"label\": \"fish\",\n    \"hexcode\": \"1F41F\",\n    \"tags\": [\n      \"animal\",\n      \"dinner\",\n      \"fishes\",\n      \"fishing\",\n      \"pisces\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🐟️\",\n    \"text\": \"🐟︎\",\n    \"type\": 1,\n    \"order\": 3770,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tropical fish\",\n    \"hexcode\": \"1F420\",\n    \"tags\": [\n      \"animal\",\n      \"fish\",\n      \"fishes\",\n      \"tropical\"\n    ],\n    \"emoji\": \"🐠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3771,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"blowfish\",\n    \"hexcode\": \"1F421\",\n    \"tags\": [\n      \"animal\",\n      \"fish\"\n    ],\n    \"emoji\": \"🐡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3772,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shark\",\n    \"hexcode\": \"1F988\",\n    \"tags\": [\n      \"animal\",\n      \"fish\"\n    ],\n    \"emoji\": \"🦈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3773,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 3\n  },\n  {\n    \"label\": \"octopus\",\n    \"hexcode\": \"1F419\",\n    \"tags\": [\n      \"animal\",\n      \"creature\",\n      \"ocean\"\n    ],\n    \"emoji\": \"🐙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3774,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"spiral shell\",\n    \"hexcode\": \"1F41A\",\n    \"tags\": [\n      \"animal\",\n      \"beach\",\n      \"conch\",\n      \"sea\",\n      \"shell\",\n      \"spiral\"\n    ],\n    \"emoji\": \"🐚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3775,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"coral\",\n    \"hexcode\": \"1FAB8\",\n    \"tags\": [\n      \"change\",\n      \"climate\",\n      \"ocean\",\n      \"reef\",\n      \"sea\"\n    ],\n    \"emoji\": \"🪸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3776,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 14\n  },\n  {\n    \"label\": \"jellyfish\",\n    \"hexcode\": \"1FABC\",\n    \"tags\": [\n      \"animal\",\n      \"aquarium\",\n      \"burn\",\n      \"invertebrate\",\n      \"jelly\",\n      \"life\",\n      \"marine\",\n      \"ocean\",\n      \"ouch\",\n      \"plankton\",\n      \"sea\",\n      \"sting\",\n      \"stinger\",\n      \"tentacles\"\n    ],\n    \"emoji\": \"🪼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3777,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 15\n  },\n  {\n    \"label\": \"crab\",\n    \"hexcode\": \"1F980\",\n    \"tags\": [\n      \"cancer\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🦀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3778,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 1\n  },\n  {\n    \"label\": \"lobster\",\n    \"hexcode\": \"1F99E\",\n    \"tags\": [\n      \"animal\",\n      \"bisque\",\n      \"claws\",\n      \"seafood\"\n    ],\n    \"emoji\": \"🦞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3779,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 11\n  },\n  {\n    \"label\": \"shrimp\",\n    \"hexcode\": \"1F990\",\n    \"tags\": [\n      \"food\",\n      \"shellfish\",\n      \"small\"\n    ],\n    \"emoji\": \"🦐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3780,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 3\n  },\n  {\n    \"label\": \"squid\",\n    \"hexcode\": \"1F991\",\n    \"tags\": [\n      \"animal\",\n      \"food\",\n      \"mollusk\"\n    ],\n    \"emoji\": \"🦑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3781,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 3\n  },\n  {\n    \"label\": \"oyster\",\n    \"hexcode\": \"1F9AA\",\n    \"tags\": [\n      \"diving\",\n      \"pearl\"\n    ],\n    \"emoji\": \"🦪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3782,\n    \"group\": 3,\n    \"subgroup\": 38,\n    \"version\": 12\n  },\n  {\n    \"label\": \"snail\",\n    \"hexcode\": \"1F40C\",\n    \"tags\": [\n      \"animal\",\n      \"escargot\",\n      \"garden\",\n      \"nature\",\n      \"slug\"\n    ],\n    \"emoji\": \"🐌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3783,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"butterfly\",\n    \"hexcode\": \"1F98B\",\n    \"tags\": [\n      \"insect\",\n      \"pretty\"\n    ],\n    \"emoji\": \"🦋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3784,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 3\n  },\n  {\n    \"label\": \"bug\",\n    \"hexcode\": \"1F41B\",\n    \"tags\": [\n      \"animal\",\n      \"garden\",\n      \"insect\"\n    ],\n    \"emoji\": \"🐛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3785,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ant\",\n    \"hexcode\": \"1F41C\",\n    \"tags\": [\n      \"animal\",\n      \"garden\",\n      \"insect\"\n    ],\n    \"emoji\": \"🐜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3786,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"honeybee\",\n    \"hexcode\": \"1F41D\",\n    \"tags\": [\n      \"animal\",\n      \"bee\",\n      \"bumblebee\",\n      \"honey\",\n      \"insect\",\n      \"nature\",\n      \"spring\"\n    ],\n    \"emoji\": \"🐝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3787,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"beetle\",\n    \"hexcode\": \"1FAB2\",\n    \"tags\": [\n      \"animal\",\n      \"bug\",\n      \"insect\"\n    ],\n    \"emoji\": \"🪲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3788,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 13\n  },\n  {\n    \"label\": \"lady beetle\",\n    \"hexcode\": \"1F41E\",\n    \"tags\": [\n      \"animal\",\n      \"beetle\",\n      \"garden\",\n      \"insect\",\n      \"lady\",\n      \"ladybird\",\n      \"ladybug\",\n      \"nature\"\n    ],\n    \"emoji\": \"🐞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3789,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cricket\",\n    \"hexcode\": \"1F997\",\n    \"tags\": [\n      \"animal\",\n      \"bug\",\n      \"grasshopper\",\n      \"insect\",\n      \"orthoptera\"\n    ],\n    \"emoji\": \"🦗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3790,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 5\n  },\n  {\n    \"label\": \"cockroach\",\n    \"hexcode\": \"1FAB3\",\n    \"tags\": [\n      \"animal\",\n      \"insect\",\n      \"pest\",\n      \"roach\"\n    ],\n    \"emoji\": \"🪳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3791,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 13\n  },\n  {\n    \"label\": \"spider\",\n    \"hexcode\": \"1F577\",\n    \"tags\": [\n      \"animal\",\n      \"insect\"\n    ],\n    \"emoji\": \"🕷️\",\n    \"text\": \"🕷︎\",\n    \"type\": 0,\n    \"order\": 3793,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"spider web\",\n    \"hexcode\": \"1F578\",\n    \"tags\": [\n      \"spider\",\n      \"web\"\n    ],\n    \"emoji\": \"🕸️\",\n    \"text\": \"🕸︎\",\n    \"type\": 0,\n    \"order\": 3795,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"scorpion\",\n    \"hexcode\": \"1F982\",\n    \"tags\": [\n      \"scorpio\",\n      \"scorpius\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🦂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3796,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 1\n  },\n  {\n    \"label\": \"mosquito\",\n    \"hexcode\": \"1F99F\",\n    \"tags\": [\n      \"bite\",\n      \"disease\",\n      \"fever\",\n      \"insect\",\n      \"malaria\",\n      \"pest\",\n      \"virus\"\n    ],\n    \"emoji\": \"🦟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3797,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 11\n  },\n  {\n    \"label\": \"fly\",\n    \"hexcode\": \"1FAB0\",\n    \"tags\": [\n      \"animal\",\n      \"disease\",\n      \"insect\",\n      \"maggot\",\n      \"pest\",\n      \"rotting\"\n    ],\n    \"emoji\": \"🪰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3798,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 13\n  },\n  {\n    \"label\": \"worm\",\n    \"hexcode\": \"1FAB1\",\n    \"tags\": [\n      \"animal\",\n      \"annelid\",\n      \"earthworm\",\n      \"parasite\"\n    ],\n    \"emoji\": \"🪱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3799,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 13\n  },\n  {\n    \"label\": \"microbe\",\n    \"hexcode\": \"1F9A0\",\n    \"tags\": [\n      \"amoeba\",\n      \"bacteria\",\n      \"science\",\n      \"virus\"\n    ],\n    \"emoji\": \"🦠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3800,\n    \"group\": 3,\n    \"subgroup\": 39,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bouquet\",\n    \"hexcode\": \"1F490\",\n    \"tags\": [\n      \"anniversary\",\n      \"birthday\",\n      \"date\",\n      \"flower\",\n      \"love\",\n      \"plant\",\n      \"romance\"\n    ],\n    \"emoji\": \"💐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3801,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cherry blossom\",\n    \"hexcode\": \"1F338\",\n    \"tags\": [\n      \"blossom\",\n      \"cherry\",\n      \"flower\",\n      \"plant\",\n      \"spring\",\n      \"springtime\"\n    ],\n    \"emoji\": \"🌸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3802,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white flower\",\n    \"hexcode\": \"1F4AE\",\n    \"tags\": [\n      \"flower\",\n      \"white\"\n    ],\n    \"emoji\": \"💮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3803,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"lotus\",\n    \"hexcode\": \"1FAB7\",\n    \"tags\": [\n      \"beauty\",\n      \"buddhism\",\n      \"calm\",\n      \"flower\",\n      \"hinduism\",\n      \"peace\",\n      \"purity\",\n      \"serenity\"\n    ],\n    \"emoji\": \"🪷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3804,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 14\n  },\n  {\n    \"label\": \"rosette\",\n    \"hexcode\": \"1F3F5\",\n    \"tags\": [\n      \"plant\"\n    ],\n    \"emoji\": \"🏵️\",\n    \"text\": \"🏵︎\",\n    \"type\": 0,\n    \"order\": 3806,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"rose\",\n    \"hexcode\": \"1F339\",\n    \"tags\": [\n      \"beauty\",\n      \"elegant\",\n      \"flower\",\n      \"love\",\n      \"plant\",\n      \"red\",\n      \"valentine\"\n    ],\n    \"emoji\": \"🌹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3807,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wilted flower\",\n    \"hexcode\": \"1F940\",\n    \"tags\": [\n      \"dying\",\n      \"flower\",\n      \"wilted\"\n    ],\n    \"emoji\": \"🥀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3808,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 3\n  },\n  {\n    \"label\": \"hibiscus\",\n    \"hexcode\": \"1F33A\",\n    \"tags\": [\n      \"flower\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3809,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sunflower\",\n    \"hexcode\": \"1F33B\",\n    \"tags\": [\n      \"flower\",\n      \"outdoors\",\n      \"plant\",\n      \"sun\"\n    ],\n    \"emoji\": \"🌻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3810,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"blossom\",\n    \"hexcode\": \"1F33C\",\n    \"tags\": [\n      \"buttercup\",\n      \"dandelion\",\n      \"flower\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3811,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tulip\",\n    \"hexcode\": \"1F337\",\n    \"tags\": [\n      \"blossom\",\n      \"flower\",\n      \"growth\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3812,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hyacinth\",\n    \"hexcode\": \"1FABB\",\n    \"tags\": [\n      \"bloom\",\n      \"bluebonnet\",\n      \"flower\",\n      \"indigo\",\n      \"lavender\",\n      \"lilac\",\n      \"lupine\",\n      \"plant\",\n      \"purple\",\n      \"shrub\",\n      \"snapdragon\",\n      \"spring\",\n      \"violet\"\n    ],\n    \"emoji\": \"🪻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3813,\n    \"group\": 3,\n    \"subgroup\": 40,\n    \"version\": 15\n  },\n  {\n    \"label\": \"seedling\",\n    \"hexcode\": \"1F331\",\n    \"tags\": [\n      \"plant\",\n      \"sapling\",\n      \"sprout\",\n      \"young\"\n    ],\n    \"emoji\": \"🌱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3814,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"potted plant\",\n    \"hexcode\": \"1FAB4\",\n    \"tags\": [\n      \"decor\",\n      \"grow\",\n      \"house\",\n      \"nurturing\",\n      \"plant\",\n      \"pot\",\n      \"potted\"\n    ],\n    \"emoji\": \"🪴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3815,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 13\n  },\n  {\n    \"label\": \"evergreen tree\",\n    \"hexcode\": \"1F332\",\n    \"tags\": [\n      \"christmas\",\n      \"evergreen\",\n      \"forest\",\n      \"pine\",\n      \"tree\"\n    ],\n    \"emoji\": \"🌲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3816,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 1\n  },\n  {\n    \"label\": \"deciduous tree\",\n    \"hexcode\": \"1F333\",\n    \"tags\": [\n      \"deciduous\",\n      \"forest\",\n      \"green\",\n      \"habitat\",\n      \"shedding\",\n      \"tree\"\n    ],\n    \"emoji\": \"🌳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3817,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 1\n  },\n  {\n    \"label\": \"palm tree\",\n    \"hexcode\": \"1F334\",\n    \"tags\": [\n      \"beach\",\n      \"palm\",\n      \"plant\",\n      \"tree\",\n      \"tropical\"\n    ],\n    \"emoji\": \"🌴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3818,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cactus\",\n    \"hexcode\": \"1F335\",\n    \"tags\": [\n      \"desert\",\n      \"drought\",\n      \"nature\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3819,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sheaf of rice\",\n    \"hexcode\": \"1F33E\",\n    \"tags\": [\n      \"ear\",\n      \"grain\",\n      \"grains\",\n      \"plant\",\n      \"rice\",\n      \"sheaf\"\n    ],\n    \"emoji\": \"🌾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3820,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"herb\",\n    \"hexcode\": \"1F33F\",\n    \"tags\": [\n      \"leaf\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3821,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shamrock\",\n    \"hexcode\": \"2618\",\n    \"tags\": [\n      \"irish\",\n      \"plant\"\n    ],\n    \"emoji\": \"☘️\",\n    \"text\": \"☘︎\",\n    \"type\": 0,\n    \"order\": 3823,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 1\n  },\n  {\n    \"label\": \"four leaf clover\",\n    \"hexcode\": \"1F340\",\n    \"tags\": [\n      \"4\",\n      \"clover\",\n      \"four\",\n      \"four-leaf\",\n      \"irish\",\n      \"leaf\",\n      \"lucky\",\n      \"plant\"\n    ],\n    \"emoji\": \"🍀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3824,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"maple leaf\",\n    \"hexcode\": \"1F341\",\n    \"tags\": [\n      \"falling\",\n      \"leaf\",\n      \"maple\"\n    ],\n    \"emoji\": \"🍁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3825,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fallen leaf\",\n    \"hexcode\": \"1F342\",\n    \"tags\": [\n      \"autumn\",\n      \"fall\",\n      \"fallen\",\n      \"falling\",\n      \"leaf\"\n    ],\n    \"emoji\": \"🍂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3826,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"leaf fluttering in wind\",\n    \"hexcode\": \"1F343\",\n    \"tags\": [\n      \"blow\",\n      \"flutter\",\n      \"fluttering\",\n      \"leaf\",\n      \"wind\"\n    ],\n    \"emoji\": \"🍃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3827,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"empty nest\",\n    \"hexcode\": \"1FAB9\",\n    \"tags\": [\n      \"branch\",\n      \"empty\",\n      \"home\",\n      \"nest\",\n      \"nesting\"\n    ],\n    \"emoji\": \"🪹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3828,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 14\n  },\n  {\n    \"label\": \"nest with eggs\",\n    \"hexcode\": \"1FABA\",\n    \"tags\": [\n      \"bird\",\n      \"branch\",\n      \"egg\",\n      \"eggs\",\n      \"nest\",\n      \"nesting\"\n    ],\n    \"emoji\": \"🪺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3829,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 14\n  },\n  {\n    \"label\": \"mushroom\",\n    \"hexcode\": \"1F344\",\n    \"tags\": [\n      \"fungus\",\n      \"toadstool\"\n    ],\n    \"emoji\": \"🍄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3830,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"leafless tree\",\n    \"hexcode\": \"1FABE\",\n    \"tags\": [\n      \"bare\",\n      \"barren\",\n      \"branches\",\n      \"dead\",\n      \"drought\",\n      \"leafless\",\n      \"tree\",\n      \"trunk\",\n      \"winter\",\n      \"wood\"\n    ],\n    \"emoji\": \"🪾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3831,\n    \"group\": 3,\n    \"subgroup\": 41,\n    \"version\": 16\n  },\n  {\n    \"label\": \"grapes\",\n    \"hexcode\": \"1F347\",\n    \"tags\": [\n      \"dionysus\",\n      \"fruit\",\n      \"grape\"\n    ],\n    \"emoji\": \"🍇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3832,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"melon\",\n    \"hexcode\": \"1F348\",\n    \"tags\": [\n      \"cantaloupe\",\n      \"fruit\"\n    ],\n    \"emoji\": \"🍈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3833,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"watermelon\",\n    \"hexcode\": \"1F349\",\n    \"tags\": [\n      \"fruit\"\n    ],\n    \"emoji\": \"🍉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3834,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tangerine\",\n    \"hexcode\": \"1F34A\",\n    \"tags\": [\n      \"c\",\n      \"citrus\",\n      \"fruit\",\n      \"nectarine\",\n      \"orange\",\n      \"vitamin\"\n    ],\n    \"emoji\": \"🍊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3835,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"lemon\",\n    \"hexcode\": \"1F34B\",\n    \"tags\": [\n      \"citrus\",\n      \"fruit\",\n      \"sour\"\n    ],\n    \"emoji\": \"🍋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3836,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 1\n  },\n  {\n    \"label\": \"lime\",\n    \"hexcode\": \"1F34B-200D-1F7E9\",\n    \"tags\": [\n      \"acidity\",\n      \"citrus\",\n      \"cocktail\",\n      \"fruit\",\n      \"garnish\",\n      \"key\",\n      \"margarita\",\n      \"mojito\",\n      \"refreshing\",\n      \"salsa\",\n      \"sour\",\n      \"tangy\",\n      \"tequila\",\n      \"tropical\",\n      \"zest\"\n    ],\n    \"emoji\": \"🍋‍🟩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3837,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"banana\",\n    \"hexcode\": \"1F34C\",\n    \"tags\": [\n      \"fruit\",\n      \"potassium\"\n    ],\n    \"emoji\": \"🍌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3838,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pineapple\",\n    \"hexcode\": \"1F34D\",\n    \"tags\": [\n      \"colada\",\n      \"fruit\",\n      \"pina\",\n      \"tropical\"\n    ],\n    \"emoji\": \"🍍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3839,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mango\",\n    \"hexcode\": \"1F96D\",\n    \"tags\": [\n      \"food\",\n      \"fruit\",\n      \"tropical\"\n    ],\n    \"emoji\": \"🥭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3840,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 11\n  },\n  {\n    \"label\": \"red apple\",\n    \"hexcode\": \"1F34E\",\n    \"tags\": [\n      \"apple\",\n      \"diet\",\n      \"food\",\n      \"fruit\",\n      \"health\",\n      \"red\",\n      \"ripe\"\n    ],\n    \"emoji\": \"🍎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3841,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"green apple\",\n    \"hexcode\": \"1F34F\",\n    \"tags\": [\n      \"apple\",\n      \"fruit\",\n      \"green\"\n    ],\n    \"emoji\": \"🍏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3842,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pear\",\n    \"hexcode\": \"1F350\",\n    \"tags\": [\n      \"fruit\"\n    ],\n    \"emoji\": \"🍐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3843,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 1\n  },\n  {\n    \"label\": \"peach\",\n    \"hexcode\": \"1F351\",\n    \"tags\": [\n      \"fruit\"\n    ],\n    \"emoji\": \"🍑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3844,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cherries\",\n    \"hexcode\": \"1F352\",\n    \"tags\": [\n      \"berries\",\n      \"cherry\",\n      \"fruit\",\n      \"red\"\n    ],\n    \"emoji\": \"🍒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3845,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"strawberry\",\n    \"hexcode\": \"1F353\",\n    \"tags\": [\n      \"berry\",\n      \"fruit\"\n    ],\n    \"emoji\": \"🍓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3846,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"blueberries\",\n    \"hexcode\": \"1FAD0\",\n    \"tags\": [\n      \"berries\",\n      \"berry\",\n      \"bilberry\",\n      \"blue\",\n      \"blueberry\",\n      \"food\",\n      \"fruit\"\n    ],\n    \"emoji\": \"🫐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3847,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 13\n  },\n  {\n    \"label\": \"kiwi fruit\",\n    \"hexcode\": \"1F95D\",\n    \"tags\": [\n      \"food\",\n      \"fruit\",\n      \"kiwi\"\n    ],\n    \"emoji\": \"🥝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3848,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 3\n  },\n  {\n    \"label\": \"tomato\",\n    \"hexcode\": \"1F345\",\n    \"tags\": [\n      \"food\",\n      \"fruit\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🍅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3849,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"olive\",\n    \"hexcode\": \"1FAD2\",\n    \"tags\": [\n      \"food\"\n    ],\n    \"emoji\": \"🫒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3850,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 13\n  },\n  {\n    \"label\": \"coconut\",\n    \"hexcode\": \"1F965\",\n    \"tags\": [\n      \"colada\",\n      \"palm\",\n      \"piña\"\n    ],\n    \"emoji\": \"🥥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3851,\n    \"group\": 4,\n    \"subgroup\": 42,\n    \"version\": 5\n  },\n  {\n    \"label\": \"avocado\",\n    \"hexcode\": \"1F951\",\n    \"tags\": [\n      \"food\",\n      \"fruit\"\n    ],\n    \"emoji\": \"🥑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3852,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 3\n  },\n  {\n    \"label\": \"eggplant\",\n    \"hexcode\": \"1F346\",\n    \"tags\": [\n      \"aubergine\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🍆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3853,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"potato\",\n    \"hexcode\": \"1F954\",\n    \"tags\": [\n      \"food\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🥔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3854,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 3\n  },\n  {\n    \"label\": \"carrot\",\n    \"hexcode\": \"1F955\",\n    \"tags\": [\n      \"food\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🥕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3855,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 3\n  },\n  {\n    \"label\": \"ear of corn\",\n    \"hexcode\": \"1F33D\",\n    \"tags\": [\n      \"corn\",\n      \"crops\",\n      \"ear\",\n      \"farm\",\n      \"maize\",\n      \"maze\"\n    ],\n    \"emoji\": \"🌽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3856,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hot pepper\",\n    \"hexcode\": \"1F336\",\n    \"tags\": [\n      \"hot\",\n      \"pepper\"\n    ],\n    \"emoji\": \"🌶️\",\n    \"text\": \"🌶︎\",\n    \"type\": 0,\n    \"order\": 3858,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"bell pepper\",\n    \"hexcode\": \"1FAD1\",\n    \"tags\": [\n      \"bell\",\n      \"capsicum\",\n      \"food\",\n      \"pepper\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🫑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3859,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 13\n  },\n  {\n    \"label\": \"cucumber\",\n    \"hexcode\": \"1F952\",\n    \"tags\": [\n      \"food\",\n      \"pickle\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🥒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3860,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 3\n  },\n  {\n    \"label\": \"leafy green\",\n    \"hexcode\": \"1F96C\",\n    \"tags\": [\n      \"bok\",\n      \"burgers\",\n      \"cabbage\",\n      \"choy\",\n      \"green\",\n      \"kale\",\n      \"leafy\",\n      \"lettuce\",\n      \"salad\"\n    ],\n    \"emoji\": \"🥬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3861,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 11\n  },\n  {\n    \"label\": \"broccoli\",\n    \"hexcode\": \"1F966\",\n    \"tags\": [\n      \"cabbage\",\n      \"wild\"\n    ],\n    \"emoji\": \"🥦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3862,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 5\n  },\n  {\n    \"label\": \"garlic\",\n    \"hexcode\": \"1F9C4\",\n    \"tags\": [\n      \"flavoring\"\n    ],\n    \"emoji\": \"🧄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3863,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 12\n  },\n  {\n    \"label\": \"onion\",\n    \"hexcode\": \"1F9C5\",\n    \"tags\": [\n      \"flavoring\"\n    ],\n    \"emoji\": \"🧅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3864,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 12\n  },\n  {\n    \"label\": \"peanuts\",\n    \"hexcode\": \"1F95C\",\n    \"tags\": [\n      \"food\",\n      \"nut\",\n      \"peanut\",\n      \"vegetable\"\n    ],\n    \"emoji\": \"🥜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3865,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 3\n  },\n  {\n    \"label\": \"beans\",\n    \"hexcode\": \"1FAD8\",\n    \"tags\": [\n      \"food\",\n      \"kidney\",\n      \"legume\",\n      \"small\"\n    ],\n    \"emoji\": \"🫘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3866,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 14\n  },\n  {\n    \"label\": \"chestnut\",\n    \"hexcode\": \"1F330\",\n    \"tags\": [\n      \"almond\",\n      \"plant\"\n    ],\n    \"emoji\": \"🌰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3867,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ginger root\",\n    \"hexcode\": \"1FADA\",\n    \"tags\": [\n      \"beer\",\n      \"ginger\",\n      \"health\",\n      \"herb\",\n      \"natural\",\n      \"root\",\n      \"spice\"\n    ],\n    \"emoji\": \"🫚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3868,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 15\n  },\n  {\n    \"label\": \"pea pod\",\n    \"hexcode\": \"1FADB\",\n    \"tags\": [\n      \"beans\",\n      \"beanstalk\",\n      \"edamame\",\n      \"legume\",\n      \"pea\",\n      \"pod\",\n      \"soybean\",\n      \"vegetable\",\n      \"veggie\"\n    ],\n    \"emoji\": \"🫛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3869,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 15\n  },\n  {\n    \"label\": \"brown mushroom\",\n    \"hexcode\": \"1F344-200D-1F7EB\",\n    \"tags\": [\n      \"food\",\n      \"fungi\",\n      \"fungus\",\n      \"mushroom\",\n      \"nature\",\n      \"pizza\",\n      \"portobello\",\n      \"shiitake\",\n      \"shroom\",\n      \"spore\",\n      \"sprout\",\n      \"toppings\",\n      \"truffle\",\n      \"vegetable\",\n      \"vegetarian\",\n      \"veggie\"\n    ],\n    \"emoji\": \"🍄‍🟫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3870,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"root vegetable\",\n    \"hexcode\": \"1FADC\",\n    \"tags\": [\n      \"beet\",\n      \"food\",\n      \"garden\",\n      \"radish\",\n      \"root\",\n      \"salad\",\n      \"turnip\",\n      \"vegetable\",\n      \"vegetarian\"\n    ],\n    \"emoji\": \"🫜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3871,\n    \"group\": 4,\n    \"subgroup\": 43,\n    \"version\": 16\n  },\n  {\n    \"label\": \"bread\",\n    \"hexcode\": \"1F35E\",\n    \"tags\": [\n      \"carbs\",\n      \"food\",\n      \"grain\",\n      \"loaf\",\n      \"restaurant\",\n      \"toast\",\n      \"wheat\"\n    ],\n    \"emoji\": \"🍞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3872,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"croissant\",\n    \"hexcode\": \"1F950\",\n    \"tags\": [\n      \"bread\",\n      \"breakfast\",\n      \"crescent\",\n      \"food\",\n      \"french\",\n      \"roll\"\n    ],\n    \"emoji\": \"🥐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3873,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"baguette bread\",\n    \"hexcode\": \"1F956\",\n    \"tags\": [\n      \"baguette\",\n      \"bread\",\n      \"food\",\n      \"french\"\n    ],\n    \"emoji\": \"🥖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3874,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"flatbread\",\n    \"hexcode\": \"1FAD3\",\n    \"tags\": [\n      \"arepa\",\n      \"bread\",\n      \"food\",\n      \"gordita\",\n      \"lavash\",\n      \"naan\",\n      \"pita\"\n    ],\n    \"emoji\": \"🫓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3875,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 13\n  },\n  {\n    \"label\": \"pretzel\",\n    \"hexcode\": \"1F968\",\n    \"tags\": [\n      \"convoluted\",\n      \"twisted\"\n    ],\n    \"emoji\": \"🥨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3876,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bagel\",\n    \"hexcode\": \"1F96F\",\n    \"tags\": [\n      \"bakery\",\n      \"bread\",\n      \"breakfast\",\n      \"schmear\"\n    ],\n    \"emoji\": \"🥯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3877,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 11\n  },\n  {\n    \"label\": \"pancakes\",\n    \"hexcode\": \"1F95E\",\n    \"tags\": [\n      \"breakfast\",\n      \"crêpe\",\n      \"food\",\n      \"hotcake\",\n      \"pancake\"\n    ],\n    \"emoji\": \"🥞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3878,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"waffle\",\n    \"hexcode\": \"1F9C7\",\n    \"tags\": [\n      \"breakfast\",\n      \"indecisive\",\n      \"iron\"\n    ],\n    \"emoji\": \"🧇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3879,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 12\n  },\n  {\n    \"label\": \"cheese wedge\",\n    \"hexcode\": \"1F9C0\",\n    \"tags\": [\n      \"cheese\",\n      \"wedge\"\n    ],\n    \"emoji\": \"🧀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3880,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 1\n  },\n  {\n    \"label\": \"meat on bone\",\n    \"hexcode\": \"1F356\",\n    \"tags\": [\n      \"bone\",\n      \"meat\"\n    ],\n    \"emoji\": \"🍖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3881,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"poultry leg\",\n    \"hexcode\": \"1F357\",\n    \"tags\": [\n      \"bone\",\n      \"chicken\",\n      \"drumstick\",\n      \"hungry\",\n      \"leg\",\n      \"poultry\",\n      \"turkey\"\n    ],\n    \"emoji\": \"🍗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3882,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cut of meat\",\n    \"hexcode\": \"1F969\",\n    \"tags\": [\n      \"chop\",\n      \"cut\",\n      \"lambchop\",\n      \"meat\",\n      \"porkchop\",\n      \"red\",\n      \"steak\"\n    ],\n    \"emoji\": \"🥩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3883,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bacon\",\n    \"hexcode\": \"1F953\",\n    \"tags\": [\n      \"breakfast\",\n      \"food\",\n      \"meat\"\n    ],\n    \"emoji\": \"🥓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3884,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"hamburger\",\n    \"hexcode\": \"1F354\",\n    \"tags\": [\n      \"burger\",\n      \"eat\",\n      \"fast\",\n      \"food\",\n      \"hungry\"\n    ],\n    \"emoji\": \"🍔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3885,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"french fries\",\n    \"hexcode\": \"1F35F\",\n    \"tags\": [\n      \"fast\",\n      \"food\",\n      \"french\",\n      \"fries\"\n    ],\n    \"emoji\": \"🍟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3886,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pizza\",\n    \"hexcode\": \"1F355\",\n    \"tags\": [\n      \"cheese\",\n      \"food\",\n      \"hungry\",\n      \"pepperoni\",\n      \"slice\"\n    ],\n    \"emoji\": \"🍕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3887,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hot dog\",\n    \"hexcode\": \"1F32D\",\n    \"tags\": [\n      \"dog\",\n      \"frankfurter\",\n      \"hot\",\n      \"hotdog\",\n      \"sausage\"\n    ],\n    \"emoji\": \"🌭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3888,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 1\n  },\n  {\n    \"label\": \"sandwich\",\n    \"hexcode\": \"1F96A\",\n    \"tags\": [\n      \"bread\"\n    ],\n    \"emoji\": \"🥪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3889,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 5\n  },\n  {\n    \"label\": \"taco\",\n    \"hexcode\": \"1F32E\",\n    \"tags\": [\n      \"mexican\"\n    ],\n    \"emoji\": \"🌮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3890,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 1\n  },\n  {\n    \"label\": \"burrito\",\n    \"hexcode\": \"1F32F\",\n    \"tags\": [\n      \"mexican\",\n      \"wrap\"\n    ],\n    \"emoji\": \"🌯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3891,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 1\n  },\n  {\n    \"label\": \"tamale\",\n    \"hexcode\": \"1FAD4\",\n    \"tags\": [\n      \"food\",\n      \"mexican\",\n      \"pamonha\",\n      \"wrapped\"\n    ],\n    \"emoji\": \"🫔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3892,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 13\n  },\n  {\n    \"label\": \"stuffed flatbread\",\n    \"hexcode\": \"1F959\",\n    \"tags\": [\n      \"falafel\",\n      \"flatbread\",\n      \"food\",\n      \"gyro\",\n      \"kebab\",\n      \"stuffed\"\n    ],\n    \"emoji\": \"🥙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3893,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"falafel\",\n    \"hexcode\": \"1F9C6\",\n    \"tags\": [\n      \"chickpea\",\n      \"meatball\"\n    ],\n    \"emoji\": \"🧆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3894,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 12\n  },\n  {\n    \"label\": \"egg\",\n    \"hexcode\": \"1F95A\",\n    \"tags\": [\n      \"breakfast\",\n      \"food\"\n    ],\n    \"emoji\": \"🥚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3895,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"cooking\",\n    \"hexcode\": \"1F373\",\n    \"tags\": [\n      \"breakfast\",\n      \"easy\",\n      \"egg\",\n      \"fry\",\n      \"frying\",\n      \"over\",\n      \"pan\",\n      \"restaurant\",\n      \"side\",\n      \"sunny\",\n      \"up\"\n    ],\n    \"emoji\": \"🍳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3896,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shallow pan of food\",\n    \"hexcode\": \"1F958\",\n    \"tags\": [\n      \"casserole\",\n      \"food\",\n      \"paella\",\n      \"pan\",\n      \"shallow\"\n    ],\n    \"emoji\": \"🥘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3897,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"pot of food\",\n    \"hexcode\": \"1F372\",\n    \"tags\": [\n      \"food\",\n      \"pot\",\n      \"soup\",\n      \"stew\"\n    ],\n    \"emoji\": \"🍲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3898,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fondue\",\n    \"hexcode\": \"1FAD5\",\n    \"tags\": [\n      \"cheese\",\n      \"chocolate\",\n      \"food\",\n      \"melted\",\n      \"pot\",\n      \"ski\"\n    ],\n    \"emoji\": \"🫕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3899,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 13\n  },\n  {\n    \"label\": \"bowl with spoon\",\n    \"hexcode\": \"1F963\",\n    \"tags\": [\n      \"bowl\",\n      \"breakfast\",\n      \"cereal\",\n      \"congee\",\n      \"oatmeal\",\n      \"porridge\",\n      \"spoon\"\n    ],\n    \"emoji\": \"🥣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3900,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 5\n  },\n  {\n    \"label\": \"green salad\",\n    \"hexcode\": \"1F957\",\n    \"tags\": [\n      \"food\",\n      \"green\",\n      \"salad\"\n    ],\n    \"emoji\": \"🥗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3901,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 3\n  },\n  {\n    \"label\": \"popcorn\",\n    \"hexcode\": \"1F37F\",\n    \"tags\": [\n      \"corn\",\n      \"movie\",\n      \"pop\"\n    ],\n    \"emoji\": \"🍿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3902,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 1\n  },\n  {\n    \"label\": \"butter\",\n    \"hexcode\": \"1F9C8\",\n    \"tags\": [\n      \"dairy\"\n    ],\n    \"emoji\": \"🧈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3903,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 12\n  },\n  {\n    \"label\": \"salt\",\n    \"hexcode\": \"1F9C2\",\n    \"tags\": [\n      \"condiment\",\n      \"flavor\",\n      \"mad\",\n      \"salty\",\n      \"shaker\",\n      \"taste\",\n      \"upset\"\n    ],\n    \"emoji\": \"🧂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3904,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 11\n  },\n  {\n    \"label\": \"canned food\",\n    \"hexcode\": \"1F96B\",\n    \"tags\": [\n      \"can\",\n      \"canned\",\n      \"food\"\n    ],\n    \"emoji\": \"🥫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3905,\n    \"group\": 4,\n    \"subgroup\": 44,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bento box\",\n    \"hexcode\": \"1F371\",\n    \"tags\": [\n      \"bento\",\n      \"box\",\n      \"food\"\n    ],\n    \"emoji\": \"🍱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3906,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rice cracker\",\n    \"hexcode\": \"1F358\",\n    \"tags\": [\n      \"cracker\",\n      \"food\",\n      \"rice\"\n    ],\n    \"emoji\": \"🍘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3907,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rice ball\",\n    \"hexcode\": \"1F359\",\n    \"tags\": [\n      \"ball\",\n      \"food\",\n      \"japanese\",\n      \"rice\"\n    ],\n    \"emoji\": \"🍙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3908,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cooked rice\",\n    \"hexcode\": \"1F35A\",\n    \"tags\": [\n      \"cooked\",\n      \"food\",\n      \"rice\"\n    ],\n    \"emoji\": \"🍚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3909,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"curry rice\",\n    \"hexcode\": \"1F35B\",\n    \"tags\": [\n      \"curry\",\n      \"food\",\n      \"rice\"\n    ],\n    \"emoji\": \"🍛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3910,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"steaming bowl\",\n    \"hexcode\": \"1F35C\",\n    \"tags\": [\n      \"bowl\",\n      \"chopsticks\",\n      \"food\",\n      \"noodle\",\n      \"pho\",\n      \"ramen\",\n      \"soup\",\n      \"steaming\"\n    ],\n    \"emoji\": \"🍜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3911,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"spaghetti\",\n    \"hexcode\": \"1F35D\",\n    \"tags\": [\n      \"food\",\n      \"meatballs\",\n      \"pasta\",\n      \"restaurant\"\n    ],\n    \"emoji\": \"🍝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3912,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"roasted sweet potato\",\n    \"hexcode\": \"1F360\",\n    \"tags\": [\n      \"food\",\n      \"potato\",\n      \"roasted\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3913,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"oden\",\n    \"hexcode\": \"1F362\",\n    \"tags\": [\n      \"food\",\n      \"kebab\",\n      \"restaurant\",\n      \"seafood\",\n      \"skewer\",\n      \"stick\"\n    ],\n    \"emoji\": \"🍢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3914,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sushi\",\n    \"hexcode\": \"1F363\",\n    \"tags\": [\n      \"food\"\n    ],\n    \"emoji\": \"🍣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3915,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fried shrimp\",\n    \"hexcode\": \"1F364\",\n    \"tags\": [\n      \"fried\",\n      \"prawn\",\n      \"shrimp\",\n      \"tempura\"\n    ],\n    \"emoji\": \"🍤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3916,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fish cake with swirl\",\n    \"hexcode\": \"1F365\",\n    \"tags\": [\n      \"cake\",\n      \"fish\",\n      \"food\",\n      \"pastry\",\n      \"restaurant\",\n      \"swirl\"\n    ],\n    \"emoji\": \"🍥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3917,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"moon cake\",\n    \"hexcode\": \"1F96E\",\n    \"tags\": [\n      \"autumn\",\n      \"cake\",\n      \"festival\",\n      \"moon\",\n      \"yuèbǐng\"\n    ],\n    \"emoji\": \"🥮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3918,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 11\n  },\n  {\n    \"label\": \"dango\",\n    \"hexcode\": \"1F361\",\n    \"tags\": [\n      \"dessert\",\n      \"japanese\",\n      \"skewer\",\n      \"stick\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3919,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dumpling\",\n    \"hexcode\": \"1F95F\",\n    \"tags\": [\n      \"empanada\",\n      \"gyōza\",\n      \"jiaozi\",\n      \"pierogi\",\n      \"potsticker\"\n    ],\n    \"emoji\": \"🥟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3920,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 5\n  },\n  {\n    \"label\": \"fortune cookie\",\n    \"hexcode\": \"1F960\",\n    \"tags\": [\n      \"cookie\",\n      \"fortune\",\n      \"prophecy\"\n    ],\n    \"emoji\": \"🥠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3921,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 5\n  },\n  {\n    \"label\": \"takeout box\",\n    \"hexcode\": \"1F961\",\n    \"tags\": [\n      \"box\",\n      \"chopsticks\",\n      \"delivery\",\n      \"food\",\n      \"oyster\",\n      \"pail\",\n      \"takeout\"\n    ],\n    \"emoji\": \"🥡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3922,\n    \"group\": 4,\n    \"subgroup\": 45,\n    \"version\": 5\n  },\n  {\n    \"label\": \"soft ice cream\",\n    \"hexcode\": \"1F366\",\n    \"tags\": [\n      \"cream\",\n      \"dessert\",\n      \"food\",\n      \"ice\",\n      \"icecream\",\n      \"restaurant\",\n      \"serve\",\n      \"soft\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3923,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shaved ice\",\n    \"hexcode\": \"1F367\",\n    \"tags\": [\n      \"dessert\",\n      \"ice\",\n      \"restaurant\",\n      \"shaved\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3924,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ice cream\",\n    \"hexcode\": \"1F368\",\n    \"tags\": [\n      \"cream\",\n      \"dessert\",\n      \"food\",\n      \"ice\",\n      \"restaurant\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3925,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"doughnut\",\n    \"hexcode\": \"1F369\",\n    \"tags\": [\n      \"breakfast\",\n      \"dessert\",\n      \"donut\",\n      \"food\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3926,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cookie\",\n    \"hexcode\": \"1F36A\",\n    \"tags\": [\n      \"chip\",\n      \"chocolate\",\n      \"dessert\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3927,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"birthday cake\",\n    \"hexcode\": \"1F382\",\n    \"tags\": [\n      \"bday\",\n      \"birthday\",\n      \"cake\",\n      \"celebration\",\n      \"dessert\",\n      \"happy\",\n      \"pastry\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🎂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3928,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shortcake\",\n    \"hexcode\": \"1F370\",\n    \"tags\": [\n      \"cake\",\n      \"dessert\",\n      \"pastry\",\n      \"slice\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3929,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cupcake\",\n    \"hexcode\": \"1F9C1\",\n    \"tags\": [\n      \"bakery\",\n      \"dessert\",\n      \"sprinkles\",\n      \"sugar\",\n      \"sweet\",\n      \"treat\"\n    ],\n    \"emoji\": \"🧁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3930,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 11\n  },\n  {\n    \"label\": \"pie\",\n    \"hexcode\": \"1F967\",\n    \"tags\": [\n      \"apple\",\n      \"filling\",\n      \"fruit\",\n      \"meat\",\n      \"pastry\",\n      \"pumpkin\",\n      \"slice\"\n    ],\n    \"emoji\": \"🥧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3931,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 5\n  },\n  {\n    \"label\": \"chocolate bar\",\n    \"hexcode\": \"1F36B\",\n    \"tags\": [\n      \"bar\",\n      \"candy\",\n      \"chocolate\",\n      \"dessert\",\n      \"halloween\",\n      \"sweet\",\n      \"tooth\"\n    ],\n    \"emoji\": \"🍫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3932,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"candy\",\n    \"hexcode\": \"1F36C\",\n    \"tags\": [\n      \"cavities\",\n      \"dessert\",\n      \"halloween\",\n      \"restaurant\",\n      \"sweet\",\n      \"tooth\",\n      \"wrapper\"\n    ],\n    \"emoji\": \"🍬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3933,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"lollipop\",\n    \"hexcode\": \"1F36D\",\n    \"tags\": [\n      \"candy\",\n      \"dessert\",\n      \"food\",\n      \"restaurant\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3934,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"custard\",\n    \"hexcode\": \"1F36E\",\n    \"tags\": [\n      \"dessert\",\n      \"pudding\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3935,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"honey pot\",\n    \"hexcode\": \"1F36F\",\n    \"tags\": [\n      \"barrel\",\n      \"bear\",\n      \"food\",\n      \"honey\",\n      \"honeypot\",\n      \"jar\",\n      \"pot\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🍯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3936,\n    \"group\": 4,\n    \"subgroup\": 46,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"baby bottle\",\n    \"hexcode\": \"1F37C\",\n    \"tags\": [\n      \"babies\",\n      \"baby\",\n      \"birth\",\n      \"born\",\n      \"bottle\",\n      \"drink\",\n      \"infant\",\n      \"milk\",\n      \"newborn\"\n    ],\n    \"emoji\": \"🍼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3937,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 1\n  },\n  {\n    \"label\": \"glass of milk\",\n    \"hexcode\": \"1F95B\",\n    \"tags\": [\n      \"drink\",\n      \"glass\",\n      \"milk\"\n    ],\n    \"emoji\": \"🥛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3938,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 3\n  },\n  {\n    \"label\": \"hot beverage\",\n    \"hexcode\": \"2615\",\n    \"tags\": [\n      \"beverage\",\n      \"cafe\",\n      \"caffeine\",\n      \"chai\",\n      \"coffee\",\n      \"drink\",\n      \"hot\",\n      \"morning\",\n      \"steaming\",\n      \"tea\"\n    ],\n    \"emoji\": \"☕️\",\n    \"text\": \"☕︎\",\n    \"type\": 1,\n    \"order\": 3939,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"teapot\",\n    \"hexcode\": \"1FAD6\",\n    \"tags\": [\n      \"brew\",\n      \"drink\",\n      \"food\",\n      \"pot\",\n      \"tea\"\n    ],\n    \"emoji\": \"🫖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3940,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 13\n  },\n  {\n    \"label\": \"teacup without handle\",\n    \"hexcode\": \"1F375\",\n    \"tags\": [\n      \"beverage\",\n      \"cup\",\n      \"drink\",\n      \"handle\",\n      \"oolong\",\n      \"tea\",\n      \"teacup\"\n    ],\n    \"emoji\": \"🍵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3941,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sake\",\n    \"hexcode\": \"1F376\",\n    \"tags\": [\n      \"bar\",\n      \"beverage\",\n      \"bottle\",\n      \"cup\",\n      \"drink\",\n      \"restaurant\"\n    ],\n    \"emoji\": \"🍶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3942,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bottle with popping cork\",\n    \"hexcode\": \"1F37E\",\n    \"tags\": [\n      \"bar\",\n      \"bottle\",\n      \"cork\",\n      \"drink\",\n      \"popping\"\n    ],\n    \"emoji\": \"🍾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3943,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 1\n  },\n  {\n    \"label\": \"wine glass\",\n    \"hexcode\": \"1F377\",\n    \"tags\": [\n      \"alcohol\",\n      \"bar\",\n      \"beverage\",\n      \"booze\",\n      \"club\",\n      \"drink\",\n      \"drinking\",\n      \"drinks\",\n      \"glass\",\n      \"restaurant\",\n      \"wine\"\n    ],\n    \"emoji\": \"🍷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3944,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cocktail glass\",\n    \"hexcode\": \"1F378\",\n    \"tags\": [\n      \"alcohol\",\n      \"bar\",\n      \"booze\",\n      \"club\",\n      \"cocktail\",\n      \"drink\",\n      \"drinking\",\n      \"drinks\",\n      \"glass\",\n      \"mad\",\n      \"martini\",\n      \"men\"\n    ],\n    \"emoji\": \"🍸️\",\n    \"text\": \"🍸︎\",\n    \"type\": 1,\n    \"order\": 3945,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tropical drink\",\n    \"hexcode\": \"1F379\",\n    \"tags\": [\n      \"alcohol\",\n      \"bar\",\n      \"booze\",\n      \"club\",\n      \"cocktail\",\n      \"drink\",\n      \"drinking\",\n      \"drinks\",\n      \"drunk\",\n      \"mai\",\n      \"party\",\n      \"tai\",\n      \"tropical\",\n      \"tropics\"\n    ],\n    \"emoji\": \"🍹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3946,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"beer mug\",\n    \"hexcode\": \"1F37A\",\n    \"tags\": [\n      \"alcohol\",\n      \"ale\",\n      \"bar\",\n      \"beer\",\n      \"booze\",\n      \"drink\",\n      \"drinking\",\n      \"drinks\",\n      \"mug\",\n      \"octoberfest\",\n      \"oktoberfest\",\n      \"pint\",\n      \"stein\",\n      \"summer\"\n    ],\n    \"emoji\": \"🍺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3947,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clinking beer mugs\",\n    \"hexcode\": \"1F37B\",\n    \"tags\": [\n      \"alcohol\",\n      \"bar\",\n      \"beer\",\n      \"booze\",\n      \"bottoms\",\n      \"cheers\",\n      \"clink\",\n      \"clinking\",\n      \"drinking\",\n      \"drinks\",\n      \"mugs\"\n    ],\n    \"emoji\": \"🍻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3948,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clinking glasses\",\n    \"hexcode\": \"1F942\",\n    \"tags\": [\n      \"celebrate\",\n      \"clink\",\n      \"clinking\",\n      \"drink\",\n      \"glass\",\n      \"glasses\"\n    ],\n    \"emoji\": \"🥂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3949,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 3\n  },\n  {\n    \"label\": \"tumbler glass\",\n    \"hexcode\": \"1F943\",\n    \"tags\": [\n      \"glass\",\n      \"liquor\",\n      \"scotch\",\n      \"shot\",\n      \"tumbler\",\n      \"whiskey\",\n      \"whisky\"\n    ],\n    \"emoji\": \"🥃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3950,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 3\n  },\n  {\n    \"label\": \"pouring liquid\",\n    \"hexcode\": \"1FAD7\",\n    \"tags\": [\n      \"accident\",\n      \"drink\",\n      \"empty\",\n      \"glass\",\n      \"liquid\",\n      \"oops\",\n      \"pour\",\n      \"pouring\",\n      \"spill\",\n      \"water\"\n    ],\n    \"emoji\": \"🫗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3951,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 14\n  },\n  {\n    \"label\": \"cup with straw\",\n    \"hexcode\": \"1F964\",\n    \"tags\": [\n      \"cup\",\n      \"drink\",\n      \"juice\",\n      \"malt\",\n      \"soda\",\n      \"soft\",\n      \"straw\",\n      \"water\"\n    ],\n    \"emoji\": \"🥤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3952,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bubble tea\",\n    \"hexcode\": \"1F9CB\",\n    \"tags\": [\n      \"boba\",\n      \"bubble\",\n      \"food\",\n      \"milk\",\n      \"pearl\",\n      \"tea\"\n    ],\n    \"emoji\": \"🧋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3953,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 13\n  },\n  {\n    \"label\": \"beverage box\",\n    \"hexcode\": \"1F9C3\",\n    \"tags\": [\n      \"beverage\",\n      \"box\",\n      \"juice\",\n      \"straw\",\n      \"sweet\"\n    ],\n    \"emoji\": \"🧃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3954,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 12\n  },\n  {\n    \"label\": \"mate\",\n    \"hexcode\": \"1F9C9\",\n    \"tags\": [\n      \"drink\"\n    ],\n    \"emoji\": \"🧉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3955,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 12\n  },\n  {\n    \"label\": \"ice\",\n    \"hexcode\": \"1F9CA\",\n    \"tags\": [\n      \"cold\",\n      \"cube\",\n      \"iceberg\"\n    ],\n    \"emoji\": \"🧊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3956,\n    \"group\": 4,\n    \"subgroup\": 47,\n    \"version\": 12\n  },\n  {\n    \"label\": \"chopsticks\",\n    \"hexcode\": \"1F962\",\n    \"tags\": [\n      \"hashi\",\n      \"jeotgarak\",\n      \"kuaizi\"\n    ],\n    \"emoji\": \"🥢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3957,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 5\n  },\n  {\n    \"label\": \"fork and knife with plate\",\n    \"hexcode\": \"1F37D\",\n    \"tags\": [\n      \"cooking\",\n      \"dinner\",\n      \"eat\",\n      \"fork\",\n      \"knife\",\n      \"plate\"\n    ],\n    \"emoji\": \"🍽️\",\n    \"text\": \"🍽︎\",\n    \"type\": 0,\n    \"order\": 3959,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"fork and knife\",\n    \"hexcode\": \"1F374\",\n    \"tags\": [\n      \"breakfast\",\n      \"breaky\",\n      \"cooking\",\n      \"cutlery\",\n      \"delicious\",\n      \"dinner\",\n      \"eat\",\n      \"feed\",\n      \"food\",\n      \"fork\",\n      \"hungry\",\n      \"knife\",\n      \"lunch\",\n      \"restaurant\",\n      \"yum\",\n      \"yummy\"\n    ],\n    \"emoji\": \"🍴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3960,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"spoon\",\n    \"hexcode\": \"1F944\",\n    \"tags\": [\n      \"eat\",\n      \"tableware\"\n    ],\n    \"emoji\": \"🥄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3961,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 3\n  },\n  {\n    \"label\": \"kitchen knife\",\n    \"hexcode\": \"1F52A\",\n    \"tags\": [\n      \"chef\",\n      \"cooking\",\n      \"hocho\",\n      \"kitchen\",\n      \"knife\",\n      \"tool\",\n      \"weapon\"\n    ],\n    \"emoji\": \"🔪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3962,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"jar\",\n    \"hexcode\": \"1FAD9\",\n    \"tags\": [\n      \"condiment\",\n      \"container\",\n      \"empty\",\n      \"nothing\",\n      \"sauce\",\n      \"store\"\n    ],\n    \"emoji\": \"🫙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3963,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 14\n  },\n  {\n    \"label\": \"amphora\",\n    \"hexcode\": \"1F3FA\",\n    \"tags\": [\n      \"aquarius\",\n      \"cooking\",\n      \"drink\",\n      \"jug\",\n      \"tool\",\n      \"weapon\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🏺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3964,\n    \"group\": 4,\n    \"subgroup\": 48,\n    \"version\": 1\n  },\n  {\n    \"label\": \"globe showing Europe-Africa\",\n    \"hexcode\": \"1F30D\",\n    \"tags\": [\n      \"africa\",\n      \"earth\",\n      \"europe\",\n      \"europe-africa\",\n      \"globe\",\n      \"showing\",\n      \"world\"\n    ],\n    \"emoji\": \"🌍️\",\n    \"text\": \"🌍︎\",\n    \"type\": 1,\n    \"order\": 3965,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"globe showing Americas\",\n    \"hexcode\": \"1F30E\",\n    \"tags\": [\n      \"americas\",\n      \"earth\",\n      \"globe\",\n      \"showing\",\n      \"world\"\n    ],\n    \"emoji\": \"🌎️\",\n    \"text\": \"🌎︎\",\n    \"type\": 1,\n    \"order\": 3966,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"globe showing Asia-Australia\",\n    \"hexcode\": \"1F30F\",\n    \"tags\": [\n      \"asia\",\n      \"asia-australia\",\n      \"australia\",\n      \"earth\",\n      \"globe\",\n      \"showing\",\n      \"world\"\n    ],\n    \"emoji\": \"🌏️\",\n    \"text\": \"🌏︎\",\n    \"type\": 1,\n    \"order\": 3967,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"globe with meridians\",\n    \"hexcode\": \"1F310\",\n    \"tags\": [\n      \"earth\",\n      \"globe\",\n      \"internet\",\n      \"meridians\",\n      \"web\",\n      \"world\",\n      \"worldwide\"\n    ],\n    \"emoji\": \"🌐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3968,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 1\n  },\n  {\n    \"label\": \"world map\",\n    \"hexcode\": \"1F5FA\",\n    \"tags\": [\n      \"map\",\n      \"world\"\n    ],\n    \"emoji\": \"🗺️\",\n    \"text\": \"🗺︎\",\n    \"type\": 0,\n    \"order\": 3970,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"map of Japan\",\n    \"hexcode\": \"1F5FE\",\n    \"tags\": [\n      \"japan\",\n      \"map\"\n    ],\n    \"emoji\": \"🗾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3971,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"compass\",\n    \"hexcode\": \"1F9ED\",\n    \"tags\": [\n      \"direction\",\n      \"magnetic\",\n      \"navigation\",\n      \"orienteering\"\n    ],\n    \"emoji\": \"🧭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3972,\n    \"group\": 5,\n    \"subgroup\": 49,\n    \"version\": 11\n  },\n  {\n    \"label\": \"snow-capped mountain\",\n    \"hexcode\": \"1F3D4\",\n    \"tags\": [\n      \"cold\",\n      \"mountain\",\n      \"snow\",\n      \"snow-capped\"\n    ],\n    \"emoji\": \"🏔️\",\n    \"text\": \"🏔︎\",\n    \"type\": 0,\n    \"order\": 3974,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"mountain\",\n    \"hexcode\": \"26F0\",\n    \"tags\": [\n      \"mountain\"\n    ],\n    \"emoji\": \"⛰️\",\n    \"text\": \"⛰︎\",\n    \"type\": 0,\n    \"order\": 3976,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"landslide\",\n    \"hexcode\": \"1F6D8\",\n    \"tags\": [\n      \"avalanche\",\n      \"danger\",\n      \"disaster\",\n      \"earthquake\",\n      \"mountain\",\n      \"mudslide\",\n      \"rocks\"\n    ],\n    \"emoji\": \"🛘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3977,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 17\n  },\n  {\n    \"label\": \"volcano\",\n    \"hexcode\": \"1F30B\",\n    \"tags\": [\n      \"eruption\",\n      \"mountain\",\n      \"nature\"\n    ],\n    \"emoji\": \"🌋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3978,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mount fuji\",\n    \"hexcode\": \"1F5FB\",\n    \"tags\": [\n      \"fuji\",\n      \"mount\",\n      \"mountain\",\n      \"nature\"\n    ],\n    \"emoji\": \"🗻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3979,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"camping\",\n    \"hexcode\": \"1F3D5\",\n    \"tags\": [\n      \"camping\"\n    ],\n    \"emoji\": \"🏕️\",\n    \"text\": \"🏕︎\",\n    \"type\": 0,\n    \"order\": 3981,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"beach with umbrella\",\n    \"hexcode\": \"1F3D6\",\n    \"tags\": [\n      \"beach\",\n      \"umbrella\"\n    ],\n    \"emoji\": \"🏖️\",\n    \"text\": \"🏖︎\",\n    \"type\": 0,\n    \"order\": 3983,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"desert\",\n    \"hexcode\": \"1F3DC\",\n    \"tags\": [\n      \"desert\"\n    ],\n    \"emoji\": \"🏜️\",\n    \"text\": \"🏜︎\",\n    \"type\": 0,\n    \"order\": 3985,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"desert island\",\n    \"hexcode\": \"1F3DD\",\n    \"tags\": [\n      \"desert\",\n      \"island\"\n    ],\n    \"emoji\": \"🏝️\",\n    \"text\": \"🏝︎\",\n    \"type\": 0,\n    \"order\": 3987,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"national park\",\n    \"hexcode\": \"1F3DE\",\n    \"tags\": [\n      \"national\",\n      \"park\"\n    ],\n    \"emoji\": \"🏞️\",\n    \"text\": \"🏞︎\",\n    \"type\": 0,\n    \"order\": 3989,\n    \"group\": 5,\n    \"subgroup\": 50,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"stadium\",\n    \"hexcode\": \"1F3DF\",\n    \"tags\": [\n      \"stadium\"\n    ],\n    \"emoji\": \"🏟️\",\n    \"text\": \"🏟︎\",\n    \"type\": 0,\n    \"order\": 3991,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"classical building\",\n    \"hexcode\": \"1F3DB\",\n    \"tags\": [\n      \"building\",\n      \"classical\"\n    ],\n    \"emoji\": \"🏛️\",\n    \"text\": \"🏛︎\",\n    \"type\": 0,\n    \"order\": 3993,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"building construction\",\n    \"hexcode\": \"1F3D7\",\n    \"tags\": [\n      \"building\",\n      \"construction\",\n      \"crane\"\n    ],\n    \"emoji\": \"🏗️\",\n    \"text\": \"🏗︎\",\n    \"type\": 0,\n    \"order\": 3995,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"brick\",\n    \"hexcode\": \"1F9F1\",\n    \"tags\": [\n      \"bricks\",\n      \"clay\",\n      \"mortar\",\n      \"wall\"\n    ],\n    \"emoji\": \"🧱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3996,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 11\n  },\n  {\n    \"label\": \"rock\",\n    \"hexcode\": \"1FAA8\",\n    \"tags\": [\n      \"boulder\",\n      \"heavy\",\n      \"solid\",\n      \"stone\",\n      \"tough\"\n    ],\n    \"emoji\": \"🪨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3997,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 13\n  },\n  {\n    \"label\": \"wood\",\n    \"hexcode\": \"1FAB5\",\n    \"tags\": [\n      \"log\",\n      \"lumber\",\n      \"timber\"\n    ],\n    \"emoji\": \"🪵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3998,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 13\n  },\n  {\n    \"label\": \"hut\",\n    \"hexcode\": \"1F6D6\",\n    \"tags\": [\n      \"home\",\n      \"house\",\n      \"roundhouse\",\n      \"shelter\",\n      \"yurt\"\n    ],\n    \"emoji\": \"🛖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 3999,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 13\n  },\n  {\n    \"label\": \"houses\",\n    \"hexcode\": \"1F3D8\",\n    \"tags\": [\n      \"house\"\n    ],\n    \"emoji\": \"🏘️\",\n    \"text\": \"🏘︎\",\n    \"type\": 0,\n    \"order\": 4001,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"derelict house\",\n    \"hexcode\": \"1F3DA\",\n    \"tags\": [\n      \"derelict\",\n      \"home\",\n      \"house\"\n    ],\n    \"emoji\": \"🏚️\",\n    \"text\": \"🏚︎\",\n    \"type\": 0,\n    \"order\": 4003,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"house\",\n    \"hexcode\": \"1F3E0\",\n    \"tags\": [\n      \"building\",\n      \"country\",\n      \"heart\",\n      \"home\",\n      \"ranch\",\n      \"settle\",\n      \"simple\",\n      \"suburban\",\n      \"suburbia\",\n      \"where\"\n    ],\n    \"emoji\": \"🏠️\",\n    \"text\": \"🏠︎\",\n    \"type\": 1,\n    \"order\": 4004,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"house with garden\",\n    \"hexcode\": \"1F3E1\",\n    \"tags\": [\n      \"building\",\n      \"country\",\n      \"garden\",\n      \"heart\",\n      \"home\",\n      \"house\",\n      \"ranch\",\n      \"settle\",\n      \"simple\",\n      \"suburban\",\n      \"suburbia\",\n      \"where\"\n    ],\n    \"emoji\": \"🏡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4005,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"office building\",\n    \"hexcode\": \"1F3E2\",\n    \"tags\": [\n      \"building\",\n      \"city\",\n      \"cubical\",\n      \"job\",\n      \"office\"\n    ],\n    \"emoji\": \"🏢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4006,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese post office\",\n    \"hexcode\": \"1F3E3\",\n    \"tags\": [\n      \"building\",\n      \"japanese\",\n      \"office\",\n      \"post\"\n    ],\n    \"emoji\": \"🏣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4007,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"post office\",\n    \"hexcode\": \"1F3E4\",\n    \"tags\": [\n      \"building\",\n      \"european\",\n      \"office\",\n      \"post\"\n    ],\n    \"emoji\": \"🏤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4008,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hospital\",\n    \"hexcode\": \"1F3E5\",\n    \"tags\": [\n      \"building\",\n      \"doctor\",\n      \"medicine\"\n    ],\n    \"emoji\": \"🏥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4009,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bank\",\n    \"hexcode\": \"1F3E6\",\n    \"tags\": [\n      \"building\"\n    ],\n    \"emoji\": \"🏦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4010,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hotel\",\n    \"hexcode\": \"1F3E8\",\n    \"tags\": [\n      \"building\"\n    ],\n    \"emoji\": \"🏨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4011,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"love hotel\",\n    \"hexcode\": \"1F3E9\",\n    \"tags\": [\n      \"building\",\n      \"hotel\",\n      \"love\"\n    ],\n    \"emoji\": \"🏩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4012,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"convenience store\",\n    \"hexcode\": \"1F3EA\",\n    \"tags\": [\n      \"24\",\n      \"building\",\n      \"convenience\",\n      \"hours\",\n      \"store\"\n    ],\n    \"emoji\": \"🏪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4013,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"school\",\n    \"hexcode\": \"1F3EB\",\n    \"tags\": [\n      \"building\"\n    ],\n    \"emoji\": \"🏫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4014,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"department store\",\n    \"hexcode\": \"1F3EC\",\n    \"tags\": [\n      \"building\",\n      \"department\",\n      \"store\"\n    ],\n    \"emoji\": \"🏬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4015,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"factory\",\n    \"hexcode\": \"1F3ED\",\n    \"tags\": [\n      \"building\"\n    ],\n    \"emoji\": \"🏭️\",\n    \"text\": \"🏭︎\",\n    \"type\": 1,\n    \"order\": 4016,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese castle\",\n    \"hexcode\": \"1F3EF\",\n    \"tags\": [\n      \"building\",\n      \"castle\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🏯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4017,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"castle\",\n    \"hexcode\": \"1F3F0\",\n    \"tags\": [\n      \"building\",\n      \"european\"\n    ],\n    \"emoji\": \"🏰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4018,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wedding\",\n    \"hexcode\": \"1F492\",\n    \"tags\": [\n      \"chapel\",\n      \"hitched\",\n      \"nuptials\",\n      \"romance\"\n    ],\n    \"emoji\": \"💒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4019,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Tokyo tower\",\n    \"hexcode\": \"1F5FC\",\n    \"tags\": [\n      \"tokyo\",\n      \"tower\"\n    ],\n    \"emoji\": \"🗼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4020,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Statue of Liberty\",\n    \"hexcode\": \"1F5FD\",\n    \"tags\": [\n      \"liberty\",\n      \"new\",\n      \"ny\",\n      \"nyc\",\n      \"statue\",\n      \"york\"\n    ],\n    \"emoji\": \"🗽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4021,\n    \"group\": 5,\n    \"subgroup\": 51,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"church\",\n    \"hexcode\": \"26EA\",\n    \"tags\": [\n      \"bless\",\n      \"chapel\",\n      \"christian\",\n      \"cross\",\n      \"religion\"\n    ],\n    \"emoji\": \"⛪️\",\n    \"text\": \"⛪︎\",\n    \"type\": 1,\n    \"order\": 4022,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mosque\",\n    \"hexcode\": \"1F54C\",\n    \"tags\": [\n      \"islam\",\n      \"masjid\",\n      \"muslim\",\n      \"religion\"\n    ],\n    \"emoji\": \"🕌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4023,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hindu temple\",\n    \"hexcode\": \"1F6D5\",\n    \"tags\": [\n      \"hindu\",\n      \"temple\"\n    ],\n    \"emoji\": \"🛕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4024,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 12\n  },\n  {\n    \"label\": \"synagogue\",\n    \"hexcode\": \"1F54D\",\n    \"tags\": [\n      \"jew\",\n      \"jewish\",\n      \"judaism\",\n      \"religion\",\n      \"temple\"\n    ],\n    \"emoji\": \"🕍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4025,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 1\n  },\n  {\n    \"label\": \"shinto shrine\",\n    \"hexcode\": \"26E9\",\n    \"tags\": [\n      \"religion\",\n      \"shinto\",\n      \"shrine\"\n    ],\n    \"emoji\": \"⛩️\",\n    \"text\": \"⛩︎\",\n    \"type\": 0,\n    \"order\": 4027,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"kaaba\",\n    \"hexcode\": \"1F54B\",\n    \"tags\": [\n      \"hajj\",\n      \"islam\",\n      \"muslim\",\n      \"religion\",\n      \"umrah\"\n    ],\n    \"emoji\": \"🕋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4028,\n    \"group\": 5,\n    \"subgroup\": 52,\n    \"version\": 1\n  },\n  {\n    \"label\": \"fountain\",\n    \"hexcode\": \"26F2\",\n    \"tags\": [\n      \"fountain\"\n    ],\n    \"emoji\": \"⛲️\",\n    \"text\": \"⛲︎\",\n    \"type\": 1,\n    \"order\": 4029,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tent\",\n    \"hexcode\": \"26FA\",\n    \"tags\": [\n      \"camping\"\n    ],\n    \"emoji\": \"⛺️\",\n    \"text\": \"⛺︎\",\n    \"type\": 1,\n    \"order\": 4030,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"foggy\",\n    \"hexcode\": \"1F301\",\n    \"tags\": [\n      \"fog\"\n    ],\n    \"emoji\": \"🌁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4031,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"night with stars\",\n    \"hexcode\": \"1F303\",\n    \"tags\": [\n      \"night\",\n      \"star\",\n      \"stars\"\n    ],\n    \"emoji\": \"🌃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4032,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cityscape\",\n    \"hexcode\": \"1F3D9\",\n    \"tags\": [\n      \"city\"\n    ],\n    \"emoji\": \"🏙️\",\n    \"text\": \"🏙︎\",\n    \"type\": 0,\n    \"order\": 4034,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sunrise over mountains\",\n    \"hexcode\": \"1F304\",\n    \"tags\": [\n      \"morning\",\n      \"mountains\",\n      \"over\",\n      \"sun\",\n      \"sunrise\"\n    ],\n    \"emoji\": \"🌄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4035,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sunrise\",\n    \"hexcode\": \"1F305\",\n    \"tags\": [\n      \"morning\",\n      \"nature\",\n      \"sun\"\n    ],\n    \"emoji\": \"🌅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4036,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cityscape at dusk\",\n    \"hexcode\": \"1F306\",\n    \"tags\": [\n      \"at\",\n      \"building\",\n      \"city\",\n      \"cityscape\",\n      \"dusk\",\n      \"evening\",\n      \"landscape\",\n      \"sun\",\n      \"sunset\"\n    ],\n    \"emoji\": \"🌆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4037,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sunset\",\n    \"hexcode\": \"1F307\",\n    \"tags\": [\n      \"building\",\n      \"dusk\",\n      \"sun\"\n    ],\n    \"emoji\": \"🌇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4038,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bridge at night\",\n    \"hexcode\": \"1F309\",\n    \"tags\": [\n      \"at\",\n      \"bridge\",\n      \"night\"\n    ],\n    \"emoji\": \"🌉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4039,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hot springs\",\n    \"hexcode\": \"2668\",\n    \"tags\": [\n      \"hot\",\n      \"hotsprings\",\n      \"springs\",\n      \"steaming\"\n    ],\n    \"emoji\": \"♨️\",\n    \"text\": \"♨︎\",\n    \"type\": 0,\n    \"order\": 4041,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"carousel horse\",\n    \"hexcode\": \"1F3A0\",\n    \"tags\": [\n      \"carousel\",\n      \"entertainment\",\n      \"horse\"\n    ],\n    \"emoji\": \"🎠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4042,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"playground slide\",\n    \"hexcode\": \"1F6DD\",\n    \"tags\": [\n      \"amusement\",\n      \"park\",\n      \"play\",\n      \"playground\",\n      \"playing\",\n      \"slide\",\n      \"sliding\",\n      \"theme\"\n    ],\n    \"emoji\": \"🛝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4043,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 14\n  },\n  {\n    \"label\": \"ferris wheel\",\n    \"hexcode\": \"1F3A1\",\n    \"tags\": [\n      \"amusement\",\n      \"ferris\",\n      \"park\",\n      \"theme\",\n      \"wheel\"\n    ],\n    \"emoji\": \"🎡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4044,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"roller coaster\",\n    \"hexcode\": \"1F3A2\",\n    \"tags\": [\n      \"amusement\",\n      \"coaster\",\n      \"park\",\n      \"roller\",\n      \"theme\"\n    ],\n    \"emoji\": \"🎢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4045,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"barber pole\",\n    \"hexcode\": \"1F488\",\n    \"tags\": [\n      \"barber\",\n      \"cut\",\n      \"fresh\",\n      \"haircut\",\n      \"pole\",\n      \"shave\"\n    ],\n    \"emoji\": \"💈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4046,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"circus tent\",\n    \"hexcode\": \"1F3AA\",\n    \"tags\": [\n      \"circus\",\n      \"tent\"\n    ],\n    \"emoji\": \"🎪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4047,\n    \"group\": 5,\n    \"subgroup\": 53,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"locomotive\",\n    \"hexcode\": \"1F682\",\n    \"tags\": [\n      \"caboose\",\n      \"engine\",\n      \"railway\",\n      \"steam\",\n      \"train\",\n      \"trains\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4048,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"railway car\",\n    \"hexcode\": \"1F683\",\n    \"tags\": [\n      \"car\",\n      \"electric\",\n      \"railway\",\n      \"train\",\n      \"tram\",\n      \"travel\",\n      \"trolleybus\"\n    ],\n    \"emoji\": \"🚃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4049,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"high-speed train\",\n    \"hexcode\": \"1F684\",\n    \"tags\": [\n      \"high-speed\",\n      \"railway\",\n      \"shinkansen\",\n      \"speed\",\n      \"train\"\n    ],\n    \"emoji\": \"🚄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4050,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bullet train\",\n    \"hexcode\": \"1F685\",\n    \"tags\": [\n      \"bullet\",\n      \"high-speed\",\n      \"nose\",\n      \"railway\",\n      \"shinkansen\",\n      \"speed\",\n      \"train\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4051,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"train\",\n    \"hexcode\": \"1F686\",\n    \"tags\": [\n      \"arrived\",\n      \"choo\",\n      \"railway\"\n    ],\n    \"emoji\": \"🚆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4052,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"metro\",\n    \"hexcode\": \"1F687\",\n    \"tags\": [\n      \"subway\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚇️\",\n    \"text\": \"🚇︎\",\n    \"type\": 1,\n    \"order\": 4053,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"light rail\",\n    \"hexcode\": \"1F688\",\n    \"tags\": [\n      \"arrived\",\n      \"light\",\n      \"monorail\",\n      \"rail\",\n      \"railway\"\n    ],\n    \"emoji\": \"🚈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4054,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"station\",\n    \"hexcode\": \"1F689\",\n    \"tags\": [\n      \"railway\",\n      \"train\"\n    ],\n    \"emoji\": \"🚉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4055,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tram\",\n    \"hexcode\": \"1F68A\",\n    \"tags\": [\n      \"trolleybus\"\n    ],\n    \"emoji\": \"🚊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4056,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"monorail\",\n    \"hexcode\": \"1F69D\",\n    \"tags\": [\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4057,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"mountain railway\",\n    \"hexcode\": \"1F69E\",\n    \"tags\": [\n      \"car\",\n      \"mountain\",\n      \"railway\",\n      \"trip\"\n    ],\n    \"emoji\": \"🚞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4058,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"tram car\",\n    \"hexcode\": \"1F68B\",\n    \"tags\": [\n      \"bus\",\n      \"car\",\n      \"tram\",\n      \"trolley\",\n      \"trolleybus\"\n    ],\n    \"emoji\": \"🚋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4059,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"bus\",\n    \"hexcode\": \"1F68C\",\n    \"tags\": [\n      \"school\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4060,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"oncoming bus\",\n    \"hexcode\": \"1F68D\",\n    \"tags\": [\n      \"bus\",\n      \"cars\",\n      \"oncoming\"\n    ],\n    \"emoji\": \"🚍️\",\n    \"text\": \"🚍︎\",\n    \"type\": 1,\n    \"order\": 4061,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"trolleybus\",\n    \"hexcode\": \"1F68E\",\n    \"tags\": [\n      \"bus\",\n      \"tram\",\n      \"trolley\"\n    ],\n    \"emoji\": \"🚎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4062,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"minibus\",\n    \"hexcode\": \"1F690\",\n    \"tags\": [\n      \"bus\",\n      \"drive\",\n      \"van\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4063,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"ambulance\",\n    \"hexcode\": \"1F691\",\n    \"tags\": [\n      \"emergency\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚑️\",\n    \"text\": \"🚑︎\",\n    \"type\": 1,\n    \"order\": 4064,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fire engine\",\n    \"hexcode\": \"1F692\",\n    \"tags\": [\n      \"engine\",\n      \"fire\",\n      \"truck\"\n    ],\n    \"emoji\": \"🚒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4065,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"police car\",\n    \"hexcode\": \"1F693\",\n    \"tags\": [\n      \"5–0\",\n      \"car\",\n      \"cops\",\n      \"patrol\",\n      \"police\"\n    ],\n    \"emoji\": \"🚓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4066,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"oncoming police car\",\n    \"hexcode\": \"1F694\",\n    \"tags\": [\n      \"car\",\n      \"oncoming\",\n      \"police\"\n    ],\n    \"emoji\": \"🚔️\",\n    \"text\": \"🚔︎\",\n    \"type\": 1,\n    \"order\": 4067,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"taxi\",\n    \"hexcode\": \"1F695\",\n    \"tags\": [\n      \"cab\",\n      \"cabbie\",\n      \"car\",\n      \"drive\",\n      \"vehicle\",\n      \"yellow\"\n    ],\n    \"emoji\": \"🚕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4068,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"oncoming taxi\",\n    \"hexcode\": \"1F696\",\n    \"tags\": [\n      \"cab\",\n      \"cabbie\",\n      \"cars\",\n      \"drove\",\n      \"hail\",\n      \"oncoming\",\n      \"taxi\",\n      \"yellow\"\n    ],\n    \"emoji\": \"🚖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4069,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"automobile\",\n    \"hexcode\": \"1F697\",\n    \"tags\": [\n      \"car\",\n      \"driving\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4070,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"oncoming automobile\",\n    \"hexcode\": \"1F698\",\n    \"tags\": [\n      \"automobile\",\n      \"car\",\n      \"cars\",\n      \"drove\",\n      \"oncoming\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚘️\",\n    \"text\": \"🚘︎\",\n    \"type\": 1,\n    \"order\": 4071,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sport utility vehicle\",\n    \"hexcode\": \"1F699\",\n    \"tags\": [\n      \"car\",\n      \"drive\",\n      \"recreational\",\n      \"sport\",\n      \"sportutility\",\n      \"utility\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4072,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pickup truck\",\n    \"hexcode\": \"1F6FB\",\n    \"tags\": [\n      \"automobile\",\n      \"car\",\n      \"flatbed\",\n      \"pick-up\",\n      \"pickup\",\n      \"transportation\",\n      \"truck\"\n    ],\n    \"emoji\": \"🛻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4073,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 13\n  },\n  {\n    \"label\": \"delivery truck\",\n    \"hexcode\": \"1F69A\",\n    \"tags\": [\n      \"car\",\n      \"delivery\",\n      \"drive\",\n      \"truck\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4074,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"articulated lorry\",\n    \"hexcode\": \"1F69B\",\n    \"tags\": [\n      \"articulated\",\n      \"car\",\n      \"drive\",\n      \"lorry\",\n      \"move\",\n      \"semi\",\n      \"truck\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4075,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"tractor\",\n    \"hexcode\": \"1F69C\",\n    \"tags\": [\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4076,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"racing car\",\n    \"hexcode\": \"1F3CE\",\n    \"tags\": [\n      \"car\",\n      \"racing\",\n      \"zoom\"\n    ],\n    \"emoji\": \"🏎️\",\n    \"text\": \"🏎︎\",\n    \"type\": 0,\n    \"order\": 4078,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"motorcycle\",\n    \"hexcode\": \"1F3CD\",\n    \"tags\": [\n      \"racing\"\n    ],\n    \"emoji\": \"🏍️\",\n    \"text\": \"🏍︎\",\n    \"type\": 0,\n    \"order\": 4080,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"motor scooter\",\n    \"hexcode\": \"1F6F5\",\n    \"tags\": [\n      \"motor\",\n      \"scooter\"\n    ],\n    \"emoji\": \"🛵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4081,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 3\n  },\n  {\n    \"label\": \"manual wheelchair\",\n    \"hexcode\": \"1F9BD\",\n    \"tags\": [\n      \"accessibility\",\n      \"manual\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🦽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4082,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 12\n  },\n  {\n    \"label\": \"motorized wheelchair\",\n    \"hexcode\": \"1F9BC\",\n    \"tags\": [\n      \"accessibility\",\n      \"motorized\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"🦼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4083,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 12\n  },\n  {\n    \"label\": \"auto rickshaw\",\n    \"hexcode\": \"1F6FA\",\n    \"tags\": [\n      \"auto\",\n      \"rickshaw\",\n      \"tuk\"\n    ],\n    \"emoji\": \"🛺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4084,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 12\n  },\n  {\n    \"label\": \"bicycle\",\n    \"hexcode\": \"1F6B2\",\n    \"tags\": [\n      \"bike\",\n      \"class\",\n      \"cycle\",\n      \"cycling\",\n      \"cyclist\",\n      \"gang\",\n      \"ride\",\n      \"spin\",\n      \"spinning\"\n    ],\n    \"emoji\": \"🚲️\",\n    \"text\": \"🚲︎\",\n    \"type\": 1,\n    \"order\": 4085,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"kick scooter\",\n    \"hexcode\": \"1F6F4\",\n    \"tags\": [\n      \"kick\",\n      \"scooter\"\n    ],\n    \"emoji\": \"🛴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4086,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 3\n  },\n  {\n    \"label\": \"skateboard\",\n    \"hexcode\": \"1F6F9\",\n    \"tags\": [\n      \"board\",\n      \"skate\",\n      \"skater\",\n      \"wheels\"\n    ],\n    \"emoji\": \"🛹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4087,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 11\n  },\n  {\n    \"label\": \"roller skate\",\n    \"hexcode\": \"1F6FC\",\n    \"tags\": [\n      \"blades\",\n      \"roller\",\n      \"skate\",\n      \"skates\",\n      \"sport\"\n    ],\n    \"emoji\": \"🛼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4088,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 13\n  },\n  {\n    \"label\": \"bus stop\",\n    \"hexcode\": \"1F68F\",\n    \"tags\": [\n      \"bus\",\n      \"busstop\",\n      \"stop\"\n    ],\n    \"emoji\": \"🚏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4089,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"motorway\",\n    \"hexcode\": \"1F6E3\",\n    \"tags\": [\n      \"highway\",\n      \"road\"\n    ],\n    \"emoji\": \"🛣️\",\n    \"text\": \"🛣︎\",\n    \"type\": 0,\n    \"order\": 4091,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"railway track\",\n    \"hexcode\": \"1F6E4\",\n    \"tags\": [\n      \"railway\",\n      \"track\",\n      \"train\"\n    ],\n    \"emoji\": \"🛤️\",\n    \"text\": \"🛤︎\",\n    \"type\": 0,\n    \"order\": 4093,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"oil drum\",\n    \"hexcode\": \"1F6E2\",\n    \"tags\": [\n      \"drum\",\n      \"oil\"\n    ],\n    \"emoji\": \"🛢️\",\n    \"text\": \"🛢︎\",\n    \"type\": 0,\n    \"order\": 4095,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"fuel pump\",\n    \"hexcode\": \"26FD\",\n    \"tags\": [\n      \"diesel\",\n      \"fuel\",\n      \"fuelpump\",\n      \"gas\",\n      \"gasoline\",\n      \"pump\",\n      \"station\"\n    ],\n    \"emoji\": \"⛽️\",\n    \"text\": \"⛽︎\",\n    \"type\": 1,\n    \"order\": 4096,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wheel\",\n    \"hexcode\": \"1F6DE\",\n    \"tags\": [\n      \"car\",\n      \"circle\",\n      \"tire\",\n      \"turn\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🛞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4097,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 14\n  },\n  {\n    \"label\": \"police car light\",\n    \"hexcode\": \"1F6A8\",\n    \"tags\": [\n      \"alarm\",\n      \"alert\",\n      \"beacon\",\n      \"car\",\n      \"emergency\",\n      \"light\",\n      \"police\",\n      \"revolving\",\n      \"siren\"\n    ],\n    \"emoji\": \"🚨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4098,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"horizontal traffic light\",\n    \"hexcode\": \"1F6A5\",\n    \"tags\": [\n      \"horizontal\",\n      \"intersection\",\n      \"light\",\n      \"signal\",\n      \"stop\",\n      \"stoplight\",\n      \"traffic\"\n    ],\n    \"emoji\": \"🚥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4099,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"vertical traffic light\",\n    \"hexcode\": \"1F6A6\",\n    \"tags\": [\n      \"drove\",\n      \"intersection\",\n      \"light\",\n      \"signal\",\n      \"stop\",\n      \"stoplight\",\n      \"traffic\",\n      \"vertical\"\n    ],\n    \"emoji\": \"🚦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4100,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 1\n  },\n  {\n    \"label\": \"stop sign\",\n    \"hexcode\": \"1F6D1\",\n    \"tags\": [\n      \"octagonal\",\n      \"sign\",\n      \"stop\"\n    ],\n    \"emoji\": \"🛑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4101,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 3\n  },\n  {\n    \"label\": \"construction\",\n    \"hexcode\": \"1F6A7\",\n    \"tags\": [\n      \"barrier\"\n    ],\n    \"emoji\": \"🚧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4102,\n    \"group\": 5,\n    \"subgroup\": 54,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"anchor\",\n    \"hexcode\": \"2693\",\n    \"tags\": [\n      \"ship\",\n      \"tool\"\n    ],\n    \"emoji\": \"⚓️\",\n    \"text\": \"⚓︎\",\n    \"type\": 1,\n    \"order\": 4103,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ring buoy\",\n    \"hexcode\": \"1F6DF\",\n    \"tags\": [\n      \"buoy\",\n      \"float\",\n      \"life\",\n      \"lifesaver\",\n      \"preserver\",\n      \"rescue\",\n      \"ring\",\n      \"safety\",\n      \"save\",\n      \"saver\",\n      \"swim\"\n    ],\n    \"emoji\": \"🛟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4104,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 14\n  },\n  {\n    \"label\": \"sailboat\",\n    \"hexcode\": \"26F5\",\n    \"tags\": [\n      \"boat\",\n      \"resort\",\n      \"sailing\",\n      \"sea\",\n      \"yacht\"\n    ],\n    \"emoji\": \"⛵️\",\n    \"text\": \"⛵︎\",\n    \"type\": 1,\n    \"order\": 4105,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"canoe\",\n    \"hexcode\": \"1F6F6\",\n    \"tags\": [\n      \"boat\"\n    ],\n    \"emoji\": \"🛶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4106,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 3\n  },\n  {\n    \"label\": \"speedboat\",\n    \"hexcode\": \"1F6A4\",\n    \"tags\": [\n      \"billionaire\",\n      \"boat\",\n      \"lake\",\n      \"luxury\",\n      \"millionaire\",\n      \"summer\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4107,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"passenger ship\",\n    \"hexcode\": \"1F6F3\",\n    \"tags\": [\n      \"passenger\",\n      \"ship\"\n    ],\n    \"emoji\": \"🛳️\",\n    \"text\": \"🛳︎\",\n    \"type\": 0,\n    \"order\": 4109,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"ferry\",\n    \"hexcode\": \"26F4\",\n    \"tags\": [\n      \"boat\",\n      \"passenger\"\n    ],\n    \"emoji\": \"⛴️\",\n    \"text\": \"⛴︎\",\n    \"type\": 0,\n    \"order\": 4111,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"motor boat\",\n    \"hexcode\": \"1F6E5\",\n    \"tags\": [\n      \"boat\",\n      \"motor\",\n      \"motorboat\"\n    ],\n    \"emoji\": \"🛥️\",\n    \"text\": \"🛥︎\",\n    \"type\": 0,\n    \"order\": 4113,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"ship\",\n    \"hexcode\": \"1F6A2\",\n    \"tags\": [\n      \"boat\",\n      \"passenger\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4114,\n    \"group\": 5,\n    \"subgroup\": 55,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"airplane\",\n    \"hexcode\": \"2708\",\n    \"tags\": [\n      \"aeroplane\",\n      \"fly\",\n      \"flying\",\n      \"jet\",\n      \"plane\",\n      \"travel\"\n    ],\n    \"emoji\": \"✈️\",\n    \"text\": \"✈︎\",\n    \"type\": 0,\n    \"order\": 4116,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"small airplane\",\n    \"hexcode\": \"1F6E9\",\n    \"tags\": [\n      \"aeroplane\",\n      \"airplane\",\n      \"plane\",\n      \"small\"\n    ],\n    \"emoji\": \"🛩️\",\n    \"text\": \"🛩︎\",\n    \"type\": 0,\n    \"order\": 4118,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"airplane departure\",\n    \"hexcode\": \"1F6EB\",\n    \"tags\": [\n      \"aeroplane\",\n      \"airplane\",\n      \"check-in\",\n      \"departure\",\n      \"departures\",\n      \"plane\"\n    ],\n    \"emoji\": \"🛫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4119,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"airplane arrival\",\n    \"hexcode\": \"1F6EC\",\n    \"tags\": [\n      \"aeroplane\",\n      \"airplane\",\n      \"arrival\",\n      \"arrivals\",\n      \"arriving\",\n      \"landing\",\n      \"plane\"\n    ],\n    \"emoji\": \"🛬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4120,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"parachute\",\n    \"hexcode\": \"1FA82\",\n    \"tags\": [\n      \"hang-glide\",\n      \"parasail\",\n      \"skydive\"\n    ],\n    \"emoji\": \"🪂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4121,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 12\n  },\n  {\n    \"label\": \"seat\",\n    \"hexcode\": \"1F4BA\",\n    \"tags\": [\n      \"chair\"\n    ],\n    \"emoji\": \"💺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4122,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"helicopter\",\n    \"hexcode\": \"1F681\",\n    \"tags\": [\n      \"copter\",\n      \"roflcopter\",\n      \"travel\",\n      \"vehicle\"\n    ],\n    \"emoji\": \"🚁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4123,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"suspension railway\",\n    \"hexcode\": \"1F69F\",\n    \"tags\": [\n      \"railway\",\n      \"suspension\"\n    ],\n    \"emoji\": \"🚟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4124,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"mountain cableway\",\n    \"hexcode\": \"1F6A0\",\n    \"tags\": [\n      \"cable\",\n      \"cableway\",\n      \"gondola\",\n      \"lift\",\n      \"mountain\",\n      \"ski\"\n    ],\n    \"emoji\": \"🚠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4125,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"aerial tramway\",\n    \"hexcode\": \"1F6A1\",\n    \"tags\": [\n      \"aerial\",\n      \"cable\",\n      \"car\",\n      \"gondola\",\n      \"ropeway\",\n      \"tramway\"\n    ],\n    \"emoji\": \"🚡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4126,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 1\n  },\n  {\n    \"label\": \"satellite\",\n    \"hexcode\": \"1F6F0\",\n    \"tags\": [\n      \"space\"\n    ],\n    \"emoji\": \"🛰️\",\n    \"text\": \"🛰︎\",\n    \"type\": 0,\n    \"order\": 4128,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"rocket\",\n    \"hexcode\": \"1F680\",\n    \"tags\": [\n      \"launch\",\n      \"rockets\",\n      \"space\",\n      \"travel\"\n    ],\n    \"emoji\": \"🚀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4129,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flying saucer\",\n    \"hexcode\": \"1F6F8\",\n    \"tags\": [\n      \"aliens\",\n      \"extra\",\n      \"flying\",\n      \"saucer\",\n      \"terrestrial\",\n      \"ufo\"\n    ],\n    \"emoji\": \"🛸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4130,\n    \"group\": 5,\n    \"subgroup\": 56,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bellhop bell\",\n    \"hexcode\": \"1F6CE\",\n    \"tags\": [\n      \"bell\",\n      \"bellhop\",\n      \"hotel\"\n    ],\n    \"emoji\": \"🛎️\",\n    \"text\": \"🛎︎\",\n    \"type\": 0,\n    \"order\": 4132,\n    \"group\": 5,\n    \"subgroup\": 57,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"luggage\",\n    \"hexcode\": \"1F9F3\",\n    \"tags\": [\n      \"bag\",\n      \"packing\",\n      \"roller\",\n      \"suitcase\",\n      \"travel\"\n    ],\n    \"emoji\": \"🧳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4133,\n    \"group\": 5,\n    \"subgroup\": 57,\n    \"version\": 11\n  },\n  {\n    \"label\": \"hourglass done\",\n    \"hexcode\": \"231B\",\n    \"tags\": [\n      \"done\",\n      \"hourglass\",\n      \"sand\",\n      \"time\",\n      \"timer\"\n    ],\n    \"emoji\": \"⌛️\",\n    \"text\": \"⌛︎\",\n    \"type\": 1,\n    \"order\": 4134,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hourglass not done\",\n    \"hexcode\": \"23F3\",\n    \"tags\": [\n      \"done\",\n      \"flowing\",\n      \"hourglass\",\n      \"hours\",\n      \"not\",\n      \"sand\",\n      \"timer\",\n      \"waiting\",\n      \"yolo\"\n    ],\n    \"emoji\": \"⏳️\",\n    \"text\": \"⏳︎\",\n    \"type\": 1,\n    \"order\": 4135,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"watch\",\n    \"hexcode\": \"231A\",\n    \"tags\": [\n      \"clock\",\n      \"time\"\n    ],\n    \"emoji\": \"⌚️\",\n    \"text\": \"⌚︎\",\n    \"type\": 1,\n    \"order\": 4136,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"alarm clock\",\n    \"hexcode\": \"23F0\",\n    \"tags\": [\n      \"alarm\",\n      \"clock\",\n      \"hours\",\n      \"hrs\",\n      \"late\",\n      \"time\",\n      \"waiting\"\n    ],\n    \"emoji\": \"⏰️\",\n    \"text\": \"⏰︎\",\n    \"type\": 1,\n    \"order\": 4137,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"stopwatch\",\n    \"hexcode\": \"23F1\",\n    \"tags\": [\n      \"clock\",\n      \"time\"\n    ],\n    \"emoji\": \"⏱️\",\n    \"text\": \"⏱︎\",\n    \"type\": 0,\n    \"order\": 4139,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 1\n  },\n  {\n    \"label\": \"timer clock\",\n    \"hexcode\": \"23F2\",\n    \"tags\": [\n      \"clock\",\n      \"timer\"\n    ],\n    \"emoji\": \"⏲️\",\n    \"text\": \"⏲︎\",\n    \"type\": 0,\n    \"order\": 4141,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 1\n  },\n  {\n    \"label\": \"mantelpiece clock\",\n    \"hexcode\": \"1F570\",\n    \"tags\": [\n      \"clock\",\n      \"mantelpiece\",\n      \"time\"\n    ],\n    \"emoji\": \"🕰️\",\n    \"text\": \"🕰︎\",\n    \"type\": 0,\n    \"order\": 4143,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"twelve o’clock\",\n    \"hexcode\": \"1F55B\",\n    \"tags\": [\n      \"12\",\n      \"12:00\",\n      \"clock\",\n      \"o’clock\",\n      \"time\",\n      \"twelve\"\n    ],\n    \"emoji\": \"🕛️\",\n    \"text\": \"🕛︎\",\n    \"type\": 1,\n    \"order\": 4144,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"twelve-thirty\",\n    \"hexcode\": \"1F567\",\n    \"tags\": [\n      \"12\",\n      \"12:30\",\n      \"30\",\n      \"clock\",\n      \"thirty\",\n      \"time\",\n      \"twelve\"\n    ],\n    \"emoji\": \"🕧️\",\n    \"text\": \"🕧︎\",\n    \"type\": 1,\n    \"order\": 4145,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"one o’clock\",\n    \"hexcode\": \"1F550\",\n    \"tags\": [\n      \"1\",\n      \"1:00\",\n      \"clock\",\n      \"one\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕐️\",\n    \"text\": \"🕐︎\",\n    \"type\": 1,\n    \"order\": 4146,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"one-thirty\",\n    \"hexcode\": \"1F55C\",\n    \"tags\": [\n      \"1\",\n      \"1:30\",\n      \"30\",\n      \"clock\",\n      \"one\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕜️\",\n    \"text\": \"🕜︎\",\n    \"type\": 1,\n    \"order\": 4147,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"two o’clock\",\n    \"hexcode\": \"1F551\",\n    \"tags\": [\n      \"2\",\n      \"2:00\",\n      \"clock\",\n      \"o’clock\",\n      \"time\",\n      \"two\"\n    ],\n    \"emoji\": \"🕑️\",\n    \"text\": \"🕑︎\",\n    \"type\": 1,\n    \"order\": 4148,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"two-thirty\",\n    \"hexcode\": \"1F55D\",\n    \"tags\": [\n      \"2\",\n      \"2:30\",\n      \"30\",\n      \"clock\",\n      \"thirty\",\n      \"time\",\n      \"two\"\n    ],\n    \"emoji\": \"🕝️\",\n    \"text\": \"🕝︎\",\n    \"type\": 1,\n    \"order\": 4149,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"three o’clock\",\n    \"hexcode\": \"1F552\",\n    \"tags\": [\n      \"3\",\n      \"3:00\",\n      \"clock\",\n      \"o’clock\",\n      \"three\",\n      \"time\"\n    ],\n    \"emoji\": \"🕒️\",\n    \"text\": \"🕒︎\",\n    \"type\": 1,\n    \"order\": 4150,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"three-thirty\",\n    \"hexcode\": \"1F55E\",\n    \"tags\": [\n      \"3\",\n      \"30\",\n      \"3:30\",\n      \"clock\",\n      \"thirty\",\n      \"three\",\n      \"time\"\n    ],\n    \"emoji\": \"🕞️\",\n    \"text\": \"🕞︎\",\n    \"type\": 1,\n    \"order\": 4151,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"four o’clock\",\n    \"hexcode\": \"1F553\",\n    \"tags\": [\n      \"4\",\n      \"4:00\",\n      \"clock\",\n      \"four\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕓️\",\n    \"text\": \"🕓︎\",\n    \"type\": 1,\n    \"order\": 4152,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"four-thirty\",\n    \"hexcode\": \"1F55F\",\n    \"tags\": [\n      \"30\",\n      \"4\",\n      \"4:30\",\n      \"clock\",\n      \"four\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕟️\",\n    \"text\": \"🕟︎\",\n    \"type\": 1,\n    \"order\": 4153,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"five o’clock\",\n    \"hexcode\": \"1F554\",\n    \"tags\": [\n      \"5\",\n      \"5:00\",\n      \"clock\",\n      \"five\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕔️\",\n    \"text\": \"🕔︎\",\n    \"type\": 1,\n    \"order\": 4154,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"five-thirty\",\n    \"hexcode\": \"1F560\",\n    \"tags\": [\n      \"30\",\n      \"5\",\n      \"5:30\",\n      \"clock\",\n      \"five\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕠️\",\n    \"text\": \"🕠︎\",\n    \"type\": 1,\n    \"order\": 4155,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"six o’clock\",\n    \"hexcode\": \"1F555\",\n    \"tags\": [\n      \"6\",\n      \"6:00\",\n      \"clock\",\n      \"o’clock\",\n      \"six\",\n      \"time\"\n    ],\n    \"emoji\": \"🕕️\",\n    \"text\": \"🕕︎\",\n    \"type\": 1,\n    \"order\": 4156,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"six-thirty\",\n    \"hexcode\": \"1F561\",\n    \"tags\": [\n      \"30\",\n      \"6\",\n      \"6:30\",\n      \"clock\",\n      \"six\",\n      \"thirty\"\n    ],\n    \"emoji\": \"🕡️\",\n    \"text\": \"🕡︎\",\n    \"type\": 1,\n    \"order\": 4157,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"seven o’clock\",\n    \"hexcode\": \"1F556\",\n    \"tags\": [\n      \"0\",\n      \"7\",\n      \"7:00\",\n      \"clock\",\n      \"o’clock\",\n      \"seven\"\n    ],\n    \"emoji\": \"🕖️\",\n    \"text\": \"🕖︎\",\n    \"type\": 1,\n    \"order\": 4158,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"seven-thirty\",\n    \"hexcode\": \"1F562\",\n    \"tags\": [\n      \"30\",\n      \"7\",\n      \"7:30\",\n      \"clock\",\n      \"seven\",\n      \"thirty\"\n    ],\n    \"emoji\": \"🕢️\",\n    \"text\": \"🕢︎\",\n    \"type\": 1,\n    \"order\": 4159,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"eight o’clock\",\n    \"hexcode\": \"1F557\",\n    \"tags\": [\n      \"8\",\n      \"8:00\",\n      \"clock\",\n      \"eight\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕗️\",\n    \"text\": \"🕗︎\",\n    \"type\": 1,\n    \"order\": 4160,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eight-thirty\",\n    \"hexcode\": \"1F563\",\n    \"tags\": [\n      \"30\",\n      \"8\",\n      \"8:30\",\n      \"clock\",\n      \"eight\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕣️\",\n    \"text\": \"🕣︎\",\n    \"type\": 1,\n    \"order\": 4161,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"nine o’clock\",\n    \"hexcode\": \"1F558\",\n    \"tags\": [\n      \"9\",\n      \"9:00\",\n      \"clock\",\n      \"nine\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕘️\",\n    \"text\": \"🕘︎\",\n    \"type\": 1,\n    \"order\": 4162,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"nine-thirty\",\n    \"hexcode\": \"1F564\",\n    \"tags\": [\n      \"30\",\n      \"9\",\n      \"9:30\",\n      \"clock\",\n      \"nine\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕤️\",\n    \"text\": \"🕤︎\",\n    \"type\": 1,\n    \"order\": 4163,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"ten o’clock\",\n    \"hexcode\": \"1F559\",\n    \"tags\": [\n      \"0\",\n      \"10\",\n      \"10:00\",\n      \"clock\",\n      \"o’clock\",\n      \"ten\"\n    ],\n    \"emoji\": \"🕙️\",\n    \"text\": \"🕙︎\",\n    \"type\": 1,\n    \"order\": 4164,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ten-thirty\",\n    \"hexcode\": \"1F565\",\n    \"tags\": [\n      \"10\",\n      \"10:30\",\n      \"30\",\n      \"clock\",\n      \"ten\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕥️\",\n    \"text\": \"🕥︎\",\n    \"type\": 1,\n    \"order\": 4165,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"eleven o’clock\",\n    \"hexcode\": \"1F55A\",\n    \"tags\": [\n      \"11\",\n      \"11:00\",\n      \"clock\",\n      \"eleven\",\n      \"o’clock\",\n      \"time\"\n    ],\n    \"emoji\": \"🕚️\",\n    \"text\": \"🕚︎\",\n    \"type\": 1,\n    \"order\": 4166,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eleven-thirty\",\n    \"hexcode\": \"1F566\",\n    \"tags\": [\n      \"11\",\n      \"11:30\",\n      \"30\",\n      \"clock\",\n      \"eleven\",\n      \"thirty\",\n      \"time\"\n    ],\n    \"emoji\": \"🕦️\",\n    \"text\": \"🕦︎\",\n    \"type\": 1,\n    \"order\": 4167,\n    \"group\": 5,\n    \"subgroup\": 58,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"new moon\",\n    \"hexcode\": \"1F311\",\n    \"tags\": [\n      \"dark\",\n      \"moon\",\n      \"new\",\n      \"space\"\n    ],\n    \"emoji\": \"🌑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4168,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"waxing crescent moon\",\n    \"hexcode\": \"1F312\",\n    \"tags\": [\n      \"crescent\",\n      \"dreams\",\n      \"moon\",\n      \"space\",\n      \"waxing\"\n    ],\n    \"emoji\": \"🌒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4169,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"first quarter moon\",\n    \"hexcode\": \"1F313\",\n    \"tags\": [\n      \"first\",\n      \"moon\",\n      \"quarter\",\n      \"space\"\n    ],\n    \"emoji\": \"🌓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4170,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"waxing gibbous moon\",\n    \"hexcode\": \"1F314\",\n    \"tags\": [\n      \"gibbous\",\n      \"moon\",\n      \"space\",\n      \"waxing\"\n    ],\n    \"emoji\": \"🌔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4171,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"full moon\",\n    \"hexcode\": \"1F315\",\n    \"tags\": [\n      \"full\",\n      \"moon\",\n      \"space\"\n    ],\n    \"emoji\": \"🌕️\",\n    \"text\": \"🌕︎\",\n    \"type\": 1,\n    \"order\": 4172,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"waning gibbous moon\",\n    \"hexcode\": \"1F316\",\n    \"tags\": [\n      \"gibbous\",\n      \"moon\",\n      \"space\",\n      \"waning\"\n    ],\n    \"emoji\": \"🌖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4173,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"last quarter moon\",\n    \"hexcode\": \"1F317\",\n    \"tags\": [\n      \"last\",\n      \"moon\",\n      \"quarter\",\n      \"space\"\n    ],\n    \"emoji\": \"🌗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4174,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"waning crescent moon\",\n    \"hexcode\": \"1F318\",\n    \"tags\": [\n      \"crescent\",\n      \"moon\",\n      \"space\",\n      \"waning\"\n    ],\n    \"emoji\": \"🌘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4175,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"crescent moon\",\n    \"hexcode\": \"1F319\",\n    \"tags\": [\n      \"crescent\",\n      \"moon\",\n      \"ramadan\",\n      \"space\"\n    ],\n    \"emoji\": \"🌙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4176,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"new moon face\",\n    \"hexcode\": \"1F31A\",\n    \"tags\": [\n      \"face\",\n      \"moon\",\n      \"new\",\n      \"space\"\n    ],\n    \"emoji\": \"🌚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4177,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"first quarter moon face\",\n    \"hexcode\": \"1F31B\",\n    \"tags\": [\n      \"face\",\n      \"first\",\n      \"moon\",\n      \"quarter\",\n      \"space\"\n    ],\n    \"emoji\": \"🌛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4178,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"last quarter moon face\",\n    \"hexcode\": \"1F31C\",\n    \"tags\": [\n      \"dreams\",\n      \"face\",\n      \"last\",\n      \"moon\",\n      \"quarter\"\n    ],\n    \"emoji\": \"🌜️\",\n    \"text\": \"🌜︎\",\n    \"type\": 1,\n    \"order\": 4179,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"thermometer\",\n    \"hexcode\": \"1F321\",\n    \"tags\": [\n      \"weather\"\n    ],\n    \"emoji\": \"🌡️\",\n    \"text\": \"🌡︎\",\n    \"type\": 0,\n    \"order\": 4181,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sun\",\n    \"hexcode\": \"2600\",\n    \"tags\": [\n      \"bright\",\n      \"rays\",\n      \"space\",\n      \"sunny\",\n      \"weather\"\n    ],\n    \"emoji\": \"☀️\",\n    \"text\": \"☀︎\",\n    \"type\": 0,\n    \"order\": 4183,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"full moon face\",\n    \"hexcode\": \"1F31D\",\n    \"tags\": [\n      \"bright\",\n      \"face\",\n      \"full\",\n      \"moon\"\n    ],\n    \"emoji\": \"🌝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4184,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"sun with face\",\n    \"hexcode\": \"1F31E\",\n    \"tags\": [\n      \"beach\",\n      \"bright\",\n      \"day\",\n      \"face\",\n      \"heat\",\n      \"shine\",\n      \"sun\",\n      \"sunny\",\n      \"sunshine\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4185,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"ringed planet\",\n    \"hexcode\": \"1FA90\",\n    \"tags\": [\n      \"planet\",\n      \"ringed\",\n      \"saturn\",\n      \"saturnine\"\n    ],\n    \"emoji\": \"🪐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4186,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 12\n  },\n  {\n    \"label\": \"star\",\n    \"hexcode\": \"2B50\",\n    \"tags\": [\n      \"astronomy\",\n      \"medium\",\n      \"stars\",\n      \"white\"\n    ],\n    \"emoji\": \"⭐️\",\n    \"text\": \"⭐︎\",\n    \"type\": 1,\n    \"order\": 4187,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"glowing star\",\n    \"hexcode\": \"1F31F\",\n    \"tags\": [\n      \"glittery\",\n      \"glow\",\n      \"glowing\",\n      \"night\",\n      \"shining\",\n      \"sparkle\",\n      \"star\",\n      \"win\"\n    ],\n    \"emoji\": \"🌟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4188,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shooting star\",\n    \"hexcode\": \"1F320\",\n    \"tags\": [\n      \"falling\",\n      \"night\",\n      \"shooting\",\n      \"space\",\n      \"star\"\n    ],\n    \"emoji\": \"🌠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4189,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"milky way\",\n    \"hexcode\": \"1F30C\",\n    \"tags\": [\n      \"milky\",\n      \"space\",\n      \"way\"\n    ],\n    \"emoji\": \"🌌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4190,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cloud\",\n    \"hexcode\": \"2601\",\n    \"tags\": [\n      \"weather\"\n    ],\n    \"emoji\": \"☁️\",\n    \"text\": \"☁︎\",\n    \"type\": 0,\n    \"order\": 4192,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sun behind cloud\",\n    \"hexcode\": \"26C5\",\n    \"tags\": [\n      \"behind\",\n      \"cloud\",\n      \"cloudy\",\n      \"sun\",\n      \"weather\"\n    ],\n    \"emoji\": \"⛅️\",\n    \"text\": \"⛅︎\",\n    \"type\": 1,\n    \"order\": 4193,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cloud with lightning and rain\",\n    \"hexcode\": \"26C8\",\n    \"tags\": [\n      \"cloud\",\n      \"lightning\",\n      \"rain\",\n      \"thunder\",\n      \"thunderstorm\"\n    ],\n    \"emoji\": \"⛈️\",\n    \"text\": \"⛈︎\",\n    \"type\": 0,\n    \"order\": 4195,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sun behind small cloud\",\n    \"hexcode\": \"1F324\",\n    \"tags\": [\n      \"behind\",\n      \"cloud\",\n      \"sun\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌤️\",\n    \"text\": \"🌤︎\",\n    \"type\": 0,\n    \"order\": 4197,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sun behind large cloud\",\n    \"hexcode\": \"1F325\",\n    \"tags\": [\n      \"behind\",\n      \"cloud\",\n      \"sun\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌥️\",\n    \"text\": \"🌥︎\",\n    \"type\": 0,\n    \"order\": 4199,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"sun behind rain cloud\",\n    \"hexcode\": \"1F326\",\n    \"tags\": [\n      \"behind\",\n      \"cloud\",\n      \"rain\",\n      \"sun\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌦️\",\n    \"text\": \"🌦︎\",\n    \"type\": 0,\n    \"order\": 4201,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"cloud with rain\",\n    \"hexcode\": \"1F327\",\n    \"tags\": [\n      \"cloud\",\n      \"rain\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌧️\",\n    \"text\": \"🌧︎\",\n    \"type\": 0,\n    \"order\": 4203,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"cloud with snow\",\n    \"hexcode\": \"1F328\",\n    \"tags\": [\n      \"cloud\",\n      \"cold\",\n      \"snow\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌨️\",\n    \"text\": \"🌨︎\",\n    \"type\": 0,\n    \"order\": 4205,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"cloud with lightning\",\n    \"hexcode\": \"1F329\",\n    \"tags\": [\n      \"cloud\",\n      \"lightning\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌩️\",\n    \"text\": \"🌩︎\",\n    \"type\": 0,\n    \"order\": 4207,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"tornado\",\n    \"hexcode\": \"1F32A\",\n    \"tags\": [\n      \"cloud\",\n      \"weather\",\n      \"whirlwind\"\n    ],\n    \"emoji\": \"🌪️\",\n    \"text\": \"🌪︎\",\n    \"type\": 0,\n    \"order\": 4209,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"fog\",\n    \"hexcode\": \"1F32B\",\n    \"tags\": [\n      \"cloud\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌫️\",\n    \"text\": \"🌫︎\",\n    \"type\": 0,\n    \"order\": 4211,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"wind face\",\n    \"hexcode\": \"1F32C\",\n    \"tags\": [\n      \"blow\",\n      \"cloud\",\n      \"face\",\n      \"wind\"\n    ],\n    \"emoji\": \"🌬️\",\n    \"text\": \"🌬︎\",\n    \"type\": 0,\n    \"order\": 4213,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"cyclone\",\n    \"hexcode\": \"1F300\",\n    \"tags\": [\n      \"dizzy\",\n      \"hurricane\",\n      \"twister\",\n      \"typhoon\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4214,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rainbow\",\n    \"hexcode\": \"1F308\",\n    \"tags\": [\n      \"gay\",\n      \"genderqueer\",\n      \"glbt\",\n      \"glbtq\",\n      \"lesbian\",\n      \"lgbt\",\n      \"lgbtq\",\n      \"lgbtqia\",\n      \"nature\",\n      \"pride\",\n      \"queer\",\n      \"rain\",\n      \"trans\",\n      \"transgender\",\n      \"weather\"\n    ],\n    \"emoji\": \"🌈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4215,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"closed umbrella\",\n    \"hexcode\": \"1F302\",\n    \"tags\": [\n      \"closed\",\n      \"clothing\",\n      \"rain\",\n      \"umbrella\"\n    ],\n    \"emoji\": \"🌂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4216,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"umbrella\",\n    \"hexcode\": \"2602\",\n    \"tags\": [\n      \"clothing\",\n      \"rain\"\n    ],\n    \"emoji\": \"☂️\",\n    \"text\": \"☂︎\",\n    \"type\": 0,\n    \"order\": 4218,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"umbrella with rain drops\",\n    \"hexcode\": \"2614\",\n    \"tags\": [\n      \"clothing\",\n      \"drop\",\n      \"drops\",\n      \"rain\",\n      \"umbrella\",\n      \"weather\"\n    ],\n    \"emoji\": \"☔️\",\n    \"text\": \"☔︎\",\n    \"type\": 1,\n    \"order\": 4219,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"umbrella on ground\",\n    \"hexcode\": \"26F1\",\n    \"tags\": [\n      \"ground\",\n      \"rain\",\n      \"sun\",\n      \"umbrella\"\n    ],\n    \"emoji\": \"⛱️\",\n    \"text\": \"⛱︎\",\n    \"type\": 0,\n    \"order\": 4221,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"high voltage\",\n    \"hexcode\": \"26A1\",\n    \"tags\": [\n      \"danger\",\n      \"electric\",\n      \"electricity\",\n      \"high\",\n      \"lightning\",\n      \"nature\",\n      \"thunder\",\n      \"thunderbolt\",\n      \"voltage\",\n      \"zap\"\n    ],\n    \"emoji\": \"⚡️\",\n    \"text\": \"⚡︎\",\n    \"type\": 1,\n    \"order\": 4222,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"snowflake\",\n    \"hexcode\": \"2744\",\n    \"tags\": [\n      \"cold\",\n      \"snow\",\n      \"weather\"\n    ],\n    \"emoji\": \"❄️\",\n    \"text\": \"❄︎\",\n    \"type\": 0,\n    \"order\": 4224,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"snowman\",\n    \"hexcode\": \"2603\",\n    \"tags\": [\n      \"cold\",\n      \"man\",\n      \"snow\"\n    ],\n    \"emoji\": \"☃️\",\n    \"text\": \"☃︎\",\n    \"type\": 0,\n    \"order\": 4226,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"snowman without snow\",\n    \"hexcode\": \"26C4\",\n    \"tags\": [\n      \"cold\",\n      \"man\",\n      \"snow\",\n      \"snowman\"\n    ],\n    \"emoji\": \"⛄️\",\n    \"text\": \"⛄︎\",\n    \"type\": 1,\n    \"order\": 4227,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"comet\",\n    \"hexcode\": \"2604\",\n    \"tags\": [\n      \"space\"\n    ],\n    \"emoji\": \"☄️\",\n    \"text\": \"☄︎\",\n    \"type\": 0,\n    \"order\": 4229,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 1\n  },\n  {\n    \"label\": \"fire\",\n    \"hexcode\": \"1F525\",\n    \"tags\": [\n      \"af\",\n      \"burn\",\n      \"flame\",\n      \"hot\",\n      \"lit\",\n      \"litaf\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4230,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"droplet\",\n    \"hexcode\": \"1F4A7\",\n    \"tags\": [\n      \"cold\",\n      \"comic\",\n      \"drop\",\n      \"nature\",\n      \"sad\",\n      \"sweat\",\n      \"tear\",\n      \"water\",\n      \"weather\"\n    ],\n    \"emoji\": \"💧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4231,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"water wave\",\n    \"hexcode\": \"1F30A\",\n    \"tags\": [\n      \"nature\",\n      \"ocean\",\n      \"surf\",\n      \"surfer\",\n      \"surfing\",\n      \"water\",\n      \"wave\"\n    ],\n    \"emoji\": \"🌊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4232,\n    \"group\": 5,\n    \"subgroup\": 59,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"jack-o-lantern\",\n    \"hexcode\": \"1F383\",\n    \"tags\": [\n      \"celebration\",\n      \"halloween\",\n      \"jack\",\n      \"lantern\",\n      \"pumpkin\"\n    ],\n    \"emoji\": \"🎃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4233,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Christmas tree\",\n    \"hexcode\": \"1F384\",\n    \"tags\": [\n      \"celebration\",\n      \"christmas\",\n      \"tree\"\n    ],\n    \"emoji\": \"🎄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4234,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fireworks\",\n    \"hexcode\": \"1F386\",\n    \"tags\": [\n      \"boom\",\n      \"celebration\",\n      \"entertainment\",\n      \"yolo\"\n    ],\n    \"emoji\": \"🎆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4235,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sparkler\",\n    \"hexcode\": \"1F387\",\n    \"tags\": [\n      \"boom\",\n      \"celebration\",\n      \"fireworks\",\n      \"sparkle\"\n    ],\n    \"emoji\": \"🎇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4236,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"firecracker\",\n    \"hexcode\": \"1F9E8\",\n    \"tags\": [\n      \"dynamite\",\n      \"explosive\",\n      \"fire\",\n      \"fireworks\",\n      \"light\",\n      \"pop\",\n      \"popping\",\n      \"spark\"\n    ],\n    \"emoji\": \"🧨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4237,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 11\n  },\n  {\n    \"label\": \"sparkles\",\n    \"hexcode\": \"2728\",\n    \"tags\": [\n      \"*\",\n      \"magic\",\n      \"sparkle\",\n      \"star\"\n    ],\n    \"emoji\": \"✨️\",\n    \"text\": \"✨︎\",\n    \"type\": 1,\n    \"order\": 4238,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"balloon\",\n    \"hexcode\": \"1F388\",\n    \"tags\": [\n      \"birthday\",\n      \"celebrate\",\n      \"celebration\"\n    ],\n    \"emoji\": \"🎈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4239,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"party popper\",\n    \"hexcode\": \"1F389\",\n    \"tags\": [\n      \"awesome\",\n      \"birthday\",\n      \"celebrate\",\n      \"celebration\",\n      \"excited\",\n      \"hooray\",\n      \"party\",\n      \"popper\",\n      \"tada\",\n      \"woohoo\"\n    ],\n    \"emoji\": \"🎉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4240,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"confetti ball\",\n    \"hexcode\": \"1F38A\",\n    \"tags\": [\n      \"ball\",\n      \"celebrate\",\n      \"celebration\",\n      \"confetti\",\n      \"party\",\n      \"woohoo\"\n    ],\n    \"emoji\": \"🎊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4241,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tanabata tree\",\n    \"hexcode\": \"1F38B\",\n    \"tags\": [\n      \"banner\",\n      \"celebration\",\n      \"japanese\",\n      \"tanabata\",\n      \"tree\"\n    ],\n    \"emoji\": \"🎋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4242,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pine decoration\",\n    \"hexcode\": \"1F38D\",\n    \"tags\": [\n      \"bamboo\",\n      \"celebration\",\n      \"decoration\",\n      \"japanese\",\n      \"pine\",\n      \"plant\"\n    ],\n    \"emoji\": \"🎍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4243,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese dolls\",\n    \"hexcode\": \"1F38E\",\n    \"tags\": [\n      \"celebration\",\n      \"doll\",\n      \"dolls\",\n      \"festival\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🎎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4244,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"carp streamer\",\n    \"hexcode\": \"1F38F\",\n    \"tags\": [\n      \"carp\",\n      \"celebration\",\n      \"streamer\"\n    ],\n    \"emoji\": \"🎏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4245,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wind chime\",\n    \"hexcode\": \"1F390\",\n    \"tags\": [\n      \"bell\",\n      \"celebration\",\n      \"chime\",\n      \"wind\"\n    ],\n    \"emoji\": \"🎐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4246,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"moon viewing ceremony\",\n    \"hexcode\": \"1F391\",\n    \"tags\": [\n      \"celebration\",\n      \"ceremony\",\n      \"moon\",\n      \"viewing\"\n    ],\n    \"emoji\": \"🎑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4247,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red envelope\",\n    \"hexcode\": \"1F9E7\",\n    \"tags\": [\n      \"envelope\",\n      \"gift\",\n      \"good\",\n      \"hóngbāo\",\n      \"lai\",\n      \"luck\",\n      \"money\",\n      \"red\",\n      \"see\"\n    ],\n    \"emoji\": \"🧧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4248,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 11\n  },\n  {\n    \"label\": \"ribbon\",\n    \"hexcode\": \"1F380\",\n    \"tags\": [\n      \"celebration\"\n    ],\n    \"emoji\": \"🎀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4249,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wrapped gift\",\n    \"hexcode\": \"1F381\",\n    \"tags\": [\n      \"birthday\",\n      \"bow\",\n      \"box\",\n      \"celebration\",\n      \"christmas\",\n      \"gift\",\n      \"present\",\n      \"surprise\",\n      \"wrapped\"\n    ],\n    \"emoji\": \"🎁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4250,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"reminder ribbon\",\n    \"hexcode\": \"1F397\",\n    \"tags\": [\n      \"celebration\",\n      \"reminder\",\n      \"ribbon\"\n    ],\n    \"emoji\": \"🎗️\",\n    \"text\": \"🎗︎\",\n    \"type\": 0,\n    \"order\": 4252,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"admission tickets\",\n    \"hexcode\": \"1F39F\",\n    \"tags\": [\n      \"admission\",\n      \"ticket\",\n      \"tickets\"\n    ],\n    \"emoji\": \"🎟️\",\n    \"text\": \"🎟︎\",\n    \"type\": 0,\n    \"order\": 4254,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"ticket\",\n    \"hexcode\": \"1F3AB\",\n    \"tags\": [\n      \"admission\",\n      \"stub\"\n    ],\n    \"emoji\": \"🎫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4255,\n    \"group\": 6,\n    \"subgroup\": 60,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"military medal\",\n    \"hexcode\": \"1F396\",\n    \"tags\": [\n      \"award\",\n      \"celebration\",\n      \"medal\",\n      \"military\"\n    ],\n    \"emoji\": \"🎖️\",\n    \"text\": \"🎖︎\",\n    \"type\": 0,\n    \"order\": 4257,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"trophy\",\n    \"hexcode\": \"1F3C6\",\n    \"tags\": [\n      \"champion\",\n      \"champs\",\n      \"prize\",\n      \"slay\",\n      \"sport\",\n      \"victory\",\n      \"win\",\n      \"winning\"\n    ],\n    \"emoji\": \"🏆️\",\n    \"text\": \"🏆︎\",\n    \"type\": 1,\n    \"order\": 4258,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sports medal\",\n    \"hexcode\": \"1F3C5\",\n    \"tags\": [\n      \"award\",\n      \"gold\",\n      \"medal\",\n      \"sports\",\n      \"winner\"\n    ],\n    \"emoji\": \"🏅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4259,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 1\n  },\n  {\n    \"label\": \"1st place medal\",\n    \"hexcode\": \"1F947\",\n    \"tags\": [\n      \"1st\",\n      \"first\",\n      \"gold\",\n      \"medal\",\n      \"place\"\n    ],\n    \"emoji\": \"🥇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4260,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 3\n  },\n  {\n    \"label\": \"2nd place medal\",\n    \"hexcode\": \"1F948\",\n    \"tags\": [\n      \"2nd\",\n      \"medal\",\n      \"place\",\n      \"second\",\n      \"silver\"\n    ],\n    \"emoji\": \"🥈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4261,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 3\n  },\n  {\n    \"label\": \"3rd place medal\",\n    \"hexcode\": \"1F949\",\n    \"tags\": [\n      \"3rd\",\n      \"bronze\",\n      \"medal\",\n      \"place\",\n      \"third\"\n    ],\n    \"emoji\": \"🥉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4262,\n    \"group\": 6,\n    \"subgroup\": 61,\n    \"version\": 3\n  },\n  {\n    \"label\": \"soccer ball\",\n    \"hexcode\": \"26BD\",\n    \"tags\": [\n      \"ball\",\n      \"football\",\n      \"futbol\",\n      \"soccer\",\n      \"sport\"\n    ],\n    \"emoji\": \"⚽️\",\n    \"text\": \"⚽︎\",\n    \"type\": 1,\n    \"order\": 4263,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"baseball\",\n    \"hexcode\": \"26BE\",\n    \"tags\": [\n      \"ball\",\n      \"sport\"\n    ],\n    \"emoji\": \"⚾️\",\n    \"text\": \"⚾︎\",\n    \"type\": 1,\n    \"order\": 4264,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"softball\",\n    \"hexcode\": \"1F94E\",\n    \"tags\": [\n      \"ball\",\n      \"glove\",\n      \"sports\",\n      \"underarm\"\n    ],\n    \"emoji\": \"🥎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4265,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 11\n  },\n  {\n    \"label\": \"basketball\",\n    \"hexcode\": \"1F3C0\",\n    \"tags\": [\n      \"ball\",\n      \"hoop\",\n      \"sport\"\n    ],\n    \"emoji\": \"🏀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4266,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"volleyball\",\n    \"hexcode\": \"1F3D0\",\n    \"tags\": [\n      \"ball\",\n      \"game\"\n    ],\n    \"emoji\": \"🏐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4267,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"american football\",\n    \"hexcode\": \"1F3C8\",\n    \"tags\": [\n      \"american\",\n      \"ball\",\n      \"bowl\",\n      \"football\",\n      \"sport\",\n      \"super\"\n    ],\n    \"emoji\": \"🏈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4268,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rugby football\",\n    \"hexcode\": \"1F3C9\",\n    \"tags\": [\n      \"ball\",\n      \"football\",\n      \"rugby\",\n      \"sport\"\n    ],\n    \"emoji\": \"🏉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4269,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"tennis\",\n    \"hexcode\": \"1F3BE\",\n    \"tags\": [\n      \"ball\",\n      \"racquet\",\n      \"sport\"\n    ],\n    \"emoji\": \"🎾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4270,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flying disc\",\n    \"hexcode\": \"1F94F\",\n    \"tags\": [\n      \"disc\",\n      \"flying\",\n      \"ultimate\"\n    ],\n    \"emoji\": \"🥏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4271,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bowling\",\n    \"hexcode\": \"1F3B3\",\n    \"tags\": [\n      \"ball\",\n      \"game\",\n      \"sport\",\n      \"strike\"\n    ],\n    \"emoji\": \"🎳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4272,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cricket game\",\n    \"hexcode\": \"1F3CF\",\n    \"tags\": [\n      \"ball\",\n      \"bat\",\n      \"cricket\",\n      \"game\"\n    ],\n    \"emoji\": \"🏏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4273,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"field hockey\",\n    \"hexcode\": \"1F3D1\",\n    \"tags\": [\n      \"ball\",\n      \"field\",\n      \"game\",\n      \"hockey\",\n      \"stick\"\n    ],\n    \"emoji\": \"🏑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4274,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"ice hockey\",\n    \"hexcode\": \"1F3D2\",\n    \"tags\": [\n      \"game\",\n      \"hockey\",\n      \"ice\",\n      \"puck\",\n      \"stick\"\n    ],\n    \"emoji\": \"🏒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4275,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"lacrosse\",\n    \"hexcode\": \"1F94D\",\n    \"tags\": [\n      \"ball\",\n      \"goal\",\n      \"sports\",\n      \"stick\"\n    ],\n    \"emoji\": \"🥍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4276,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 11\n  },\n  {\n    \"label\": \"ping pong\",\n    \"hexcode\": \"1F3D3\",\n    \"tags\": [\n      \"ball\",\n      \"bat\",\n      \"game\",\n      \"paddle\",\n      \"ping\",\n      \"pingpong\",\n      \"pong\",\n      \"table\",\n      \"tennis\"\n    ],\n    \"emoji\": \"🏓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4277,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"badminton\",\n    \"hexcode\": \"1F3F8\",\n    \"tags\": [\n      \"birdie\",\n      \"game\",\n      \"racquet\",\n      \"shuttlecock\"\n    ],\n    \"emoji\": \"🏸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4278,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 1\n  },\n  {\n    \"label\": \"boxing glove\",\n    \"hexcode\": \"1F94A\",\n    \"tags\": [\n      \"boxing\",\n      \"glove\"\n    ],\n    \"emoji\": \"🥊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4279,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 3\n  },\n  {\n    \"label\": \"martial arts uniform\",\n    \"hexcode\": \"1F94B\",\n    \"tags\": [\n      \"arts\",\n      \"judo\",\n      \"karate\",\n      \"martial\",\n      \"taekwondo\",\n      \"uniform\"\n    ],\n    \"emoji\": \"🥋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4280,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 3\n  },\n  {\n    \"label\": \"goal net\",\n    \"hexcode\": \"1F945\",\n    \"tags\": [\n      \"goal\",\n      \"net\"\n    ],\n    \"emoji\": \"🥅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4281,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 3\n  },\n  {\n    \"label\": \"flag in hole\",\n    \"hexcode\": \"26F3\",\n    \"tags\": [\n      \"flag\",\n      \"golf\",\n      \"hole\",\n      \"sport\"\n    ],\n    \"emoji\": \"⛳️\",\n    \"text\": \"⛳︎\",\n    \"type\": 1,\n    \"order\": 4282,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ice skate\",\n    \"hexcode\": \"26F8\",\n    \"tags\": [\n      \"ice\",\n      \"skate\",\n      \"skating\"\n    ],\n    \"emoji\": \"⛸️\",\n    \"text\": \"⛸︎\",\n    \"type\": 0,\n    \"order\": 4284,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"fishing pole\",\n    \"hexcode\": \"1F3A3\",\n    \"tags\": [\n      \"entertainment\",\n      \"fish\",\n      \"fishing\",\n      \"pole\",\n      \"sport\"\n    ],\n    \"emoji\": \"🎣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4285,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"diving mask\",\n    \"hexcode\": \"1F93F\",\n    \"tags\": [\n      \"diving\",\n      \"mask\",\n      \"scuba\",\n      \"snorkeling\"\n    ],\n    \"emoji\": \"🤿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4286,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 12\n  },\n  {\n    \"label\": \"running shirt\",\n    \"hexcode\": \"1F3BD\",\n    \"tags\": [\n      \"athletics\",\n      \"running\",\n      \"sash\",\n      \"shirt\"\n    ],\n    \"emoji\": \"🎽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4287,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"skis\",\n    \"hexcode\": \"1F3BF\",\n    \"tags\": [\n      \"ski\",\n      \"snow\",\n      \"sport\"\n    ],\n    \"emoji\": \"🎿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4288,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sled\",\n    \"hexcode\": \"1F6F7\",\n    \"tags\": [\n      \"luge\",\n      \"sledge\",\n      \"sleigh\",\n      \"snow\",\n      \"toboggan\"\n    ],\n    \"emoji\": \"🛷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4289,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 5\n  },\n  {\n    \"label\": \"curling stone\",\n    \"hexcode\": \"1F94C\",\n    \"tags\": [\n      \"curling\",\n      \"game\",\n      \"rock\",\n      \"stone\"\n    ],\n    \"emoji\": \"🥌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4290,\n    \"group\": 6,\n    \"subgroup\": 62,\n    \"version\": 5\n  },\n  {\n    \"label\": \"bullseye\",\n    \"hexcode\": \"1F3AF\",\n    \"tags\": [\n      \"bull\",\n      \"dart\",\n      \"direct\",\n      \"entertainment\",\n      \"game\",\n      \"hit\",\n      \"target\"\n    ],\n    \"emoji\": \"🎯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4291,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"yo-yo\",\n    \"hexcode\": \"1FA80\",\n    \"tags\": [\n      \"fluctuate\",\n      \"toy\"\n    ],\n    \"emoji\": \"🪀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4292,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 12\n  },\n  {\n    \"label\": \"kite\",\n    \"hexcode\": \"1FA81\",\n    \"tags\": [\n      \"fly\",\n      \"soar\"\n    ],\n    \"emoji\": \"🪁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4293,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 12\n  },\n  {\n    \"label\": \"water pistol\",\n    \"hexcode\": \"1F52B\",\n    \"tags\": [\n      \"gun\",\n      \"handgun\",\n      \"pistol\",\n      \"revolver\",\n      \"tool\",\n      \"water\",\n      \"weapon\"\n    ],\n    \"emoji\": \"🔫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4294,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pool 8 ball\",\n    \"hexcode\": \"1F3B1\",\n    \"tags\": [\n      \"8\",\n      \"8ball\",\n      \"ball\",\n      \"billiard\",\n      \"eight\",\n      \"game\",\n      \"pool\"\n    ],\n    \"emoji\": \"🎱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4295,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"crystal ball\",\n    \"hexcode\": \"1F52E\",\n    \"tags\": [\n      \"ball\",\n      \"crystal\",\n      \"fairy\",\n      \"fairytale\",\n      \"fantasy\",\n      \"fortune\",\n      \"future\",\n      \"magic\",\n      \"tale\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4296,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"magic wand\",\n    \"hexcode\": \"1FA84\",\n    \"tags\": [\n      \"magic\",\n      \"magician\",\n      \"wand\",\n      \"witch\",\n      \"wizard\"\n    ],\n    \"emoji\": \"🪄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4297,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 13\n  },\n  {\n    \"label\": \"video game\",\n    \"hexcode\": \"1F3AE\",\n    \"tags\": [\n      \"controller\",\n      \"entertainment\",\n      \"game\",\n      \"video\"\n    ],\n    \"emoji\": \"🎮️\",\n    \"text\": \"🎮︎\",\n    \"type\": 1,\n    \"order\": 4298,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"joystick\",\n    \"hexcode\": \"1F579\",\n    \"tags\": [\n      \"game\",\n      \"video\",\n      \"videogame\"\n    ],\n    \"emoji\": \"🕹️\",\n    \"text\": \"🕹︎\",\n    \"type\": 0,\n    \"order\": 4300,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"slot machine\",\n    \"hexcode\": \"1F3B0\",\n    \"tags\": [\n      \"casino\",\n      \"gamble\",\n      \"gambling\",\n      \"game\",\n      \"machine\",\n      \"slot\",\n      \"slots\"\n    ],\n    \"emoji\": \"🎰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4301,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"game die\",\n    \"hexcode\": \"1F3B2\",\n    \"tags\": [\n      \"dice\",\n      \"die\",\n      \"entertainment\",\n      \"game\"\n    ],\n    \"emoji\": \"🎲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4302,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"puzzle piece\",\n    \"hexcode\": \"1F9E9\",\n    \"tags\": [\n      \"clue\",\n      \"interlocking\",\n      \"jigsaw\",\n      \"piece\",\n      \"puzzle\"\n    ],\n    \"emoji\": \"🧩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4303,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 11\n  },\n  {\n    \"label\": \"teddy bear\",\n    \"hexcode\": \"1F9F8\",\n    \"tags\": [\n      \"bear\",\n      \"plaything\",\n      \"plush\",\n      \"stuffed\",\n      \"teddy\",\n      \"toy\"\n    ],\n    \"emoji\": \"🧸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4304,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 11\n  },\n  {\n    \"label\": \"piñata\",\n    \"hexcode\": \"1FA85\",\n    \"tags\": [\n      \"candy\",\n      \"celebrate\",\n      \"celebration\",\n      \"cinco\",\n      \"de\",\n      \"festive\",\n      \"mayo\",\n      \"party\",\n      \"pinada\",\n      \"pinata\"\n    ],\n    \"emoji\": \"🪅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4305,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 13\n  },\n  {\n    \"label\": \"mirror ball\",\n    \"hexcode\": \"1FAA9\",\n    \"tags\": [\n      \"ball\",\n      \"dance\",\n      \"disco\",\n      \"glitter\",\n      \"mirror\",\n      \"party\"\n    ],\n    \"emoji\": \"🪩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4306,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 14\n  },\n  {\n    \"label\": \"nesting dolls\",\n    \"hexcode\": \"1FA86\",\n    \"tags\": [\n      \"babooshka\",\n      \"baboushka\",\n      \"babushka\",\n      \"doll\",\n      \"dolls\",\n      \"matryoshka\",\n      \"nesting\",\n      \"russia\"\n    ],\n    \"emoji\": \"🪆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4307,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 13\n  },\n  {\n    \"label\": \"spade suit\",\n    \"hexcode\": \"2660\",\n    \"tags\": [\n      \"card\",\n      \"game\",\n      \"spade\",\n      \"suit\"\n    ],\n    \"emoji\": \"♠️\",\n    \"text\": \"♠︎\",\n    \"type\": 0,\n    \"order\": 4309,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heart suit\",\n    \"hexcode\": \"2665\",\n    \"tags\": [\n      \"card\",\n      \"emotion\",\n      \"game\",\n      \"heart\",\n      \"hearts\",\n      \"suit\"\n    ],\n    \"emoji\": \"♥️\",\n    \"text\": \"♥︎\",\n    \"type\": 0,\n    \"order\": 4311,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"diamond suit\",\n    \"hexcode\": \"2666\",\n    \"tags\": [\n      \"card\",\n      \"diamond\",\n      \"game\",\n      \"suit\"\n    ],\n    \"emoji\": \"♦️\",\n    \"text\": \"♦︎\",\n    \"type\": 0,\n    \"order\": 4313,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"club suit\",\n    \"hexcode\": \"2663\",\n    \"tags\": [\n      \"card\",\n      \"club\",\n      \"clubs\",\n      \"game\",\n      \"suit\"\n    ],\n    \"emoji\": \"♣️\",\n    \"text\": \"♣︎\",\n    \"type\": 0,\n    \"order\": 4315,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"chess pawn\",\n    \"hexcode\": \"265F\",\n    \"tags\": [\n      \"chess\",\n      \"dupe\",\n      \"expendable\",\n      \"pawn\"\n    ],\n    \"emoji\": \"♟️\",\n    \"text\": \"♟︎\",\n    \"type\": 0,\n    \"order\": 4317,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 11\n  },\n  {\n    \"label\": \"joker\",\n    \"hexcode\": \"1F0CF\",\n    \"tags\": [\n      \"card\",\n      \"game\",\n      \"wildcard\"\n    ],\n    \"emoji\": \"🃏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4318,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mahjong red dragon\",\n    \"hexcode\": \"1F004\",\n    \"tags\": [\n      \"dragon\",\n      \"game\",\n      \"mahjong\",\n      \"red\"\n    ],\n    \"emoji\": \"🀄️\",\n    \"text\": \"🀄︎\",\n    \"type\": 1,\n    \"order\": 4319,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flower playing cards\",\n    \"hexcode\": \"1F3B4\",\n    \"tags\": [\n      \"card\",\n      \"cards\",\n      \"flower\",\n      \"game\",\n      \"japanese\",\n      \"playing\"\n    ],\n    \"emoji\": \"🎴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4320,\n    \"group\": 6,\n    \"subgroup\": 63,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"performing arts\",\n    \"hexcode\": \"1F3AD\",\n    \"tags\": [\n      \"actor\",\n      \"actress\",\n      \"art\",\n      \"arts\",\n      \"entertainment\",\n      \"mask\",\n      \"performing\",\n      \"theater\",\n      \"theatre\",\n      \"thespian\"\n    ],\n    \"emoji\": \"🎭️\",\n    \"text\": \"🎭︎\",\n    \"type\": 1,\n    \"order\": 4321,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"framed picture\",\n    \"hexcode\": \"1F5BC\",\n    \"tags\": [\n      \"art\",\n      \"frame\",\n      \"framed\",\n      \"museum\",\n      \"painting\",\n      \"picture\"\n    ],\n    \"emoji\": \"🖼️\",\n    \"text\": \"🖼︎\",\n    \"type\": 0,\n    \"order\": 4323,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"artist palette\",\n    \"hexcode\": \"1F3A8\",\n    \"tags\": [\n      \"art\",\n      \"artist\",\n      \"artsy\",\n      \"arty\",\n      \"colorful\",\n      \"creative\",\n      \"entertainment\",\n      \"museum\",\n      \"painter\",\n      \"painting\",\n      \"palette\"\n    ],\n    \"emoji\": \"🎨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4324,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"thread\",\n    \"hexcode\": \"1F9F5\",\n    \"tags\": [\n      \"needle\",\n      \"sewing\",\n      \"spool\",\n      \"string\"\n    ],\n    \"emoji\": \"🧵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4325,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 11\n  },\n  {\n    \"label\": \"sewing needle\",\n    \"hexcode\": \"1FAA1\",\n    \"tags\": [\n      \"embroidery\",\n      \"needle\",\n      \"sew\",\n      \"sewing\",\n      \"stitches\",\n      \"sutures\",\n      \"tailoring\",\n      \"thread\"\n    ],\n    \"emoji\": \"🪡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4326,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 13\n  },\n  {\n    \"label\": \"yarn\",\n    \"hexcode\": \"1F9F6\",\n    \"tags\": [\n      \"ball\",\n      \"crochet\",\n      \"knit\"\n    ],\n    \"emoji\": \"🧶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4327,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 11\n  },\n  {\n    \"label\": \"knot\",\n    \"hexcode\": \"1FAA2\",\n    \"tags\": [\n      \"cord\",\n      \"rope\",\n      \"tangled\",\n      \"tie\",\n      \"twine\",\n      \"twist\"\n    ],\n    \"emoji\": \"🪢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4328,\n    \"group\": 6,\n    \"subgroup\": 64,\n    \"version\": 13\n  },\n  {\n    \"label\": \"glasses\",\n    \"hexcode\": \"1F453\",\n    \"tags\": [\n      \"clothing\",\n      \"eye\",\n      \"eyeglasses\",\n      \"eyewear\"\n    ],\n    \"emoji\": \"👓️\",\n    \"text\": \"👓︎\",\n    \"type\": 1,\n    \"order\": 4329,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sunglasses\",\n    \"hexcode\": \"1F576\",\n    \"tags\": [\n      \"dark\",\n      \"eye\",\n      \"eyewear\",\n      \"glasses\"\n    ],\n    \"emoji\": \"🕶️\",\n    \"text\": \"🕶︎\",\n    \"type\": 0,\n    \"order\": 4331,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"goggles\",\n    \"hexcode\": \"1F97D\",\n    \"tags\": [\n      \"dive\",\n      \"eye\",\n      \"protection\",\n      \"scuba\",\n      \"swimming\",\n      \"welding\"\n    ],\n    \"emoji\": \"🥽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4332,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 11\n  },\n  {\n    \"label\": \"lab coat\",\n    \"hexcode\": \"1F97C\",\n    \"tags\": [\n      \"clothes\",\n      \"coat\",\n      \"doctor\",\n      \"dr\",\n      \"experiment\",\n      \"jacket\",\n      \"lab\",\n      \"scientist\",\n      \"white\"\n    ],\n    \"emoji\": \"🥼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4333,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 11\n  },\n  {\n    \"label\": \"safety vest\",\n    \"hexcode\": \"1F9BA\",\n    \"tags\": [\n      \"emergency\",\n      \"safety\",\n      \"vest\"\n    ],\n    \"emoji\": \"🦺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4334,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"necktie\",\n    \"hexcode\": \"1F454\",\n    \"tags\": [\n      \"clothing\",\n      \"employed\",\n      \"serious\",\n      \"shirt\",\n      \"tie\"\n    ],\n    \"emoji\": \"👔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4335,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"t-shirt\",\n    \"hexcode\": \"1F455\",\n    \"tags\": [\n      \"blue\",\n      \"casual\",\n      \"clothes\",\n      \"clothing\",\n      \"collar\",\n      \"dressed\",\n      \"shirt\",\n      \"shopping\",\n      \"tshirt\",\n      \"weekend\"\n    ],\n    \"emoji\": \"👕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4336,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"jeans\",\n    \"hexcode\": \"1F456\",\n    \"tags\": [\n      \"blue\",\n      \"casual\",\n      \"clothes\",\n      \"clothing\",\n      \"denim\",\n      \"dressed\",\n      \"pants\",\n      \"shopping\",\n      \"trousers\",\n      \"weekend\"\n    ],\n    \"emoji\": \"👖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4337,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"scarf\",\n    \"hexcode\": \"1F9E3\",\n    \"tags\": [\n      \"bundle\",\n      \"cold\",\n      \"neck\",\n      \"up\"\n    ],\n    \"emoji\": \"🧣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4338,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 5\n  },\n  {\n    \"label\": \"gloves\",\n    \"hexcode\": \"1F9E4\",\n    \"tags\": [\n      \"hand\"\n    ],\n    \"emoji\": \"🧤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4339,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 5\n  },\n  {\n    \"label\": \"coat\",\n    \"hexcode\": \"1F9E5\",\n    \"tags\": [\n      \"brr\",\n      \"bundle\",\n      \"cold\",\n      \"jacket\",\n      \"up\"\n    ],\n    \"emoji\": \"🧥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4340,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 5\n  },\n  {\n    \"label\": \"socks\",\n    \"hexcode\": \"1F9E6\",\n    \"tags\": [\n      \"stocking\"\n    ],\n    \"emoji\": \"🧦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4341,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 5\n  },\n  {\n    \"label\": \"dress\",\n    \"hexcode\": \"1F457\",\n    \"tags\": [\n      \"clothes\",\n      \"clothing\",\n      \"dressed\",\n      \"fancy\",\n      \"shopping\"\n    ],\n    \"emoji\": \"👗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4342,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"kimono\",\n    \"hexcode\": \"1F458\",\n    \"tags\": [\n      \"clothing\",\n      \"comfortable\"\n    ],\n    \"emoji\": \"👘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4343,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sari\",\n    \"hexcode\": \"1F97B\",\n    \"tags\": [\n      \"clothing\",\n      \"dress\"\n    ],\n    \"emoji\": \"🥻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4344,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"one-piece swimsuit\",\n    \"hexcode\": \"1FA71\",\n    \"tags\": [\n      \"bathing\",\n      \"one-piece\",\n      \"suit\",\n      \"swimsuit\"\n    ],\n    \"emoji\": \"🩱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4345,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"briefs\",\n    \"hexcode\": \"1FA72\",\n    \"tags\": [\n      \"bathing\",\n      \"one-piece\",\n      \"suit\",\n      \"swimsuit\",\n      \"underwear\"\n    ],\n    \"emoji\": \"🩲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4346,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"shorts\",\n    \"hexcode\": \"1FA73\",\n    \"tags\": [\n      \"bathing\",\n      \"pants\",\n      \"suit\",\n      \"swimsuit\",\n      \"underwear\"\n    ],\n    \"emoji\": \"🩳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4347,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"bikini\",\n    \"hexcode\": \"1F459\",\n    \"tags\": [\n      \"bathing\",\n      \"beach\",\n      \"clothing\",\n      \"pool\",\n      \"suit\",\n      \"swim\"\n    ],\n    \"emoji\": \"👙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4348,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"woman’s clothes\",\n    \"hexcode\": \"1F45A\",\n    \"tags\": [\n      \"blouse\",\n      \"clothes\",\n      \"clothing\",\n      \"collar\",\n      \"dress\",\n      \"dressed\",\n      \"lady\",\n      \"shirt\",\n      \"shopping\",\n      \"woman\",\n      \"woman’s\"\n    ],\n    \"emoji\": \"👚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4349,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"folding hand fan\",\n    \"hexcode\": \"1FAAD\",\n    \"tags\": [\n      \"clack\",\n      \"clap\",\n      \"cool\",\n      \"cooling\",\n      \"dance\",\n      \"fan\",\n      \"flirt\",\n      \"flutter\",\n      \"folding\",\n      \"hand\",\n      \"hot\",\n      \"shy\"\n    ],\n    \"emoji\": \"🪭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4350,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 15\n  },\n  {\n    \"label\": \"purse\",\n    \"hexcode\": \"1F45B\",\n    \"tags\": [\n      \"clothes\",\n      \"clothing\",\n      \"coin\",\n      \"dress\",\n      \"fancy\",\n      \"handbag\",\n      \"shopping\"\n    ],\n    \"emoji\": \"👛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4351,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"handbag\",\n    \"hexcode\": \"1F45C\",\n    \"tags\": [\n      \"bag\",\n      \"clothes\",\n      \"clothing\",\n      \"dress\",\n      \"lady\",\n      \"purse\",\n      \"shopping\"\n    ],\n    \"emoji\": \"👜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4352,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clutch bag\",\n    \"hexcode\": \"1F45D\",\n    \"tags\": [\n      \"bag\",\n      \"clothes\",\n      \"clothing\",\n      \"clutch\",\n      \"dress\",\n      \"handbag\",\n      \"pouch\",\n      \"purse\"\n    ],\n    \"emoji\": \"👝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4353,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shopping bags\",\n    \"hexcode\": \"1F6CD\",\n    \"tags\": [\n      \"bag\",\n      \"bags\",\n      \"hotel\",\n      \"shopping\"\n    ],\n    \"emoji\": \"🛍️\",\n    \"text\": \"🛍︎\",\n    \"type\": 0,\n    \"order\": 4355,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"backpack\",\n    \"hexcode\": \"1F392\",\n    \"tags\": [\n      \"backpacking\",\n      \"bag\",\n      \"bookbag\",\n      \"education\",\n      \"rucksack\",\n      \"satchel\",\n      \"school\"\n    ],\n    \"emoji\": \"🎒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4356,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"thong sandal\",\n    \"hexcode\": \"1FA74\",\n    \"tags\": [\n      \"beach\",\n      \"flip\",\n      \"flop\",\n      \"sandal\",\n      \"sandals\",\n      \"shoe\",\n      \"thong\",\n      \"thongs\",\n      \"zōri\"\n    ],\n    \"emoji\": \"🩴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4357,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 13\n  },\n  {\n    \"label\": \"man’s shoe\",\n    \"hexcode\": \"1F45E\",\n    \"tags\": [\n      \"brown\",\n      \"clothes\",\n      \"clothing\",\n      \"feet\",\n      \"foot\",\n      \"kick\",\n      \"man\",\n      \"man’s\",\n      \"shoe\",\n      \"shoes\",\n      \"shopping\"\n    ],\n    \"emoji\": \"👞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4358,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"running shoe\",\n    \"hexcode\": \"1F45F\",\n    \"tags\": [\n      \"athletic\",\n      \"clothes\",\n      \"clothing\",\n      \"fast\",\n      \"kick\",\n      \"running\",\n      \"shoe\",\n      \"shoes\",\n      \"shopping\",\n      \"sneaker\",\n      \"tennis\"\n    ],\n    \"emoji\": \"👟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4359,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hiking boot\",\n    \"hexcode\": \"1F97E\",\n    \"tags\": [\n      \"backpacking\",\n      \"boot\",\n      \"brown\",\n      \"camping\",\n      \"hiking\",\n      \"outdoors\",\n      \"shoe\"\n    ],\n    \"emoji\": \"🥾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4360,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 11\n  },\n  {\n    \"label\": \"flat shoe\",\n    \"hexcode\": \"1F97F\",\n    \"tags\": [\n      \"ballet\",\n      \"comfy\",\n      \"flat\",\n      \"flats\",\n      \"shoe\",\n      \"slip-on\",\n      \"slipper\"\n    ],\n    \"emoji\": \"🥿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4361,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 11\n  },\n  {\n    \"label\": \"high-heeled shoe\",\n    \"hexcode\": \"1F460\",\n    \"tags\": [\n      \"clothes\",\n      \"clothing\",\n      \"dress\",\n      \"fashion\",\n      \"heel\",\n      \"heels\",\n      \"high-heeled\",\n      \"shoe\",\n      \"shoes\",\n      \"shopping\",\n      \"stiletto\",\n      \"woman\"\n    ],\n    \"emoji\": \"👠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4362,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"woman’s sandal\",\n    \"hexcode\": \"1F461\",\n    \"tags\": [\n      \"clothing\",\n      \"sandal\",\n      \"shoe\",\n      \"woman\",\n      \"woman’s\"\n    ],\n    \"emoji\": \"👡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4363,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ballet shoes\",\n    \"hexcode\": \"1FA70\",\n    \"tags\": [\n      \"ballet\",\n      \"dance\",\n      \"shoes\"\n    ],\n    \"emoji\": \"🩰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4364,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 12\n  },\n  {\n    \"label\": \"woman’s boot\",\n    \"hexcode\": \"1F462\",\n    \"tags\": [\n      \"boot\",\n      \"clothes\",\n      \"clothing\",\n      \"dress\",\n      \"shoe\",\n      \"shoes\",\n      \"shopping\",\n      \"woman\",\n      \"woman’s\"\n    ],\n    \"emoji\": \"👢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4365,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hair pick\",\n    \"hexcode\": \"1FAAE\",\n    \"tags\": [\n      \"afro\",\n      \"comb\",\n      \"groom\",\n      \"hair\",\n      \"pick\"\n    ],\n    \"emoji\": \"🪮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4366,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 15\n  },\n  {\n    \"label\": \"crown\",\n    \"hexcode\": \"1F451\",\n    \"tags\": [\n      \"clothing\",\n      \"family\",\n      \"king\",\n      \"medieval\",\n      \"queen\",\n      \"royal\",\n      \"royalty\",\n      \"win\"\n    ],\n    \"emoji\": \"👑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4367,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"woman’s hat\",\n    \"hexcode\": \"1F452\",\n    \"tags\": [\n      \"clothes\",\n      \"clothing\",\n      \"garden\",\n      \"hat\",\n      \"hats\",\n      \"party\",\n      \"woman\",\n      \"woman’s\"\n    ],\n    \"emoji\": \"👒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4368,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"top hat\",\n    \"hexcode\": \"1F3A9\",\n    \"tags\": [\n      \"clothes\",\n      \"clothing\",\n      \"fancy\",\n      \"formal\",\n      \"hat\",\n      \"magic\",\n      \"top\",\n      \"tophat\"\n    ],\n    \"emoji\": \"🎩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4369,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"graduation cap\",\n    \"hexcode\": \"1F393\",\n    \"tags\": [\n      \"cap\",\n      \"celebration\",\n      \"clothing\",\n      \"education\",\n      \"graduation\",\n      \"hat\",\n      \"scholar\"\n    ],\n    \"emoji\": \"🎓️\",\n    \"text\": \"🎓︎\",\n    \"type\": 1,\n    \"order\": 4370,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"billed cap\",\n    \"hexcode\": \"1F9E2\",\n    \"tags\": [\n      \"baseball\",\n      \"bent\",\n      \"billed\",\n      \"cap\",\n      \"dad\",\n      \"hat\"\n    ],\n    \"emoji\": \"🧢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4371,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 5\n  },\n  {\n    \"label\": \"military helmet\",\n    \"hexcode\": \"1FA96\",\n    \"tags\": [\n      \"army\",\n      \"helmet\",\n      \"military\",\n      \"soldier\",\n      \"war\",\n      \"warrior\"\n    ],\n    \"emoji\": \"🪖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4372,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 13\n  },\n  {\n    \"label\": \"rescue worker’s helmet\",\n    \"hexcode\": \"26D1\",\n    \"tags\": [\n      \"aid\",\n      \"cross\",\n      \"face\",\n      \"hat\",\n      \"helmet\",\n      \"rescue\",\n      \"worker’s\"\n    ],\n    \"emoji\": \"⛑️\",\n    \"text\": \"⛑︎\",\n    \"type\": 0,\n    \"order\": 4374,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"prayer beads\",\n    \"hexcode\": \"1F4FF\",\n    \"tags\": [\n      \"beads\",\n      \"clothing\",\n      \"necklace\",\n      \"prayer\",\n      \"religion\"\n    ],\n    \"emoji\": \"📿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4375,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 1\n  },\n  {\n    \"label\": \"lipstick\",\n    \"hexcode\": \"1F484\",\n    \"tags\": [\n      \"cosmetics\",\n      \"date\",\n      \"makeup\"\n    ],\n    \"emoji\": \"💄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4376,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ring\",\n    \"hexcode\": \"1F48D\",\n    \"tags\": [\n      \"diamond\",\n      \"engaged\",\n      \"engagement\",\n      \"married\",\n      \"romance\",\n      \"shiny\",\n      \"sparkling\",\n      \"wedding\"\n    ],\n    \"emoji\": \"💍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4377,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"gem stone\",\n    \"hexcode\": \"1F48E\",\n    \"tags\": [\n      \"diamond\",\n      \"engagement\",\n      \"gem\",\n      \"jewel\",\n      \"money\",\n      \"romance\",\n      \"stone\",\n      \"wedding\"\n    ],\n    \"emoji\": \"💎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4378,\n    \"group\": 7,\n    \"subgroup\": 65,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"muted speaker\",\n    \"hexcode\": \"1F507\",\n    \"tags\": [\n      \"mute\",\n      \"muted\",\n      \"quiet\",\n      \"silent\",\n      \"sound\",\n      \"speaker\"\n    ],\n    \"emoji\": \"🔇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4379,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 1\n  },\n  {\n    \"label\": \"speaker low volume\",\n    \"hexcode\": \"1F508\",\n    \"tags\": [\n      \"low\",\n      \"soft\",\n      \"sound\",\n      \"speaker\",\n      \"volume\"\n    ],\n    \"emoji\": \"🔈️\",\n    \"text\": \"🔈︎\",\n    \"type\": 1,\n    \"order\": 4380,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"speaker medium volume\",\n    \"hexcode\": \"1F509\",\n    \"tags\": [\n      \"medium\",\n      \"sound\",\n      \"speaker\",\n      \"volume\"\n    ],\n    \"emoji\": \"🔉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4381,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 1\n  },\n  {\n    \"label\": \"speaker high volume\",\n    \"hexcode\": \"1F50A\",\n    \"tags\": [\n      \"high\",\n      \"loud\",\n      \"music\",\n      \"sound\",\n      \"speaker\",\n      \"volume\"\n    ],\n    \"emoji\": \"🔊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4382,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"loudspeaker\",\n    \"hexcode\": \"1F4E2\",\n    \"tags\": [\n      \"address\",\n      \"communication\",\n      \"loud\",\n      \"public\",\n      \"sound\"\n    ],\n    \"emoji\": \"📢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4383,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"megaphone\",\n    \"hexcode\": \"1F4E3\",\n    \"tags\": [\n      \"cheering\",\n      \"sound\"\n    ],\n    \"emoji\": \"📣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4384,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"postal horn\",\n    \"hexcode\": \"1F4EF\",\n    \"tags\": [\n      \"horn\",\n      \"post\",\n      \"postal\"\n    ],\n    \"emoji\": \"📯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4385,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 1\n  },\n  {\n    \"label\": \"bell\",\n    \"hexcode\": \"1F514\",\n    \"tags\": [\n      \"break\",\n      \"church\",\n      \"sound\"\n    ],\n    \"emoji\": \"🔔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4386,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bell with slash\",\n    \"hexcode\": \"1F515\",\n    \"tags\": [\n      \"bell\",\n      \"forbidden\",\n      \"mute\",\n      \"no\",\n      \"not\",\n      \"prohibited\",\n      \"quiet\",\n      \"silent\",\n      \"slash\",\n      \"sound\"\n    ],\n    \"emoji\": \"🔕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4387,\n    \"group\": 7,\n    \"subgroup\": 66,\n    \"version\": 1\n  },\n  {\n    \"label\": \"musical score\",\n    \"hexcode\": \"1F3BC\",\n    \"tags\": [\n      \"music\",\n      \"musical\",\n      \"note\",\n      \"score\"\n    ],\n    \"emoji\": \"🎼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4388,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"musical note\",\n    \"hexcode\": \"1F3B5\",\n    \"tags\": [\n      \"music\",\n      \"musical\",\n      \"note\",\n      \"sound\"\n    ],\n    \"emoji\": \"🎵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4389,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"musical notes\",\n    \"hexcode\": \"1F3B6\",\n    \"tags\": [\n      \"music\",\n      \"musical\",\n      \"note\",\n      \"notes\",\n      \"sound\"\n    ],\n    \"emoji\": \"🎶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4390,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"studio microphone\",\n    \"hexcode\": \"1F399\",\n    \"tags\": [\n      \"mic\",\n      \"microphone\",\n      \"music\",\n      \"studio\"\n    ],\n    \"emoji\": \"🎙️\",\n    \"text\": \"🎙︎\",\n    \"type\": 0,\n    \"order\": 4392,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"level slider\",\n    \"hexcode\": \"1F39A\",\n    \"tags\": [\n      \"level\",\n      \"music\",\n      \"slider\"\n    ],\n    \"emoji\": \"🎚️\",\n    \"text\": \"🎚︎\",\n    \"type\": 0,\n    \"order\": 4394,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"control knobs\",\n    \"hexcode\": \"1F39B\",\n    \"tags\": [\n      \"control\",\n      \"knobs\",\n      \"music\"\n    ],\n    \"emoji\": \"🎛️\",\n    \"text\": \"🎛︎\",\n    \"type\": 0,\n    \"order\": 4396,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"microphone\",\n    \"hexcode\": \"1F3A4\",\n    \"tags\": [\n      \"karaoke\",\n      \"mic\",\n      \"music\",\n      \"sing\",\n      \"sound\"\n    ],\n    \"emoji\": \"🎤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4397,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"headphone\",\n    \"hexcode\": \"1F3A7\",\n    \"tags\": [\n      \"earbud\",\n      \"sound\"\n    ],\n    \"emoji\": \"🎧️\",\n    \"text\": \"🎧︎\",\n    \"type\": 1,\n    \"order\": 4398,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"radio\",\n    \"hexcode\": \"1F4FB\",\n    \"tags\": [\n      \"entertainment\",\n      \"tbt\",\n      \"video\"\n    ],\n    \"emoji\": \"📻️\",\n    \"text\": \"📻︎\",\n    \"type\": 1,\n    \"order\": 4399,\n    \"group\": 7,\n    \"subgroup\": 67,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"saxophone\",\n    \"hexcode\": \"1F3B7\",\n    \"tags\": [\n      \"instrument\",\n      \"music\",\n      \"sax\"\n    ],\n    \"emoji\": \"🎷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4400,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"trumpet\",\n    \"hexcode\": \"1F3BA\",\n    \"tags\": [\n      \"instrument\",\n      \"music\"\n    ],\n    \"emoji\": \"🎺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4401,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"trombone\",\n    \"hexcode\": \"1FA8A\",\n    \"tags\": [\n      \"brass\",\n      \"instrument\",\n      \"jazz\",\n      \"music\",\n      \"sad\",\n      \"slide\"\n    ],\n    \"emoji\": \"🪊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4402,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 17\n  },\n  {\n    \"label\": \"accordion\",\n    \"hexcode\": \"1FA97\",\n    \"tags\": [\n      \"box\",\n      \"concertina\",\n      \"instrument\",\n      \"music\",\n      \"squeeze\",\n      \"squeezebox\"\n    ],\n    \"emoji\": \"🪗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4403,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 13\n  },\n  {\n    \"label\": \"guitar\",\n    \"hexcode\": \"1F3B8\",\n    \"tags\": [\n      \"instrument\",\n      \"music\",\n      \"strat\"\n    ],\n    \"emoji\": \"🎸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4404,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"musical keyboard\",\n    \"hexcode\": \"1F3B9\",\n    \"tags\": [\n      \"instrument\",\n      \"keyboard\",\n      \"music\",\n      \"musical\",\n      \"piano\"\n    ],\n    \"emoji\": \"🎹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4405,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"violin\",\n    \"hexcode\": \"1F3BB\",\n    \"tags\": [\n      \"instrument\",\n      \"music\"\n    ],\n    \"emoji\": \"🎻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4406,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"banjo\",\n    \"hexcode\": \"1FA95\",\n    \"tags\": [\n      \"music\",\n      \"stringed\"\n    ],\n    \"emoji\": \"🪕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4407,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 12\n  },\n  {\n    \"label\": \"drum\",\n    \"hexcode\": \"1F941\",\n    \"tags\": [\n      \"drumsticks\",\n      \"music\"\n    ],\n    \"emoji\": \"🥁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4408,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 3\n  },\n  {\n    \"label\": \"long drum\",\n    \"hexcode\": \"1FA98\",\n    \"tags\": [\n      \"beat\",\n      \"conga\",\n      \"drum\",\n      \"instrument\",\n      \"long\",\n      \"rhythm\"\n    ],\n    \"emoji\": \"🪘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4409,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 13\n  },\n  {\n    \"label\": \"maracas\",\n    \"hexcode\": \"1FA87\",\n    \"tags\": [\n      \"cha\",\n      \"dance\",\n      \"instrument\",\n      \"music\",\n      \"party\",\n      \"percussion\",\n      \"rattle\",\n      \"shake\",\n      \"shaker\"\n    ],\n    \"emoji\": \"🪇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4410,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 15\n  },\n  {\n    \"label\": \"flute\",\n    \"hexcode\": \"1FA88\",\n    \"tags\": [\n      \"band\",\n      \"fife\",\n      \"flautist\",\n      \"instrument\",\n      \"marching\",\n      \"music\",\n      \"orchestra\",\n      \"piccolo\",\n      \"pipe\",\n      \"recorder\",\n      \"woodwind\"\n    ],\n    \"emoji\": \"🪈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4411,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 15\n  },\n  {\n    \"label\": \"harp\",\n    \"hexcode\": \"1FA89\",\n    \"tags\": [\n      \"cupid\",\n      \"instrument\",\n      \"love\",\n      \"music\",\n      \"orchestra\"\n    ],\n    \"emoji\": \"🪉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4412,\n    \"group\": 7,\n    \"subgroup\": 68,\n    \"version\": 16\n  },\n  {\n    \"label\": \"mobile phone\",\n    \"hexcode\": \"1F4F1\",\n    \"tags\": [\n      \"cell\",\n      \"communication\",\n      \"mobile\",\n      \"phone\",\n      \"telephone\"\n    ],\n    \"emoji\": \"📱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4413,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mobile phone with arrow\",\n    \"hexcode\": \"1F4F2\",\n    \"tags\": [\n      \"arrow\",\n      \"build\",\n      \"call\",\n      \"cell\",\n      \"communication\",\n      \"mobile\",\n      \"phone\",\n      \"receive\",\n      \"telephone\"\n    ],\n    \"emoji\": \"📲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4414,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"telephone\",\n    \"hexcode\": \"260E\",\n    \"tags\": [\n      \"phone\"\n    ],\n    \"emoji\": \"☎️\",\n    \"text\": \"☎︎\",\n    \"type\": 0,\n    \"order\": 4416,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"telephone receiver\",\n    \"hexcode\": \"1F4DE\",\n    \"tags\": [\n      \"communication\",\n      \"phone\",\n      \"receiver\",\n      \"telephone\",\n      \"voip\"\n    ],\n    \"emoji\": \"📞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4417,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pager\",\n    \"hexcode\": \"1F4DF\",\n    \"tags\": [\n      \"communication\"\n    ],\n    \"emoji\": \"📟️\",\n    \"text\": \"📟︎\",\n    \"type\": 1,\n    \"order\": 4418,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fax machine\",\n    \"hexcode\": \"1F4E0\",\n    \"tags\": [\n      \"communication\",\n      \"fax\",\n      \"machine\"\n    ],\n    \"emoji\": \"📠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4419,\n    \"group\": 7,\n    \"subgroup\": 69,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"battery\",\n    \"hexcode\": \"1F50B\",\n    \"tags\": [\n      \"battery\"\n    ],\n    \"emoji\": \"🔋\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4420,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"low battery\",\n    \"hexcode\": \"1FAAB\",\n    \"tags\": [\n      \"battery\",\n      \"drained\",\n      \"electronic\",\n      \"energy\",\n      \"low\",\n      \"power\"\n    ],\n    \"emoji\": \"🪫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4421,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 14\n  },\n  {\n    \"label\": \"electric plug\",\n    \"hexcode\": \"1F50C\",\n    \"tags\": [\n      \"electric\",\n      \"electricity\",\n      \"plug\"\n    ],\n    \"emoji\": \"🔌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4422,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"laptop\",\n    \"hexcode\": \"1F4BB\",\n    \"tags\": [\n      \"computer\",\n      \"office\",\n      \"pc\",\n      \"personal\"\n    ],\n    \"emoji\": \"💻️\",\n    \"text\": \"💻︎\",\n    \"type\": 1,\n    \"order\": 4423,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"desktop computer\",\n    \"hexcode\": \"1F5A5\",\n    \"tags\": [\n      \"computer\",\n      \"desktop\",\n      \"monitor\"\n    ],\n    \"emoji\": \"🖥️\",\n    \"text\": \"🖥︎\",\n    \"type\": 0,\n    \"order\": 4425,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"printer\",\n    \"hexcode\": \"1F5A8\",\n    \"tags\": [\n      \"computer\"\n    ],\n    \"emoji\": \"🖨️\",\n    \"text\": \"🖨︎\",\n    \"type\": 0,\n    \"order\": 4427,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"keyboard\",\n    \"hexcode\": \"2328\",\n    \"tags\": [\n      \"computer\"\n    ],\n    \"emoji\": \"⌨️\",\n    \"text\": \"⌨︎\",\n    \"type\": 0,\n    \"order\": 4429,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 1\n  },\n  {\n    \"label\": \"computer mouse\",\n    \"hexcode\": \"1F5B1\",\n    \"tags\": [\n      \"computer\",\n      \"mouse\"\n    ],\n    \"emoji\": \"🖱️\",\n    \"text\": \"🖱︎\",\n    \"type\": 0,\n    \"order\": 4431,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"trackball\",\n    \"hexcode\": \"1F5B2\",\n    \"tags\": [\n      \"computer\"\n    ],\n    \"emoji\": \"🖲️\",\n    \"text\": \"🖲︎\",\n    \"type\": 0,\n    \"order\": 4433,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"computer disk\",\n    \"hexcode\": \"1F4BD\",\n    \"tags\": [\n      \"computer\",\n      \"disk\",\n      \"minidisk\",\n      \"optical\"\n    ],\n    \"emoji\": \"💽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4434,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"floppy disk\",\n    \"hexcode\": \"1F4BE\",\n    \"tags\": [\n      \"computer\",\n      \"disk\",\n      \"floppy\"\n    ],\n    \"emoji\": \"💾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4435,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"optical disk\",\n    \"hexcode\": \"1F4BF\",\n    \"tags\": [\n      \"blu-ray\",\n      \"cd\",\n      \"computer\",\n      \"disk\",\n      \"dvd\",\n      \"optical\"\n    ],\n    \"emoji\": \"💿️\",\n    \"text\": \"💿︎\",\n    \"type\": 1,\n    \"order\": 4436,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dvd\",\n    \"hexcode\": \"1F4C0\",\n    \"tags\": [\n      \"blu-ray\",\n      \"cd\",\n      \"computer\",\n      \"disk\",\n      \"optical\"\n    ],\n    \"emoji\": \"📀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4437,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"abacus\",\n    \"hexcode\": \"1F9EE\",\n    \"tags\": [\n      \"calculation\",\n      \"calculator\"\n    ],\n    \"emoji\": \"🧮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4438,\n    \"group\": 7,\n    \"subgroup\": 70,\n    \"version\": 11\n  },\n  {\n    \"label\": \"movie camera\",\n    \"hexcode\": \"1F3A5\",\n    \"tags\": [\n      \"bollywood\",\n      \"camera\",\n      \"cinema\",\n      \"film\",\n      \"hollywood\",\n      \"movie\",\n      \"record\"\n    ],\n    \"emoji\": \"🎥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4439,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"film frames\",\n    \"hexcode\": \"1F39E\",\n    \"tags\": [\n      \"cinema\",\n      \"film\",\n      \"frames\",\n      \"movie\"\n    ],\n    \"emoji\": \"🎞️\",\n    \"text\": \"🎞︎\",\n    \"type\": 0,\n    \"order\": 4441,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"film projector\",\n    \"hexcode\": \"1F4FD\",\n    \"tags\": [\n      \"cinema\",\n      \"film\",\n      \"movie\",\n      \"projector\",\n      \"video\"\n    ],\n    \"emoji\": \"📽️\",\n    \"text\": \"📽︎\",\n    \"type\": 0,\n    \"order\": 4443,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"clapper board\",\n    \"hexcode\": \"1F3AC\",\n    \"tags\": [\n      \"action\",\n      \"board\",\n      \"clapper\",\n      \"movie\"\n    ],\n    \"emoji\": \"🎬️\",\n    \"text\": \"🎬︎\",\n    \"type\": 1,\n    \"order\": 4444,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"television\",\n    \"hexcode\": \"1F4FA\",\n    \"tags\": [\n      \"tv\",\n      \"video\"\n    ],\n    \"emoji\": \"📺️\",\n    \"text\": \"📺︎\",\n    \"type\": 1,\n    \"order\": 4445,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"camera\",\n    \"hexcode\": \"1F4F7\",\n    \"tags\": [\n      \"photo\",\n      \"selfie\",\n      \"snap\",\n      \"tbt\",\n      \"trip\",\n      \"video\"\n    ],\n    \"emoji\": \"📷️\",\n    \"text\": \"📷︎\",\n    \"type\": 1,\n    \"order\": 4446,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"camera with flash\",\n    \"hexcode\": \"1F4F8\",\n    \"tags\": [\n      \"camera\",\n      \"flash\",\n      \"video\"\n    ],\n    \"emoji\": \"📸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4447,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 1\n  },\n  {\n    \"label\": \"video camera\",\n    \"hexcode\": \"1F4F9\",\n    \"tags\": [\n      \"camcorder\",\n      \"camera\",\n      \"tbt\",\n      \"video\"\n    ],\n    \"emoji\": \"📹️\",\n    \"text\": \"📹︎\",\n    \"type\": 1,\n    \"order\": 4448,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"videocassette\",\n    \"hexcode\": \"1F4FC\",\n    \"tags\": [\n      \"old\",\n      \"school\",\n      \"tape\",\n      \"vcr\",\n      \"vhs\",\n      \"video\"\n    ],\n    \"emoji\": \"📼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4449,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"magnifying glass tilted left\",\n    \"hexcode\": \"1F50D\",\n    \"tags\": [\n      \"glass\",\n      \"lab\",\n      \"left\",\n      \"left-pointing\",\n      \"magnifying\",\n      \"science\",\n      \"search\",\n      \"tilted\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔍️\",\n    \"text\": \"🔍︎\",\n    \"type\": 1,\n    \"order\": 4450,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"magnifying glass tilted right\",\n    \"hexcode\": \"1F50E\",\n    \"tags\": [\n      \"contact\",\n      \"glass\",\n      \"lab\",\n      \"magnifying\",\n      \"right\",\n      \"right-pointing\",\n      \"science\",\n      \"search\",\n      \"tilted\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4451,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"candle\",\n    \"hexcode\": \"1F56F\",\n    \"tags\": [\n      \"light\"\n    ],\n    \"emoji\": \"🕯️\",\n    \"text\": \"🕯︎\",\n    \"type\": 0,\n    \"order\": 4453,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"light bulb\",\n    \"hexcode\": \"1F4A1\",\n    \"tags\": [\n      \"bulb\",\n      \"comic\",\n      \"electric\",\n      \"idea\",\n      \"light\"\n    ],\n    \"emoji\": \"💡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4454,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flashlight\",\n    \"hexcode\": \"1F526\",\n    \"tags\": [\n      \"electric\",\n      \"light\",\n      \"tool\",\n      \"torch\"\n    ],\n    \"emoji\": \"🔦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4455,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red paper lantern\",\n    \"hexcode\": \"1F3EE\",\n    \"tags\": [\n      \"bar\",\n      \"lantern\",\n      \"light\",\n      \"paper\",\n      \"red\",\n      \"restaurant\"\n    ],\n    \"emoji\": \"🏮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4456,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"diya lamp\",\n    \"hexcode\": \"1FA94\",\n    \"tags\": [\n      \"diya\",\n      \"lamp\",\n      \"light\",\n      \"oil\"\n    ],\n    \"emoji\": \"🪔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4457,\n    \"group\": 7,\n    \"subgroup\": 71,\n    \"version\": 12\n  },\n  {\n    \"label\": \"notebook with decorative cover\",\n    \"hexcode\": \"1F4D4\",\n    \"tags\": [\n      \"book\",\n      \"cover\",\n      \"decorated\",\n      \"decorative\",\n      \"education\",\n      \"notebook\",\n      \"school\",\n      \"writing\"\n    ],\n    \"emoji\": \"📔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4458,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"closed book\",\n    \"hexcode\": \"1F4D5\",\n    \"tags\": [\n      \"book\",\n      \"closed\",\n      \"education\"\n    ],\n    \"emoji\": \"📕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4459,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"open book\",\n    \"hexcode\": \"1F4D6\",\n    \"tags\": [\n      \"book\",\n      \"education\",\n      \"fantasy\",\n      \"knowledge\",\n      \"library\",\n      \"novels\",\n      \"open\",\n      \"reading\"\n    ],\n    \"emoji\": \"📖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4460,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"green book\",\n    \"hexcode\": \"1F4D7\",\n    \"tags\": [\n      \"book\",\n      \"education\",\n      \"fantasy\",\n      \"green\",\n      \"library\",\n      \"reading\"\n    ],\n    \"emoji\": \"📗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4461,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"blue book\",\n    \"hexcode\": \"1F4D8\",\n    \"tags\": [\n      \"blue\",\n      \"book\",\n      \"education\",\n      \"fantasy\",\n      \"library\",\n      \"reading\"\n    ],\n    \"emoji\": \"📘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4462,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"orange book\",\n    \"hexcode\": \"1F4D9\",\n    \"tags\": [\n      \"book\",\n      \"education\",\n      \"fantasy\",\n      \"library\",\n      \"orange\",\n      \"reading\"\n    ],\n    \"emoji\": \"📙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4463,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"books\",\n    \"hexcode\": \"1F4DA\",\n    \"tags\": [\n      \"book\",\n      \"education\",\n      \"fantasy\",\n      \"knowledge\",\n      \"library\",\n      \"novels\",\n      \"reading\",\n      \"school\",\n      \"study\"\n    ],\n    \"emoji\": \"📚️\",\n    \"text\": \"📚︎\",\n    \"type\": 1,\n    \"order\": 4464,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"notebook\",\n    \"hexcode\": \"1F4D3\",\n    \"tags\": [\n      \"notebook\"\n    ],\n    \"emoji\": \"📓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4465,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ledger\",\n    \"hexcode\": \"1F4D2\",\n    \"tags\": [\n      \"notebook\"\n    ],\n    \"emoji\": \"📒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4466,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"page with curl\",\n    \"hexcode\": \"1F4C3\",\n    \"tags\": [\n      \"curl\",\n      \"document\",\n      \"page\",\n      \"paper\"\n    ],\n    \"emoji\": \"📃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4467,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"scroll\",\n    \"hexcode\": \"1F4DC\",\n    \"tags\": [\n      \"paper\"\n    ],\n    \"emoji\": \"📜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4468,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"page facing up\",\n    \"hexcode\": \"1F4C4\",\n    \"tags\": [\n      \"document\",\n      \"facing\",\n      \"page\",\n      \"paper\",\n      \"up\"\n    ],\n    \"emoji\": \"📄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4469,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"newspaper\",\n    \"hexcode\": \"1F4F0\",\n    \"tags\": [\n      \"communication\",\n      \"news\",\n      \"paper\"\n    ],\n    \"emoji\": \"📰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4470,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"rolled-up newspaper\",\n    \"hexcode\": \"1F5DE\",\n    \"tags\": [\n      \"news\",\n      \"newspaper\",\n      \"paper\",\n      \"rolled\",\n      \"rolled-up\"\n    ],\n    \"emoji\": \"🗞️\",\n    \"text\": \"🗞︎\",\n    \"type\": 0,\n    \"order\": 4472,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"bookmark tabs\",\n    \"hexcode\": \"1F4D1\",\n    \"tags\": [\n      \"bookmark\",\n      \"mark\",\n      \"marker\",\n      \"tabs\"\n    ],\n    \"emoji\": \"📑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4473,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bookmark\",\n    \"hexcode\": \"1F516\",\n    \"tags\": [\n      \"mark\"\n    ],\n    \"emoji\": \"🔖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4474,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"label\",\n    \"hexcode\": \"1F3F7\",\n    \"tags\": [\n      \"tag\"\n    ],\n    \"emoji\": \"🏷️\",\n    \"text\": \"🏷︎\",\n    \"type\": 0,\n    \"order\": 4476,\n    \"group\": 7,\n    \"subgroup\": 72,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"coin\",\n    \"hexcode\": \"1FA99\",\n    \"tags\": [\n      \"dollar\",\n      \"euro\",\n      \"gold\",\n      \"metal\",\n      \"money\",\n      \"rich\",\n      \"silver\",\n      \"treasure\"\n    ],\n    \"emoji\": \"🪙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4477,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 13\n  },\n  {\n    \"label\": \"money bag\",\n    \"hexcode\": \"1F4B0\",\n    \"tags\": [\n      \"bag\",\n      \"bank\",\n      \"bet\",\n      \"billion\",\n      \"cash\",\n      \"cost\",\n      \"dollar\",\n      \"gold\",\n      \"million\",\n      \"money\",\n      \"moneybag\",\n      \"paid\",\n      \"paying\",\n      \"pot\",\n      \"rich\",\n      \"win\"\n    ],\n    \"emoji\": \"💰️\",\n    \"text\": \"💰︎\",\n    \"type\": 1,\n    \"order\": 4478,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"treasure chest\",\n    \"hexcode\": \"1FA8E\",\n    \"tags\": [\n      \"gem\",\n      \"gold\",\n      \"jewels\",\n      \"loot\",\n      \"money\",\n      \"prize\",\n      \"silver\",\n      \"valuables\",\n      \"wealth\"\n    ],\n    \"emoji\": \"🪎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4479,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 17\n  },\n  {\n    \"label\": \"yen banknote\",\n    \"hexcode\": \"1F4B4\",\n    \"tags\": [\n      \"bank\",\n      \"banknote\",\n      \"bill\",\n      \"currency\",\n      \"money\",\n      \"note\",\n      \"yen\"\n    ],\n    \"emoji\": \"💴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4480,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dollar banknote\",\n    \"hexcode\": \"1F4B5\",\n    \"tags\": [\n      \"bank\",\n      \"banknote\",\n      \"bill\",\n      \"currency\",\n      \"dollar\",\n      \"money\",\n      \"note\"\n    ],\n    \"emoji\": \"💵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4481,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"euro banknote\",\n    \"hexcode\": \"1F4B6\",\n    \"tags\": [\n      \"100\",\n      \"bank\",\n      \"banknote\",\n      \"bill\",\n      \"currency\",\n      \"euro\",\n      \"money\",\n      \"note\",\n      \"rich\"\n    ],\n    \"emoji\": \"💶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4482,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 1\n  },\n  {\n    \"label\": \"pound banknote\",\n    \"hexcode\": \"1F4B7\",\n    \"tags\": [\n      \"bank\",\n      \"banknote\",\n      \"bill\",\n      \"billion\",\n      \"cash\",\n      \"currency\",\n      \"money\",\n      \"note\",\n      \"pound\",\n      \"pounds\"\n    ],\n    \"emoji\": \"💷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4483,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 1\n  },\n  {\n    \"label\": \"money with wings\",\n    \"hexcode\": \"1F4B8\",\n    \"tags\": [\n      \"bank\",\n      \"banknote\",\n      \"bill\",\n      \"billion\",\n      \"cash\",\n      \"dollar\",\n      \"fly\",\n      \"million\",\n      \"money\",\n      \"note\",\n      \"pay\",\n      \"wings\"\n    ],\n    \"emoji\": \"💸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4484,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"credit card\",\n    \"hexcode\": \"1F4B3\",\n    \"tags\": [\n      \"bank\",\n      \"card\",\n      \"cash\",\n      \"charge\",\n      \"credit\",\n      \"money\",\n      \"pay\"\n    ],\n    \"emoji\": \"💳️\",\n    \"text\": \"💳︎\",\n    \"type\": 1,\n    \"order\": 4485,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"receipt\",\n    \"hexcode\": \"1F9FE\",\n    \"tags\": [\n      \"accounting\",\n      \"bookkeeping\",\n      \"evidence\",\n      \"invoice\",\n      \"proof\"\n    ],\n    \"emoji\": \"🧾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4486,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 11\n  },\n  {\n    \"label\": \"chart increasing with yen\",\n    \"hexcode\": \"1F4B9\",\n    \"tags\": [\n      \"bank\",\n      \"chart\",\n      \"currency\",\n      \"graph\",\n      \"growth\",\n      \"increasing\",\n      \"market\",\n      \"money\",\n      \"rise\",\n      \"trend\",\n      \"upward\",\n      \"yen\"\n    ],\n    \"emoji\": \"💹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4487,\n    \"group\": 7,\n    \"subgroup\": 73,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"envelope\",\n    \"hexcode\": \"2709\",\n    \"tags\": [\n      \"e-mail\",\n      \"email\",\n      \"letter\"\n    ],\n    \"emoji\": \"✉️\",\n    \"text\": \"✉︎\",\n    \"type\": 0,\n    \"order\": 4489,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"e-mail\",\n    \"hexcode\": \"1F4E7\",\n    \"tags\": [\n      \"email\",\n      \"letter\",\n      \"mail\"\n    ],\n    \"emoji\": \"📧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4490,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"incoming envelope\",\n    \"hexcode\": \"1F4E8\",\n    \"tags\": [\n      \"delivering\",\n      \"e-mail\",\n      \"email\",\n      \"envelope\",\n      \"incoming\",\n      \"letter\",\n      \"mail\",\n      \"receive\",\n      \"sent\"\n    ],\n    \"emoji\": \"📨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4491,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"envelope with arrow\",\n    \"hexcode\": \"1F4E9\",\n    \"tags\": [\n      \"arrow\",\n      \"communication\",\n      \"down\",\n      \"e-mail\",\n      \"email\",\n      \"envelope\",\n      \"letter\",\n      \"mail\",\n      \"outgoing\",\n      \"send\",\n      \"sent\"\n    ],\n    \"emoji\": \"📩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4492,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"outbox tray\",\n    \"hexcode\": \"1F4E4\",\n    \"tags\": [\n      \"box\",\n      \"email\",\n      \"letter\",\n      \"mail\",\n      \"outbox\",\n      \"sent\",\n      \"tray\"\n    ],\n    \"emoji\": \"📤️\",\n    \"text\": \"📤︎\",\n    \"type\": 1,\n    \"order\": 4493,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"inbox tray\",\n    \"hexcode\": \"1F4E5\",\n    \"tags\": [\n      \"box\",\n      \"email\",\n      \"inbox\",\n      \"letter\",\n      \"mail\",\n      \"receive\",\n      \"tray\",\n      \"zero\"\n    ],\n    \"emoji\": \"📥️\",\n    \"text\": \"📥︎\",\n    \"type\": 1,\n    \"order\": 4494,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"package\",\n    \"hexcode\": \"1F4E6\",\n    \"tags\": [\n      \"box\",\n      \"communication\",\n      \"delivery\",\n      \"parcel\",\n      \"shipping\"\n    ],\n    \"emoji\": \"📦️\",\n    \"text\": \"📦︎\",\n    \"type\": 1,\n    \"order\": 4495,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"closed mailbox with raised flag\",\n    \"hexcode\": \"1F4EB\",\n    \"tags\": [\n      \"closed\",\n      \"communication\",\n      \"flag\",\n      \"mail\",\n      \"mailbox\",\n      \"postbox\",\n      \"raised\"\n    ],\n    \"emoji\": \"📫️\",\n    \"text\": \"📫︎\",\n    \"type\": 1,\n    \"order\": 4496,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"closed mailbox with lowered flag\",\n    \"hexcode\": \"1F4EA\",\n    \"tags\": [\n      \"closed\",\n      \"flag\",\n      \"lowered\",\n      \"mail\",\n      \"mailbox\",\n      \"postbox\"\n    ],\n    \"emoji\": \"📪️\",\n    \"text\": \"📪︎\",\n    \"type\": 1,\n    \"order\": 4497,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"open mailbox with raised flag\",\n    \"hexcode\": \"1F4EC\",\n    \"tags\": [\n      \"flag\",\n      \"mail\",\n      \"mailbox\",\n      \"open\",\n      \"postbox\",\n      \"raised\"\n    ],\n    \"emoji\": \"📬️\",\n    \"text\": \"📬︎\",\n    \"type\": 1,\n    \"order\": 4498,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"open mailbox with lowered flag\",\n    \"hexcode\": \"1F4ED\",\n    \"tags\": [\n      \"flag\",\n      \"lowered\",\n      \"mail\",\n      \"mailbox\",\n      \"open\",\n      \"postbox\"\n    ],\n    \"emoji\": \"📭️\",\n    \"text\": \"📭︎\",\n    \"type\": 1,\n    \"order\": 4499,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"postbox\",\n    \"hexcode\": \"1F4EE\",\n    \"tags\": [\n      \"mail\",\n      \"mailbox\"\n    ],\n    \"emoji\": \"📮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4500,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ballot box with ballot\",\n    \"hexcode\": \"1F5F3\",\n    \"tags\": [\n      \"ballot\",\n      \"box\"\n    ],\n    \"emoji\": \"🗳️\",\n    \"text\": \"🗳︎\",\n    \"type\": 0,\n    \"order\": 4502,\n    \"group\": 7,\n    \"subgroup\": 74,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"pencil\",\n    \"hexcode\": \"270F\",\n    \"tags\": [\n      \"pencil\"\n    ],\n    \"emoji\": \"✏️\",\n    \"text\": \"✏︎\",\n    \"type\": 0,\n    \"order\": 4504,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black nib\",\n    \"hexcode\": \"2712\",\n    \"tags\": [\n      \"black\",\n      \"nib\",\n      \"pen\"\n    ],\n    \"emoji\": \"✒️\",\n    \"text\": \"✒︎\",\n    \"type\": 0,\n    \"order\": 4506,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fountain pen\",\n    \"hexcode\": \"1F58B\",\n    \"tags\": [\n      \"fountain\",\n      \"pen\"\n    ],\n    \"emoji\": \"🖋️\",\n    \"text\": \"🖋︎\",\n    \"type\": 0,\n    \"order\": 4508,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"pen\",\n    \"hexcode\": \"1F58A\",\n    \"tags\": [\n      \"ballpoint\"\n    ],\n    \"emoji\": \"🖊️\",\n    \"text\": \"🖊︎\",\n    \"type\": 0,\n    \"order\": 4510,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"paintbrush\",\n    \"hexcode\": \"1F58C\",\n    \"tags\": [\n      \"painting\"\n    ],\n    \"emoji\": \"🖌️\",\n    \"text\": \"🖌︎\",\n    \"type\": 0,\n    \"order\": 4512,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"crayon\",\n    \"hexcode\": \"1F58D\",\n    \"tags\": [\n      \"crayon\"\n    ],\n    \"emoji\": \"🖍️\",\n    \"text\": \"🖍︎\",\n    \"type\": 0,\n    \"order\": 4514,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"memo\",\n    \"hexcode\": \"1F4DD\",\n    \"tags\": [\n      \"communication\",\n      \"media\",\n      \"notes\",\n      \"pencil\"\n    ],\n    \"emoji\": \"📝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4515,\n    \"group\": 7,\n    \"subgroup\": 75,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"briefcase\",\n    \"hexcode\": \"1F4BC\",\n    \"tags\": [\n      \"office\"\n    ],\n    \"emoji\": \"💼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4516,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"file folder\",\n    \"hexcode\": \"1F4C1\",\n    \"tags\": [\n      \"file\",\n      \"folder\"\n    ],\n    \"emoji\": \"📁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4517,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"open file folder\",\n    \"hexcode\": \"1F4C2\",\n    \"tags\": [\n      \"file\",\n      \"folder\",\n      \"open\"\n    ],\n    \"emoji\": \"📂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4518,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"card index dividers\",\n    \"hexcode\": \"1F5C2\",\n    \"tags\": [\n      \"card\",\n      \"dividers\",\n      \"index\"\n    ],\n    \"emoji\": \"🗂️\",\n    \"text\": \"🗂︎\",\n    \"type\": 0,\n    \"order\": 4520,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"calendar\",\n    \"hexcode\": \"1F4C5\",\n    \"tags\": [\n      \"date\"\n    ],\n    \"emoji\": \"📅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4521,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"tear-off calendar\",\n    \"hexcode\": \"1F4C6\",\n    \"tags\": [\n      \"calendar\",\n      \"tear-off\"\n    ],\n    \"emoji\": \"📆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4522,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"spiral notepad\",\n    \"hexcode\": \"1F5D2\",\n    \"tags\": [\n      \"note\",\n      \"notepad\",\n      \"pad\",\n      \"spiral\"\n    ],\n    \"emoji\": \"🗒️\",\n    \"text\": \"🗒︎\",\n    \"type\": 0,\n    \"order\": 4524,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"spiral calendar\",\n    \"hexcode\": \"1F5D3\",\n    \"tags\": [\n      \"calendar\",\n      \"pad\",\n      \"spiral\"\n    ],\n    \"emoji\": \"🗓️\",\n    \"text\": \"🗓︎\",\n    \"type\": 0,\n    \"order\": 4526,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"card index\",\n    \"hexcode\": \"1F4C7\",\n    \"tags\": [\n      \"card\",\n      \"index\",\n      \"old\",\n      \"rolodex\",\n      \"school\"\n    ],\n    \"emoji\": \"📇\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4527,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"chart increasing\",\n    \"hexcode\": \"1F4C8\",\n    \"tags\": [\n      \"chart\",\n      \"data\",\n      \"graph\",\n      \"growth\",\n      \"increasing\",\n      \"right\",\n      \"trend\",\n      \"up\",\n      \"upward\"\n    ],\n    \"emoji\": \"📈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4528,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"chart decreasing\",\n    \"hexcode\": \"1F4C9\",\n    \"tags\": [\n      \"chart\",\n      \"data\",\n      \"decreasing\",\n      \"down\",\n      \"downward\",\n      \"graph\",\n      \"negative\",\n      \"trend\"\n    ],\n    \"emoji\": \"📉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4529,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"bar chart\",\n    \"hexcode\": \"1F4CA\",\n    \"tags\": [\n      \"bar\",\n      \"chart\",\n      \"data\",\n      \"graph\"\n    ],\n    \"emoji\": \"📊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4530,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clipboard\",\n    \"hexcode\": \"1F4CB\",\n    \"tags\": [\n      \"do\",\n      \"list\",\n      \"notes\"\n    ],\n    \"emoji\": \"📋️\",\n    \"text\": \"📋︎\",\n    \"type\": 1,\n    \"order\": 4531,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pushpin\",\n    \"hexcode\": \"1F4CC\",\n    \"tags\": [\n      \"collage\",\n      \"pin\"\n    ],\n    \"emoji\": \"📌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4532,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"round pushpin\",\n    \"hexcode\": \"1F4CD\",\n    \"tags\": [\n      \"location\",\n      \"map\",\n      \"pin\",\n      \"pushpin\",\n      \"round\"\n    ],\n    \"emoji\": \"📍\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4533,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"paperclip\",\n    \"hexcode\": \"1F4CE\",\n    \"tags\": [\n      \"paperclip\"\n    ],\n    \"emoji\": \"📎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4534,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"linked paperclips\",\n    \"hexcode\": \"1F587\",\n    \"tags\": [\n      \"link\",\n      \"linked\",\n      \"paperclip\",\n      \"paperclips\"\n    ],\n    \"emoji\": \"🖇️\",\n    \"text\": \"🖇︎\",\n    \"type\": 0,\n    \"order\": 4536,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"straight ruler\",\n    \"hexcode\": \"1F4CF\",\n    \"tags\": [\n      \"angle\",\n      \"edge\",\n      \"math\",\n      \"ruler\",\n      \"straight\",\n      \"straightedge\"\n    ],\n    \"emoji\": \"📏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4537,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"triangular ruler\",\n    \"hexcode\": \"1F4D0\",\n    \"tags\": [\n      \"angle\",\n      \"math\",\n      \"rule\",\n      \"ruler\",\n      \"set\",\n      \"slide\",\n      \"triangle\",\n      \"triangular\"\n    ],\n    \"emoji\": \"📐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4538,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"scissors\",\n    \"hexcode\": \"2702\",\n    \"tags\": [\n      \"cut\",\n      \"cutting\",\n      \"paper\",\n      \"tool\"\n    ],\n    \"emoji\": \"✂️\",\n    \"text\": \"✂︎\",\n    \"type\": 0,\n    \"order\": 4540,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"card file box\",\n    \"hexcode\": \"1F5C3\",\n    \"tags\": [\n      \"box\",\n      \"card\",\n      \"file\"\n    ],\n    \"emoji\": \"🗃️\",\n    \"text\": \"🗃︎\",\n    \"type\": 0,\n    \"order\": 4542,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"file cabinet\",\n    \"hexcode\": \"1F5C4\",\n    \"tags\": [\n      \"cabinet\",\n      \"file\",\n      \"filing\",\n      \"paper\"\n    ],\n    \"emoji\": \"🗄️\",\n    \"text\": \"🗄︎\",\n    \"type\": 0,\n    \"order\": 4544,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"wastebasket\",\n    \"hexcode\": \"1F5D1\",\n    \"tags\": [\n      \"can\",\n      \"garbage\",\n      \"trash\",\n      \"waste\"\n    ],\n    \"emoji\": \"🗑️\",\n    \"text\": \"🗑︎\",\n    \"type\": 0,\n    \"order\": 4546,\n    \"group\": 7,\n    \"subgroup\": 76,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"locked\",\n    \"hexcode\": \"1F512\",\n    \"tags\": [\n      \"closed\",\n      \"lock\",\n      \"private\"\n    ],\n    \"emoji\": \"🔒️\",\n    \"text\": \"🔒︎\",\n    \"type\": 1,\n    \"order\": 4547,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"unlocked\",\n    \"hexcode\": \"1F513\",\n    \"tags\": [\n      \"cracked\",\n      \"lock\",\n      \"open\",\n      \"unlock\"\n    ],\n    \"emoji\": \"🔓️\",\n    \"text\": \"🔓︎\",\n    \"type\": 1,\n    \"order\": 4548,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"locked with pen\",\n    \"hexcode\": \"1F50F\",\n    \"tags\": [\n      \"ink\",\n      \"lock\",\n      \"locked\",\n      \"nib\",\n      \"pen\",\n      \"privacy\"\n    ],\n    \"emoji\": \"🔏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4549,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"locked with key\",\n    \"hexcode\": \"1F510\",\n    \"tags\": [\n      \"bike\",\n      \"closed\",\n      \"key\",\n      \"lock\",\n      \"locked\",\n      \"secure\"\n    ],\n    \"emoji\": \"🔐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4550,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"key\",\n    \"hexcode\": \"1F511\",\n    \"tags\": [\n      \"keys\",\n      \"lock\",\n      \"major\",\n      \"password\",\n      \"unlock\"\n    ],\n    \"emoji\": \"🔑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4551,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"old key\",\n    \"hexcode\": \"1F5DD\",\n    \"tags\": [\n      \"clue\",\n      \"key\",\n      \"lock\",\n      \"old\"\n    ],\n    \"emoji\": \"🗝️\",\n    \"text\": \"🗝︎\",\n    \"type\": 0,\n    \"order\": 4553,\n    \"group\": 7,\n    \"subgroup\": 77,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"hammer\",\n    \"hexcode\": \"1F528\",\n    \"tags\": [\n      \"home\",\n      \"improvement\",\n      \"repairs\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4554,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"axe\",\n    \"hexcode\": \"1FA93\",\n    \"tags\": [\n      \"ax\",\n      \"chop\",\n      \"hatchet\",\n      \"split\",\n      \"wood\"\n    ],\n    \"emoji\": \"🪓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4555,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 12\n  },\n  {\n    \"label\": \"pick\",\n    \"hexcode\": \"26CF\",\n    \"tags\": [\n      \"hammer\",\n      \"mining\",\n      \"tool\"\n    ],\n    \"emoji\": \"⛏️\",\n    \"text\": \"⛏︎\",\n    \"type\": 0,\n    \"order\": 4557,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"hammer and pick\",\n    \"hexcode\": \"2692\",\n    \"tags\": [\n      \"hammer\",\n      \"pick\",\n      \"tool\"\n    ],\n    \"emoji\": \"⚒️\",\n    \"text\": \"⚒︎\",\n    \"type\": 0,\n    \"order\": 4559,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 1\n  },\n  {\n    \"label\": \"hammer and wrench\",\n    \"hexcode\": \"1F6E0\",\n    \"tags\": [\n      \"hammer\",\n      \"spanner\",\n      \"tool\",\n      \"wrench\"\n    ],\n    \"emoji\": \"🛠️\",\n    \"text\": \"🛠︎\",\n    \"type\": 0,\n    \"order\": 4561,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"dagger\",\n    \"hexcode\": \"1F5E1\",\n    \"tags\": [\n      \"knife\",\n      \"weapon\"\n    ],\n    \"emoji\": \"🗡️\",\n    \"text\": \"🗡︎\",\n    \"type\": 0,\n    \"order\": 4563,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"crossed swords\",\n    \"hexcode\": \"2694\",\n    \"tags\": [\n      \"crossed\",\n      \"swords\",\n      \"weapon\"\n    ],\n    \"emoji\": \"⚔️\",\n    \"text\": \"⚔︎\",\n    \"type\": 0,\n    \"order\": 4565,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 1\n  },\n  {\n    \"label\": \"bomb\",\n    \"hexcode\": \"1F4A3\",\n    \"tags\": [\n      \"boom\",\n      \"comic\",\n      \"dangerous\",\n      \"explosion\",\n      \"hot\"\n    ],\n    \"emoji\": \"💣️\",\n    \"text\": \"💣︎\",\n    \"type\": 1,\n    \"order\": 4566,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"boomerang\",\n    \"hexcode\": \"1FA83\",\n    \"tags\": [\n      \"rebound\",\n      \"repercussion\",\n      \"weapon\"\n    ],\n    \"emoji\": \"🪃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4567,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 13\n  },\n  {\n    \"label\": \"bow and arrow\",\n    \"hexcode\": \"1F3F9\",\n    \"tags\": [\n      \"archer\",\n      \"archery\",\n      \"arrow\",\n      \"bow\",\n      \"sagittarius\",\n      \"tool\",\n      \"weapon\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"🏹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4568,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 1\n  },\n  {\n    \"label\": \"shield\",\n    \"hexcode\": \"1F6E1\",\n    \"tags\": [\n      \"weapon\"\n    ],\n    \"emoji\": \"🛡️\",\n    \"text\": \"🛡︎\",\n    \"type\": 0,\n    \"order\": 4570,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"carpentry saw\",\n    \"hexcode\": \"1FA9A\",\n    \"tags\": [\n      \"carpenter\",\n      \"carpentry\",\n      \"cut\",\n      \"lumber\",\n      \"saw\",\n      \"tool\",\n      \"trim\"\n    ],\n    \"emoji\": \"🪚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4571,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 13\n  },\n  {\n    \"label\": \"wrench\",\n    \"hexcode\": \"1F527\",\n    \"tags\": [\n      \"home\",\n      \"improvement\",\n      \"spanner\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4572,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"screwdriver\",\n    \"hexcode\": \"1FA9B\",\n    \"tags\": [\n      \"flathead\",\n      \"handy\",\n      \"screw\",\n      \"tool\"\n    ],\n    \"emoji\": \"🪛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4573,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 13\n  },\n  {\n    \"label\": \"nut and bolt\",\n    \"hexcode\": \"1F529\",\n    \"tags\": [\n      \"bolt\",\n      \"home\",\n      \"improvement\",\n      \"nut\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4574,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"gear\",\n    \"hexcode\": \"2699\",\n    \"tags\": [\n      \"cog\",\n      \"cogwheel\",\n      \"tool\"\n    ],\n    \"emoji\": \"⚙️\",\n    \"text\": \"⚙︎\",\n    \"type\": 0,\n    \"order\": 4576,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 1\n  },\n  {\n    \"label\": \"clamp\",\n    \"hexcode\": \"1F5DC\",\n    \"tags\": [\n      \"compress\",\n      \"tool\",\n      \"vice\"\n    ],\n    \"emoji\": \"🗜️\",\n    \"text\": \"🗜︎\",\n    \"type\": 0,\n    \"order\": 4578,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"balance scale\",\n    \"hexcode\": \"2696\",\n    \"tags\": [\n      \"balance\",\n      \"justice\",\n      \"libra\",\n      \"scale\",\n      \"scales\",\n      \"tool\",\n      \"weight\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"⚖️\",\n    \"text\": \"⚖︎\",\n    \"type\": 0,\n    \"order\": 4580,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 1\n  },\n  {\n    \"label\": \"white cane\",\n    \"hexcode\": \"1F9AF\",\n    \"tags\": [\n      \"accessibility\",\n      \"blind\",\n      \"cane\",\n      \"probing\",\n      \"white\"\n    ],\n    \"emoji\": \"🦯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4581,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 12\n  },\n  {\n    \"label\": \"link\",\n    \"hexcode\": \"1F517\",\n    \"tags\": [\n      \"links\"\n    ],\n    \"emoji\": \"🔗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4582,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"broken chain\",\n    \"hexcode\": \"26D3-FE0F-200D-1F4A5\",\n    \"tags\": [\n      \"break\",\n      \"breaking\",\n      \"broken\",\n      \"chain\",\n      \"cuffs\",\n      \"freedom\"\n    ],\n    \"emoji\": \"⛓️‍💥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4583,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 15.1\n  },\n  {\n    \"label\": \"chains\",\n    \"hexcode\": \"26D3\",\n    \"tags\": [\n      \"chain\"\n    ],\n    \"emoji\": \"⛓️\",\n    \"text\": \"⛓︎\",\n    \"type\": 0,\n    \"order\": 4586,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"hook\",\n    \"hexcode\": \"1FA9D\",\n    \"tags\": [\n      \"catch\",\n      \"crook\",\n      \"curve\",\n      \"ensnare\",\n      \"point\",\n      \"selling\"\n    ],\n    \"emoji\": \"🪝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4587,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 13\n  },\n  {\n    \"label\": \"toolbox\",\n    \"hexcode\": \"1F9F0\",\n    \"tags\": [\n      \"box\",\n      \"chest\",\n      \"mechanic\",\n      \"red\",\n      \"tool\"\n    ],\n    \"emoji\": \"🧰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4588,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 11\n  },\n  {\n    \"label\": \"magnet\",\n    \"hexcode\": \"1F9F2\",\n    \"tags\": [\n      \"attraction\",\n      \"horseshoe\",\n      \"magnetic\",\n      \"negative\",\n      \"positive\",\n      \"shape\",\n      \"u\"\n    ],\n    \"emoji\": \"🧲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4589,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 11\n  },\n  {\n    \"label\": \"ladder\",\n    \"hexcode\": \"1FA9C\",\n    \"tags\": [\n      \"climb\",\n      \"rung\",\n      \"step\"\n    ],\n    \"emoji\": \"🪜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4590,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 13\n  },\n  {\n    \"label\": \"shovel\",\n    \"hexcode\": \"1FA8F\",\n    \"tags\": [\n      \"bury\",\n      \"dig\",\n      \"garden\",\n      \"hole\",\n      \"plant\",\n      \"scoop\",\n      \"snow\",\n      \"spade\"\n    ],\n    \"emoji\": \"🪏\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4591,\n    \"group\": 7,\n    \"subgroup\": 78,\n    \"version\": 16\n  },\n  {\n    \"label\": \"alembic\",\n    \"hexcode\": \"2697\",\n    \"tags\": [\n      \"chemistry\",\n      \"tool\"\n    ],\n    \"emoji\": \"⚗️\",\n    \"text\": \"⚗︎\",\n    \"type\": 0,\n    \"order\": 4593,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 1\n  },\n  {\n    \"label\": \"test tube\",\n    \"hexcode\": \"1F9EA\",\n    \"tags\": [\n      \"chemist\",\n      \"chemistry\",\n      \"experiment\",\n      \"lab\",\n      \"science\",\n      \"test\",\n      \"tube\"\n    ],\n    \"emoji\": \"🧪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4594,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 11\n  },\n  {\n    \"label\": \"petri dish\",\n    \"hexcode\": \"1F9EB\",\n    \"tags\": [\n      \"bacteria\",\n      \"biologist\",\n      \"biology\",\n      \"culture\",\n      \"dish\",\n      \"lab\",\n      \"petri\"\n    ],\n    \"emoji\": \"🧫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4595,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 11\n  },\n  {\n    \"label\": \"dna\",\n    \"hexcode\": \"1F9EC\",\n    \"tags\": [\n      \"biologist\",\n      \"evolution\",\n      \"gene\",\n      \"genetics\",\n      \"life\"\n    ],\n    \"emoji\": \"🧬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4596,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 11\n  },\n  {\n    \"label\": \"microscope\",\n    \"hexcode\": \"1F52C\",\n    \"tags\": [\n      \"experiment\",\n      \"lab\",\n      \"science\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4597,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 1\n  },\n  {\n    \"label\": \"telescope\",\n    \"hexcode\": \"1F52D\",\n    \"tags\": [\n      \"contact\",\n      \"extraterrestrial\",\n      \"science\",\n      \"tool\"\n    ],\n    \"emoji\": \"🔭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4598,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 1\n  },\n  {\n    \"label\": \"satellite antenna\",\n    \"hexcode\": \"1F4E1\",\n    \"tags\": [\n      \"aliens\",\n      \"antenna\",\n      \"contact\",\n      \"dish\",\n      \"satellite\",\n      \"science\"\n    ],\n    \"emoji\": \"📡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4599,\n    \"group\": 7,\n    \"subgroup\": 79,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"syringe\",\n    \"hexcode\": \"1F489\",\n    \"tags\": [\n      \"doctor\",\n      \"flu\",\n      \"medicine\",\n      \"needle\",\n      \"shot\",\n      \"sick\",\n      \"tool\",\n      \"vaccination\"\n    ],\n    \"emoji\": \"💉\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4600,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"drop of blood\",\n    \"hexcode\": \"1FA78\",\n    \"tags\": [\n      \"bleed\",\n      \"blood\",\n      \"donation\",\n      \"drop\",\n      \"injury\",\n      \"medicine\",\n      \"menstruation\"\n    ],\n    \"emoji\": \"🩸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4601,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 12\n  },\n  {\n    \"label\": \"pill\",\n    \"hexcode\": \"1F48A\",\n    \"tags\": [\n      \"doctor\",\n      \"drugs\",\n      \"medicated\",\n      \"medicine\",\n      \"pills\",\n      \"sick\",\n      \"vitamin\"\n    ],\n    \"emoji\": \"💊\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4602,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"adhesive bandage\",\n    \"hexcode\": \"1FA79\",\n    \"tags\": [\n      \"adhesive\",\n      \"bandage\"\n    ],\n    \"emoji\": \"🩹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4603,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 12\n  },\n  {\n    \"label\": \"crutch\",\n    \"hexcode\": \"1FA7C\",\n    \"tags\": [\n      \"aid\",\n      \"cane\",\n      \"disability\",\n      \"help\",\n      \"hurt\",\n      \"injured\",\n      \"mobility\",\n      \"stick\"\n    ],\n    \"emoji\": \"🩼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4604,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 14\n  },\n  {\n    \"label\": \"stethoscope\",\n    \"hexcode\": \"1FA7A\",\n    \"tags\": [\n      \"doctor\",\n      \"heart\",\n      \"medicine\"\n    ],\n    \"emoji\": \"🩺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4605,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 12\n  },\n  {\n    \"label\": \"x-ray\",\n    \"hexcode\": \"1FA7B\",\n    \"tags\": [\n      \"bones\",\n      \"doctor\",\n      \"medical\",\n      \"skeleton\",\n      \"skull\",\n      \"xray\"\n    ],\n    \"emoji\": \"🩻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4606,\n    \"group\": 7,\n    \"subgroup\": 80,\n    \"version\": 14\n  },\n  {\n    \"label\": \"door\",\n    \"hexcode\": \"1F6AA\",\n    \"tags\": [\n      \"back\",\n      \"closet\",\n      \"front\"\n    ],\n    \"emoji\": \"🚪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4607,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"elevator\",\n    \"hexcode\": \"1F6D7\",\n    \"tags\": [\n      \"accessibility\",\n      \"hoist\",\n      \"lift\"\n    ],\n    \"emoji\": \"🛗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4608,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"mirror\",\n    \"hexcode\": \"1FA9E\",\n    \"tags\": [\n      \"makeup\",\n      \"reflection\",\n      \"reflector\",\n      \"speculum\"\n    ],\n    \"emoji\": \"🪞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4609,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"window\",\n    \"hexcode\": \"1FA9F\",\n    \"tags\": [\n      \"air\",\n      \"frame\",\n      \"fresh\",\n      \"opening\",\n      \"transparent\",\n      \"view\"\n    ],\n    \"emoji\": \"🪟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4610,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"bed\",\n    \"hexcode\": \"1F6CF\",\n    \"tags\": [\n      \"hotel\",\n      \"sleep\"\n    ],\n    \"emoji\": \"🛏️\",\n    \"text\": \"🛏︎\",\n    \"type\": 0,\n    \"order\": 4612,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"couch and lamp\",\n    \"hexcode\": \"1F6CB\",\n    \"tags\": [\n      \"couch\",\n      \"hotel\",\n      \"lamp\"\n    ],\n    \"emoji\": \"🛋️\",\n    \"text\": \"🛋︎\",\n    \"type\": 0,\n    \"order\": 4614,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"chair\",\n    \"hexcode\": \"1FA91\",\n    \"tags\": [\n      \"seat\",\n      \"sit\"\n    ],\n    \"emoji\": \"🪑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4615,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 12\n  },\n  {\n    \"label\": \"toilet\",\n    \"hexcode\": \"1F6BD\",\n    \"tags\": [\n      \"bathroom\"\n    ],\n    \"emoji\": \"🚽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4616,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"plunger\",\n    \"hexcode\": \"1FAA0\",\n    \"tags\": [\n      \"cup\",\n      \"force\",\n      \"plumber\",\n      \"poop\",\n      \"suction\",\n      \"toilet\"\n    ],\n    \"emoji\": \"🪠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4617,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"shower\",\n    \"hexcode\": \"1F6BF\",\n    \"tags\": [\n      \"water\"\n    ],\n    \"emoji\": \"🚿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4618,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 1\n  },\n  {\n    \"label\": \"bathtub\",\n    \"hexcode\": \"1F6C1\",\n    \"tags\": [\n      \"bath\"\n    ],\n    \"emoji\": \"🛁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4619,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 1\n  },\n  {\n    \"label\": \"mouse trap\",\n    \"hexcode\": \"1FAA4\",\n    \"tags\": [\n      \"bait\",\n      \"cheese\",\n      \"lure\",\n      \"mouse\",\n      \"mousetrap\",\n      \"snare\",\n      \"trap\"\n    ],\n    \"emoji\": \"🪤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4620,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"razor\",\n    \"hexcode\": \"1FA92\",\n    \"tags\": [\n      \"sharp\",\n      \"shave\"\n    ],\n    \"emoji\": \"🪒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4621,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 12\n  },\n  {\n    \"label\": \"lotion bottle\",\n    \"hexcode\": \"1F9F4\",\n    \"tags\": [\n      \"bottle\",\n      \"lotion\",\n      \"moisturizer\",\n      \"shampoo\",\n      \"sunscreen\"\n    ],\n    \"emoji\": \"🧴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4622,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"safety pin\",\n    \"hexcode\": \"1F9F7\",\n    \"tags\": [\n      \"diaper\",\n      \"pin\",\n      \"punk\",\n      \"rock\",\n      \"safety\"\n    ],\n    \"emoji\": \"🧷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4623,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"broom\",\n    \"hexcode\": \"1F9F9\",\n    \"tags\": [\n      \"cleaning\",\n      \"sweeping\",\n      \"witch\"\n    ],\n    \"emoji\": \"🧹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4624,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"basket\",\n    \"hexcode\": \"1F9FA\",\n    \"tags\": [\n      \"farming\",\n      \"laundry\",\n      \"picnic\"\n    ],\n    \"emoji\": \"🧺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4625,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"roll of paper\",\n    \"hexcode\": \"1F9FB\",\n    \"tags\": [\n      \"paper\",\n      \"roll\",\n      \"toilet\",\n      \"towels\"\n    ],\n    \"emoji\": \"🧻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4626,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bucket\",\n    \"hexcode\": \"1FAA3\",\n    \"tags\": [\n      \"cask\",\n      \"pail\",\n      \"vat\"\n    ],\n    \"emoji\": \"🪣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4627,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"soap\",\n    \"hexcode\": \"1F9FC\",\n    \"tags\": [\n      \"bar\",\n      \"bathing\",\n      \"clean\",\n      \"cleaning\",\n      \"lather\",\n      \"soapdish\"\n    ],\n    \"emoji\": \"🧼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4628,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"bubbles\",\n    \"hexcode\": \"1FAE7\",\n    \"tags\": [\n      \"bubble\",\n      \"burp\",\n      \"clean\",\n      \"floating\",\n      \"pearl\",\n      \"soap\",\n      \"underwater\"\n    ],\n    \"emoji\": \"🫧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4629,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 14\n  },\n  {\n    \"label\": \"toothbrush\",\n    \"hexcode\": \"1FAA5\",\n    \"tags\": [\n      \"bathroom\",\n      \"brush\",\n      \"clean\",\n      \"dental\",\n      \"hygiene\",\n      \"teeth\",\n      \"toiletry\"\n    ],\n    \"emoji\": \"🪥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4630,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 13\n  },\n  {\n    \"label\": \"sponge\",\n    \"hexcode\": \"1F9FD\",\n    \"tags\": [\n      \"absorbing\",\n      \"cleaning\",\n      \"porous\",\n      \"soak\"\n    ],\n    \"emoji\": \"🧽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4631,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"fire extinguisher\",\n    \"hexcode\": \"1F9EF\",\n    \"tags\": [\n      \"extinguish\",\n      \"extinguisher\",\n      \"fire\",\n      \"quench\"\n    ],\n    \"emoji\": \"🧯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4632,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 11\n  },\n  {\n    \"label\": \"shopping cart\",\n    \"hexcode\": \"1F6D2\",\n    \"tags\": [\n      \"cart\",\n      \"shopping\",\n      \"trolley\"\n    ],\n    \"emoji\": \"🛒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4633,\n    \"group\": 7,\n    \"subgroup\": 81,\n    \"version\": 3\n  },\n  {\n    \"label\": \"cigarette\",\n    \"hexcode\": \"1F6AC\",\n    \"tags\": [\n      \"smoking\"\n    ],\n    \"emoji\": \"🚬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4634,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"coffin\",\n    \"hexcode\": \"26B0\",\n    \"tags\": [\n      \"dead\",\n      \"death\",\n      \"vampire\"\n    ],\n    \"emoji\": \"⚰️\",\n    \"text\": \"⚰︎\",\n    \"type\": 0,\n    \"order\": 4636,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 1\n  },\n  {\n    \"label\": \"headstone\",\n    \"hexcode\": \"1FAA6\",\n    \"tags\": [\n      \"cemetery\",\n      \"dead\",\n      \"grave\",\n      \"graveyard\",\n      \"memorial\",\n      \"rip\",\n      \"tomb\",\n      \"tombstone\"\n    ],\n    \"emoji\": \"🪦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4637,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 13\n  },\n  {\n    \"label\": \"funeral urn\",\n    \"hexcode\": \"26B1\",\n    \"tags\": [\n      \"ashes\",\n      \"death\",\n      \"funeral\",\n      \"urn\"\n    ],\n    \"emoji\": \"⚱️\",\n    \"text\": \"⚱︎\",\n    \"type\": 0,\n    \"order\": 4639,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 1\n  },\n  {\n    \"label\": \"nazar amulet\",\n    \"hexcode\": \"1F9FF\",\n    \"tags\": [\n      \"amulet\",\n      \"bead\",\n      \"blue\",\n      \"charm\",\n      \"evil-eye\",\n      \"nazar\",\n      \"talisman\"\n    ],\n    \"emoji\": \"🧿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4640,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 11\n  },\n  {\n    \"label\": \"hamsa\",\n    \"hexcode\": \"1FAAC\",\n    \"tags\": [\n      \"amulet\",\n      \"fatima\",\n      \"fortune\",\n      \"guide\",\n      \"hand\",\n      \"mary\",\n      \"miriam\",\n      \"palm\",\n      \"protect\",\n      \"protection\"\n    ],\n    \"emoji\": \"🪬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4641,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 14\n  },\n  {\n    \"label\": \"moai\",\n    \"hexcode\": \"1F5FF\",\n    \"tags\": [\n      \"face\",\n      \"moyai\",\n      \"statue\",\n      \"stoneface\",\n      \"travel\"\n    ],\n    \"emoji\": \"🗿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4642,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"placard\",\n    \"hexcode\": \"1FAA7\",\n    \"tags\": [\n      \"card\",\n      \"demonstration\",\n      \"notice\",\n      \"picket\",\n      \"plaque\",\n      \"protest\",\n      \"sign\"\n    ],\n    \"emoji\": \"🪧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4643,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 13\n  },\n  {\n    \"label\": \"identification card\",\n    \"hexcode\": \"1FAAA\",\n    \"tags\": [\n      \"card\",\n      \"credentials\",\n      \"document\",\n      \"id\",\n      \"identification\",\n      \"license\",\n      \"security\"\n    ],\n    \"emoji\": \"🪪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4644,\n    \"group\": 7,\n    \"subgroup\": 82,\n    \"version\": 14\n  },\n  {\n    \"label\": \"ATM sign\",\n    \"hexcode\": \"1F3E7\",\n    \"tags\": [\n      \"atm\",\n      \"automated\",\n      \"bank\",\n      \"cash\",\n      \"money\",\n      \"sign\",\n      \"teller\"\n    ],\n    \"emoji\": \"🏧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4645,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"litter in bin sign\",\n    \"hexcode\": \"1F6AE\",\n    \"tags\": [\n      \"bin\",\n      \"litter\",\n      \"litterbin\",\n      \"sign\"\n    ],\n    \"emoji\": \"🚮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4646,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"potable water\",\n    \"hexcode\": \"1F6B0\",\n    \"tags\": [\n      \"drinking\",\n      \"potable\",\n      \"water\"\n    ],\n    \"emoji\": \"🚰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4647,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"wheelchair symbol\",\n    \"hexcode\": \"267F\",\n    \"tags\": [\n      \"access\",\n      \"handicap\",\n      \"symbol\",\n      \"wheelchair\"\n    ],\n    \"emoji\": \"♿️\",\n    \"text\": \"♿︎\",\n    \"type\": 1,\n    \"order\": 4648,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"men’s room\",\n    \"hexcode\": \"1F6B9\",\n    \"tags\": [\n      \"bathroom\",\n      \"lavatory\",\n      \"man\",\n      \"men’s\",\n      \"restroom\",\n      \"room\",\n      \"toilet\",\n      \"wc\"\n    ],\n    \"emoji\": \"🚹️\",\n    \"text\": \"🚹︎\",\n    \"type\": 1,\n    \"order\": 4649,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"women’s room\",\n    \"hexcode\": \"1F6BA\",\n    \"tags\": [\n      \"bathroom\",\n      \"lavatory\",\n      \"restroom\",\n      \"room\",\n      \"toilet\",\n      \"wc\",\n      \"woman\",\n      \"women’s\"\n    ],\n    \"emoji\": \"🚺️\",\n    \"text\": \"🚺︎\",\n    \"type\": 1,\n    \"order\": 4650,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"restroom\",\n    \"hexcode\": \"1F6BB\",\n    \"tags\": [\n      \"bathroom\",\n      \"lavatory\",\n      \"toilet\",\n      \"wc\"\n    ],\n    \"emoji\": \"🚻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4651,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"baby symbol\",\n    \"hexcode\": \"1F6BC\",\n    \"tags\": [\n      \"baby\",\n      \"changing\",\n      \"symbol\"\n    ],\n    \"emoji\": \"🚼️\",\n    \"text\": \"🚼︎\",\n    \"type\": 1,\n    \"order\": 4652,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"water closet\",\n    \"hexcode\": \"1F6BE\",\n    \"tags\": [\n      \"bathroom\",\n      \"closet\",\n      \"lavatory\",\n      \"restroom\",\n      \"toilet\",\n      \"water\",\n      \"wc\"\n    ],\n    \"emoji\": \"🚾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4653,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"passport control\",\n    \"hexcode\": \"1F6C2\",\n    \"tags\": [\n      \"control\",\n      \"passport\"\n    ],\n    \"emoji\": \"🛂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4654,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"customs\",\n    \"hexcode\": \"1F6C3\",\n    \"tags\": [\n      \"packing\"\n    ],\n    \"emoji\": \"🛃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4655,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"baggage claim\",\n    \"hexcode\": \"1F6C4\",\n    \"tags\": [\n      \"arrived\",\n      \"baggage\",\n      \"bags\",\n      \"case\",\n      \"checked\",\n      \"claim\",\n      \"journey\",\n      \"packing\",\n      \"plane\",\n      \"ready\",\n      \"travel\",\n      \"trip\"\n    ],\n    \"emoji\": \"🛄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4656,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"left luggage\",\n    \"hexcode\": \"1F6C5\",\n    \"tags\": [\n      \"baggage\",\n      \"case\",\n      \"left\",\n      \"locker\",\n      \"luggage\"\n    ],\n    \"emoji\": \"🛅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4657,\n    \"group\": 8,\n    \"subgroup\": 83,\n    \"version\": 1\n  },\n  {\n    \"label\": \"warning\",\n    \"hexcode\": \"26A0\",\n    \"tags\": [\n      \"caution\"\n    ],\n    \"emoji\": \"⚠️\",\n    \"text\": \"⚠︎\",\n    \"type\": 0,\n    \"order\": 4659,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"children crossing\",\n    \"hexcode\": \"1F6B8\",\n    \"tags\": [\n      \"child\",\n      \"children\",\n      \"crossing\",\n      \"pedestrian\",\n      \"traffic\"\n    ],\n    \"emoji\": \"🚸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4660,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"no entry\",\n    \"hexcode\": \"26D4\",\n    \"tags\": [\n      \"do\",\n      \"entry\",\n      \"fail\",\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"pass\",\n      \"prohibited\",\n      \"traffic\"\n    ],\n    \"emoji\": \"⛔️\",\n    \"text\": \"⛔︎\",\n    \"type\": 1,\n    \"order\": 4661,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"prohibited\",\n    \"hexcode\": \"1F6AB\",\n    \"tags\": [\n      \"entry\",\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"smoke\"\n    ],\n    \"emoji\": \"🚫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4662,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"no bicycles\",\n    \"hexcode\": \"1F6B3\",\n    \"tags\": [\n      \"bicycle\",\n      \"bicycles\",\n      \"bike\",\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"prohibited\"\n    ],\n    \"emoji\": \"🚳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4663,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"no smoking\",\n    \"hexcode\": \"1F6AD\",\n    \"tags\": [\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"prohibited\",\n      \"smoke\",\n      \"smoking\"\n    ],\n    \"emoji\": \"🚭️\",\n    \"text\": \"🚭︎\",\n    \"type\": 1,\n    \"order\": 4664,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"no littering\",\n    \"hexcode\": \"1F6AF\",\n    \"tags\": [\n      \"forbidden\",\n      \"litter\",\n      \"littering\",\n      \"no\",\n      \"not\",\n      \"prohibited\"\n    ],\n    \"emoji\": \"🚯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4665,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"non-potable water\",\n    \"hexcode\": \"1F6B1\",\n    \"tags\": [\n      \"dry\",\n      \"non-drinking\",\n      \"non-potable\",\n      \"prohibited\",\n      \"water\"\n    ],\n    \"emoji\": \"🚱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4666,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"no pedestrians\",\n    \"hexcode\": \"1F6B7\",\n    \"tags\": [\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"pedestrian\",\n      \"pedestrians\",\n      \"prohibited\"\n    ],\n    \"emoji\": \"🚷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4667,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"no mobile phones\",\n    \"hexcode\": \"1F4F5\",\n    \"tags\": [\n      \"cell\",\n      \"forbidden\",\n      \"mobile\",\n      \"no\",\n      \"not\",\n      \"phone\",\n      \"phones\",\n      \"prohibited\",\n      \"telephone\"\n    ],\n    \"emoji\": \"📵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4668,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"no one under eighteen\",\n    \"hexcode\": \"1F51E\",\n    \"tags\": [\n      \"18\",\n      \"age\",\n      \"eighteen\",\n      \"forbidden\",\n      \"no\",\n      \"not\",\n      \"one\",\n      \"prohibited\",\n      \"restriction\",\n      \"underage\"\n    ],\n    \"emoji\": \"🔞\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4669,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"radioactive\",\n    \"hexcode\": \"2622\",\n    \"tags\": [\n      \"sign\"\n    ],\n    \"emoji\": \"☢️\",\n    \"text\": \"☢︎\",\n    \"type\": 0,\n    \"order\": 4671,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"biohazard\",\n    \"hexcode\": \"2623\",\n    \"tags\": [\n      \"sign\"\n    ],\n    \"emoji\": \"☣️\",\n    \"text\": \"☣︎\",\n    \"type\": 0,\n    \"order\": 4673,\n    \"group\": 8,\n    \"subgroup\": 84,\n    \"version\": 1\n  },\n  {\n    \"label\": \"up arrow\",\n    \"hexcode\": \"2B06\",\n    \"tags\": [\n      \"arrow\",\n      \"cardinal\",\n      \"direction\",\n      \"north\",\n      \"up\"\n    ],\n    \"emoji\": \"⬆️\",\n    \"text\": \"⬆︎\",\n    \"type\": 0,\n    \"order\": 4675,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"up-right arrow\",\n    \"hexcode\": \"2197\",\n    \"tags\": [\n      \"arrow\",\n      \"direction\",\n      \"intercardinal\",\n      \"northeast\",\n      \"up-right\"\n    ],\n    \"emoji\": \"↗️\",\n    \"text\": \"↗︎\",\n    \"type\": 0,\n    \"order\": 4677,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"right arrow\",\n    \"hexcode\": \"27A1\",\n    \"tags\": [\n      \"arrow\",\n      \"cardinal\",\n      \"direction\",\n      \"east\",\n      \"right\"\n    ],\n    \"emoji\": \"➡️\",\n    \"text\": \"➡︎\",\n    \"type\": 0,\n    \"order\": 4679,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"down-right arrow\",\n    \"hexcode\": \"2198\",\n    \"tags\": [\n      \"arrow\",\n      \"direction\",\n      \"down-right\",\n      \"intercardinal\",\n      \"southeast\"\n    ],\n    \"emoji\": \"↘️\",\n    \"text\": \"↘︎\",\n    \"type\": 0,\n    \"order\": 4681,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"down arrow\",\n    \"hexcode\": \"2B07\",\n    \"tags\": [\n      \"arrow\",\n      \"cardinal\",\n      \"direction\",\n      \"down\",\n      \"south\"\n    ],\n    \"emoji\": \"⬇️\",\n    \"text\": \"⬇︎\",\n    \"type\": 0,\n    \"order\": 4683,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"down-left arrow\",\n    \"hexcode\": \"2199\",\n    \"tags\": [\n      \"arrow\",\n      \"direction\",\n      \"down-left\",\n      \"intercardinal\",\n      \"southwest\"\n    ],\n    \"emoji\": \"↙️\",\n    \"text\": \"↙︎\",\n    \"type\": 0,\n    \"order\": 4685,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"left arrow\",\n    \"hexcode\": \"2B05\",\n    \"tags\": [\n      \"arrow\",\n      \"cardinal\",\n      \"direction\",\n      \"left\",\n      \"west\"\n    ],\n    \"emoji\": \"⬅️\",\n    \"text\": \"⬅︎\",\n    \"type\": 0,\n    \"order\": 4687,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"up-left arrow\",\n    \"hexcode\": \"2196\",\n    \"tags\": [\n      \"arrow\",\n      \"direction\",\n      \"intercardinal\",\n      \"northwest\",\n      \"up-left\"\n    ],\n    \"emoji\": \"↖️\",\n    \"text\": \"↖︎\",\n    \"type\": 0,\n    \"order\": 4689,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"up-down arrow\",\n    \"hexcode\": \"2195\",\n    \"tags\": [\n      \"arrow\",\n      \"up-down\"\n    ],\n    \"emoji\": \"↕️\",\n    \"text\": \"↕︎\",\n    \"type\": 0,\n    \"order\": 4691,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"left-right arrow\",\n    \"hexcode\": \"2194\",\n    \"tags\": [\n      \"arrow\",\n      \"left-right\"\n    ],\n    \"emoji\": \"↔️\",\n    \"text\": \"↔︎\",\n    \"type\": 0,\n    \"order\": 4693,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"right arrow curving left\",\n    \"hexcode\": \"21A9\",\n    \"tags\": [\n      \"arrow\",\n      \"curving\",\n      \"left\",\n      \"right\"\n    ],\n    \"emoji\": \"↩️\",\n    \"text\": \"↩︎\",\n    \"type\": 0,\n    \"order\": 4695,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"left arrow curving right\",\n    \"hexcode\": \"21AA\",\n    \"tags\": [\n      \"arrow\",\n      \"curving\",\n      \"left\",\n      \"right\"\n    ],\n    \"emoji\": \"↪️\",\n    \"text\": \"↪︎\",\n    \"type\": 0,\n    \"order\": 4697,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"right arrow curving up\",\n    \"hexcode\": \"2934\",\n    \"tags\": [\n      \"arrow\",\n      \"curving\",\n      \"right\",\n      \"up\"\n    ],\n    \"emoji\": \"⤴️\",\n    \"text\": \"⤴︎\",\n    \"type\": 0,\n    \"order\": 4699,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"right arrow curving down\",\n    \"hexcode\": \"2935\",\n    \"tags\": [\n      \"arrow\",\n      \"curving\",\n      \"down\",\n      \"right\"\n    ],\n    \"emoji\": \"⤵️\",\n    \"text\": \"⤵︎\",\n    \"type\": 0,\n    \"order\": 4701,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"clockwise vertical arrows\",\n    \"hexcode\": \"1F503\",\n    \"tags\": [\n      \"arrow\",\n      \"arrows\",\n      \"clockwise\",\n      \"refresh\",\n      \"reload\",\n      \"vertical\"\n    ],\n    \"emoji\": \"🔃\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4702,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"counterclockwise arrows button\",\n    \"hexcode\": \"1F504\",\n    \"tags\": [\n      \"again\",\n      \"anticlockwise\",\n      \"arrow\",\n      \"arrows\",\n      \"button\",\n      \"counterclockwise\",\n      \"deja\",\n      \"refresh\",\n      \"rewindershins\",\n      \"vu\"\n    ],\n    \"emoji\": \"🔄\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4703,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 1\n  },\n  {\n    \"label\": \"BACK arrow\",\n    \"hexcode\": \"1F519\",\n    \"tags\": [\n      \"arrow\",\n      \"back\"\n    ],\n    \"emoji\": \"🔙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4704,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"END arrow\",\n    \"hexcode\": \"1F51A\",\n    \"tags\": [\n      \"arrow\",\n      \"end\"\n    ],\n    \"emoji\": \"🔚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4705,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ON! arrow\",\n    \"hexcode\": \"1F51B\",\n    \"tags\": [\n      \"arrow\",\n      \"mark\",\n      \"on!\"\n    ],\n    \"emoji\": \"🔛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4706,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"SOON arrow\",\n    \"hexcode\": \"1F51C\",\n    \"tags\": [\n      \"arrow\",\n      \"brb\",\n      \"omw\",\n      \"soon\"\n    ],\n    \"emoji\": \"🔜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4707,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"TOP arrow\",\n    \"hexcode\": \"1F51D\",\n    \"tags\": [\n      \"arrow\",\n      \"homie\",\n      \"top\",\n      \"up\"\n    ],\n    \"emoji\": \"🔝\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4708,\n    \"group\": 8,\n    \"subgroup\": 85,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"place of worship\",\n    \"hexcode\": \"1F6D0\",\n    \"tags\": [\n      \"place\",\n      \"pray\",\n      \"religion\",\n      \"worship\"\n    ],\n    \"emoji\": \"🛐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4709,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 1\n  },\n  {\n    \"label\": \"atom symbol\",\n    \"hexcode\": \"269B\",\n    \"tags\": [\n      \"atheist\",\n      \"atom\",\n      \"symbol\"\n    ],\n    \"emoji\": \"⚛️\",\n    \"text\": \"⚛︎\",\n    \"type\": 0,\n    \"order\": 4711,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 1\n  },\n  {\n    \"label\": \"om\",\n    \"hexcode\": \"1F549\",\n    \"tags\": [\n      \"hindu\",\n      \"religion\"\n    ],\n    \"emoji\": \"🕉️\",\n    \"text\": \"🕉︎\",\n    \"type\": 0,\n    \"order\": 4713,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"star of David\",\n    \"hexcode\": \"2721\",\n    \"tags\": [\n      \"david\",\n      \"jew\",\n      \"jewish\",\n      \"judaism\",\n      \"religion\",\n      \"star\"\n    ],\n    \"emoji\": \"✡️\",\n    \"text\": \"✡︎\",\n    \"type\": 0,\n    \"order\": 4715,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"wheel of dharma\",\n    \"hexcode\": \"2638\",\n    \"tags\": [\n      \"buddhist\",\n      \"dharma\",\n      \"religion\",\n      \"wheel\"\n    ],\n    \"emoji\": \"☸️\",\n    \"text\": \"☸︎\",\n    \"type\": 0,\n    \"order\": 4717,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"yin yang\",\n    \"hexcode\": \"262F\",\n    \"tags\": [\n      \"difficult\",\n      \"lives\",\n      \"religion\",\n      \"tao\",\n      \"taoist\",\n      \"total\",\n      \"yang\",\n      \"yin\",\n      \"yinyang\"\n    ],\n    \"emoji\": \"☯️\",\n    \"text\": \"☯︎\",\n    \"type\": 0,\n    \"order\": 4719,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"latin cross\",\n    \"hexcode\": \"271D\",\n    \"tags\": [\n      \"christ\",\n      \"christian\",\n      \"cross\",\n      \"latin\",\n      \"religion\"\n    ],\n    \"emoji\": \"✝️\",\n    \"text\": \"✝︎\",\n    \"type\": 0,\n    \"order\": 4721,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"orthodox cross\",\n    \"hexcode\": \"2626\",\n    \"tags\": [\n      \"christian\",\n      \"cross\",\n      \"orthodox\",\n      \"religion\"\n    ],\n    \"emoji\": \"☦️\",\n    \"text\": \"☦︎\",\n    \"type\": 0,\n    \"order\": 4723,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 1\n  },\n  {\n    \"label\": \"star and crescent\",\n    \"hexcode\": \"262A\",\n    \"tags\": [\n      \"crescent\",\n      \"islam\",\n      \"muslim\",\n      \"ramadan\",\n      \"religion\",\n      \"star\"\n    ],\n    \"emoji\": \"☪️\",\n    \"text\": \"☪︎\",\n    \"type\": 0,\n    \"order\": 4725,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"peace symbol\",\n    \"hexcode\": \"262E\",\n    \"tags\": [\n      \"healing\",\n      \"peace\",\n      \"peaceful\",\n      \"symbol\"\n    ],\n    \"emoji\": \"☮️\",\n    \"text\": \"☮︎\",\n    \"type\": 0,\n    \"order\": 4727,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 1\n  },\n  {\n    \"label\": \"menorah\",\n    \"hexcode\": \"1F54E\",\n    \"tags\": [\n      \"candelabrum\",\n      \"candlestick\",\n      \"hanukkah\",\n      \"jewish\",\n      \"judaism\",\n      \"religion\"\n    ],\n    \"emoji\": \"🕎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4728,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 1\n  },\n  {\n    \"label\": \"dotted six-pointed star\",\n    \"hexcode\": \"1F52F\",\n    \"tags\": [\n      \"dotted\",\n      \"fortune\",\n      \"jewish\",\n      \"judaism\",\n      \"six-pointed\",\n      \"star\"\n    ],\n    \"emoji\": \"🔯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4729,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"khanda\",\n    \"hexcode\": \"1FAAF\",\n    \"tags\": [\n      \"deg\",\n      \"fateh\",\n      \"khalsa\",\n      \"religion\",\n      \"sikh\",\n      \"sikhism\",\n      \"tegh\"\n    ],\n    \"emoji\": \"🪯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4730,\n    \"group\": 8,\n    \"subgroup\": 86,\n    \"version\": 15\n  },\n  {\n    \"label\": \"Aries\",\n    \"hexcode\": \"2648\",\n    \"tags\": [\n      \"aries\",\n      \"horoscope\",\n      \"ram\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♈️\",\n    \"text\": \"♈︎\",\n    \"type\": 1,\n    \"order\": 4731,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Taurus\",\n    \"hexcode\": \"2649\",\n    \"tags\": [\n      \"bull\",\n      \"horoscope\",\n      \"ox\",\n      \"taurus\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♉️\",\n    \"text\": \"♉︎\",\n    \"type\": 1,\n    \"order\": 4732,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Gemini\",\n    \"hexcode\": \"264A\",\n    \"tags\": [\n      \"gemini\",\n      \"horoscope\",\n      \"twins\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♊️\",\n    \"text\": \"♊︎\",\n    \"type\": 1,\n    \"order\": 4733,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Cancer\",\n    \"hexcode\": \"264B\",\n    \"tags\": [\n      \"cancer\",\n      \"crab\",\n      \"horoscope\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♋️\",\n    \"text\": \"♋︎\",\n    \"type\": 1,\n    \"order\": 4734,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Leo\",\n    \"hexcode\": \"264C\",\n    \"tags\": [\n      \"horoscope\",\n      \"leo\",\n      \"lion\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♌️\",\n    \"text\": \"♌︎\",\n    \"type\": 1,\n    \"order\": 4735,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Virgo\",\n    \"hexcode\": \"264D\",\n    \"tags\": [\n      \"horoscope\",\n      \"virgo\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♍️\",\n    \"text\": \"♍︎\",\n    \"type\": 1,\n    \"order\": 4736,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Libra\",\n    \"hexcode\": \"264E\",\n    \"tags\": [\n      \"balance\",\n      \"horoscope\",\n      \"justice\",\n      \"libra\",\n      \"scales\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♎️\",\n    \"text\": \"♎︎\",\n    \"type\": 1,\n    \"order\": 4737,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Scorpio\",\n    \"hexcode\": \"264F\",\n    \"tags\": [\n      \"horoscope\",\n      \"scorpio\",\n      \"scorpion\",\n      \"scorpius\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♏️\",\n    \"text\": \"♏︎\",\n    \"type\": 1,\n    \"order\": 4738,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Sagittarius\",\n    \"hexcode\": \"2650\",\n    \"tags\": [\n      \"archer\",\n      \"horoscope\",\n      \"sagittarius\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♐️\",\n    \"text\": \"♐︎\",\n    \"type\": 1,\n    \"order\": 4739,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Capricorn\",\n    \"hexcode\": \"2651\",\n    \"tags\": [\n      \"capricorn\",\n      \"goat\",\n      \"horoscope\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♑️\",\n    \"text\": \"♑︎\",\n    \"type\": 1,\n    \"order\": 4740,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Aquarius\",\n    \"hexcode\": \"2652\",\n    \"tags\": [\n      \"aquarius\",\n      \"bearer\",\n      \"horoscope\",\n      \"water\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♒️\",\n    \"text\": \"♒︎\",\n    \"type\": 1,\n    \"order\": 4741,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Pisces\",\n    \"hexcode\": \"2653\",\n    \"tags\": [\n      \"fish\",\n      \"horoscope\",\n      \"pisces\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"♓️\",\n    \"text\": \"♓︎\",\n    \"type\": 1,\n    \"order\": 4742,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Ophiuchus\",\n    \"hexcode\": \"26CE\",\n    \"tags\": [\n      \"bearer\",\n      \"ophiuchus\",\n      \"serpent\",\n      \"snake\",\n      \"zodiac\"\n    ],\n    \"emoji\": \"⛎️\",\n    \"text\": \"⛎︎\",\n    \"type\": 1,\n    \"order\": 4743,\n    \"group\": 8,\n    \"subgroup\": 87,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"shuffle tracks button\",\n    \"hexcode\": \"1F500\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"crossed\",\n      \"shuffle\",\n      \"tracks\"\n    ],\n    \"emoji\": \"🔀\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4744,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"repeat button\",\n    \"hexcode\": \"1F501\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"clockwise\",\n      \"repeat\"\n    ],\n    \"emoji\": \"🔁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4745,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"repeat single button\",\n    \"hexcode\": \"1F502\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"clockwise\",\n      \"once\",\n      \"repeat\",\n      \"single\"\n    ],\n    \"emoji\": \"🔂\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4746,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"play button\",\n    \"hexcode\": \"25B6\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"play\",\n      \"right\",\n      \"triangle\"\n    ],\n    \"emoji\": \"▶️\",\n    \"text\": \"▶︎\",\n    \"type\": 0,\n    \"order\": 4748,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fast-forward button\",\n    \"hexcode\": \"23E9\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"double\",\n      \"fast\",\n      \"fast-forward\",\n      \"forward\"\n    ],\n    \"emoji\": \"⏩️\",\n    \"text\": \"⏩︎\",\n    \"type\": 1,\n    \"order\": 4749,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"next track button\",\n    \"hexcode\": \"23ED\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"next\",\n      \"scene\",\n      \"track\",\n      \"triangle\"\n    ],\n    \"emoji\": \"⏭️\",\n    \"text\": \"⏭︎\",\n    \"type\": 0,\n    \"order\": 4751,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"play or pause button\",\n    \"hexcode\": \"23EF\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"pause\",\n      \"play\",\n      \"right\",\n      \"triangle\"\n    ],\n    \"emoji\": \"⏯️\",\n    \"text\": \"⏯︎\",\n    \"type\": 0,\n    \"order\": 4753,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"reverse button\",\n    \"hexcode\": \"25C0\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"left\",\n      \"reverse\",\n      \"triangle\"\n    ],\n    \"emoji\": \"◀️\",\n    \"text\": \"◀︎\",\n    \"type\": 0,\n    \"order\": 4755,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fast reverse button\",\n    \"hexcode\": \"23EA\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"double\",\n      \"fast\",\n      \"reverse\",\n      \"rewind\"\n    ],\n    \"emoji\": \"⏪️\",\n    \"text\": \"⏪︎\",\n    \"type\": 1,\n    \"order\": 4756,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"last track button\",\n    \"hexcode\": \"23EE\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"last\",\n      \"previous\",\n      \"scene\",\n      \"track\",\n      \"triangle\"\n    ],\n    \"emoji\": \"⏮️\",\n    \"text\": \"⏮︎\",\n    \"type\": 0,\n    \"order\": 4758,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"upwards button\",\n    \"hexcode\": \"1F53C\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"red\",\n      \"up\",\n      \"upwards\"\n    ],\n    \"emoji\": \"🔼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4759,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fast up button\",\n    \"hexcode\": \"23EB\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"double\",\n      \"fast\",\n      \"up\"\n    ],\n    \"emoji\": \"⏫️\",\n    \"text\": \"⏫︎\",\n    \"type\": 1,\n    \"order\": 4760,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"downwards button\",\n    \"hexcode\": \"1F53D\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"down\",\n      \"downwards\",\n      \"red\"\n    ],\n    \"emoji\": \"🔽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4761,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fast down button\",\n    \"hexcode\": \"23EC\",\n    \"tags\": [\n      \"arrow\",\n      \"button\",\n      \"double\",\n      \"down\",\n      \"fast\"\n    ],\n    \"emoji\": \"⏬️\",\n    \"text\": \"⏬︎\",\n    \"type\": 1,\n    \"order\": 4762,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"pause button\",\n    \"hexcode\": \"23F8\",\n    \"tags\": [\n      \"bar\",\n      \"button\",\n      \"double\",\n      \"pause\",\n      \"vertical\"\n    ],\n    \"emoji\": \"⏸️\",\n    \"text\": \"⏸︎\",\n    \"type\": 0,\n    \"order\": 4764,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"stop button\",\n    \"hexcode\": \"23F9\",\n    \"tags\": [\n      \"button\",\n      \"square\",\n      \"stop\"\n    ],\n    \"emoji\": \"⏹️\",\n    \"text\": \"⏹︎\",\n    \"type\": 0,\n    \"order\": 4766,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"record button\",\n    \"hexcode\": \"23FA\",\n    \"tags\": [\n      \"button\",\n      \"circle\",\n      \"record\"\n    ],\n    \"emoji\": \"⏺️\",\n    \"text\": \"⏺︎\",\n    \"type\": 0,\n    \"order\": 4768,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"eject button\",\n    \"hexcode\": \"23CF\",\n    \"tags\": [\n      \"button\",\n      \"eject\"\n    ],\n    \"emoji\": \"⏏️\",\n    \"text\": \"⏏︎\",\n    \"type\": 0,\n    \"order\": 4770,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"cinema\",\n    \"hexcode\": \"1F3A6\",\n    \"tags\": [\n      \"camera\",\n      \"film\",\n      \"movie\"\n    ],\n    \"emoji\": \"🎦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4771,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"dim button\",\n    \"hexcode\": \"1F505\",\n    \"tags\": [\n      \"brightness\",\n      \"button\",\n      \"dim\",\n      \"low\"\n    ],\n    \"emoji\": \"🔅\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4772,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"bright button\",\n    \"hexcode\": \"1F506\",\n    \"tags\": [\n      \"bright\",\n      \"brightness\",\n      \"button\",\n      \"light\"\n    ],\n    \"emoji\": \"🔆\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4773,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 1\n  },\n  {\n    \"label\": \"antenna bars\",\n    \"hexcode\": \"1F4F6\",\n    \"tags\": [\n      \"antenna\",\n      \"bar\",\n      \"bars\",\n      \"cell\",\n      \"communication\",\n      \"mobile\",\n      \"phone\",\n      \"signal\",\n      \"telephone\"\n    ],\n    \"emoji\": \"📶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4774,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wireless\",\n    \"hexcode\": \"1F6DC\",\n    \"tags\": [\n      \"broadband\",\n      \"computer\",\n      \"connectivity\",\n      \"hotspot\",\n      \"internet\",\n      \"network\",\n      \"router\",\n      \"smartphone\",\n      \"wi-fi\",\n      \"wifi\",\n      \"wlan\"\n    ],\n    \"emoji\": \"🛜\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4775,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 15\n  },\n  {\n    \"label\": \"vibration mode\",\n    \"hexcode\": \"1F4F3\",\n    \"tags\": [\n      \"cell\",\n      \"communication\",\n      \"mobile\",\n      \"mode\",\n      \"phone\",\n      \"telephone\",\n      \"vibration\"\n    ],\n    \"emoji\": \"📳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4776,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"mobile phone off\",\n    \"hexcode\": \"1F4F4\",\n    \"tags\": [\n      \"cell\",\n      \"mobile\",\n      \"off\",\n      \"phone\",\n      \"telephone\"\n    ],\n    \"emoji\": \"📴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4777,\n    \"group\": 8,\n    \"subgroup\": 88,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"female sign\",\n    \"hexcode\": \"2640\",\n    \"tags\": [\n      \"female\",\n      \"sign\",\n      \"woman\"\n    ],\n    \"emoji\": \"♀️\",\n    \"text\": \"♀︎\",\n    \"type\": 0,\n    \"order\": 4779,\n    \"group\": 8,\n    \"subgroup\": 89,\n    \"version\": 4\n  },\n  {\n    \"label\": \"male sign\",\n    \"hexcode\": \"2642\",\n    \"tags\": [\n      \"male\",\n      \"man\",\n      \"sign\"\n    ],\n    \"emoji\": \"♂️\",\n    \"text\": \"♂︎\",\n    \"type\": 0,\n    \"order\": 4781,\n    \"group\": 8,\n    \"subgroup\": 89,\n    \"version\": 4\n  },\n  {\n    \"label\": \"transgender symbol\",\n    \"hexcode\": \"26A7\",\n    \"tags\": [\n      \"symbol\",\n      \"transgender\"\n    ],\n    \"emoji\": \"⚧️\",\n    \"text\": \"⚧︎\",\n    \"type\": 0,\n    \"order\": 4783,\n    \"group\": 8,\n    \"subgroup\": 89,\n    \"version\": 13\n  },\n  {\n    \"label\": \"multiply\",\n    \"hexcode\": \"2716\",\n    \"tags\": [\n      \"cancel\",\n      \"multiplication\",\n      \"sign\",\n      \"x\",\n      \"×\"\n    ],\n    \"emoji\": \"✖️\",\n    \"text\": \"✖︎\",\n    \"type\": 0,\n    \"order\": 4785,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"plus\",\n    \"hexcode\": \"2795\",\n    \"tags\": [\n      \"+\"\n    ],\n    \"emoji\": \"➕️\",\n    \"text\": \"➕︎\",\n    \"type\": 1,\n    \"order\": 4786,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"minus\",\n    \"hexcode\": \"2796\",\n    \"tags\": [\n      \"-\",\n      \"heavy\",\n      \"math\",\n      \"sign\",\n      \"−\"\n    ],\n    \"emoji\": \"➖️\",\n    \"text\": \"➖︎\",\n    \"type\": 1,\n    \"order\": 4787,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"divide\",\n    \"hexcode\": \"2797\",\n    \"tags\": [\n      \"division\",\n      \"heavy\",\n      \"math\",\n      \"sign\",\n      \"÷\"\n    ],\n    \"emoji\": \"➗️\",\n    \"text\": \"➗︎\",\n    \"type\": 1,\n    \"order\": 4788,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heavy equals sign\",\n    \"hexcode\": \"1F7F0\",\n    \"tags\": [\n      \"answer\",\n      \"equal\",\n      \"equality\",\n      \"equals\",\n      \"heavy\",\n      \"math\",\n      \"sign\"\n    ],\n    \"emoji\": \"🟰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4789,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 14\n  },\n  {\n    \"label\": \"infinity\",\n    \"hexcode\": \"267E\",\n    \"tags\": [\n      \"forever\",\n      \"unbounded\",\n      \"universal\"\n    ],\n    \"emoji\": \"♾️\",\n    \"text\": \"♾︎\",\n    \"type\": 0,\n    \"order\": 4791,\n    \"group\": 8,\n    \"subgroup\": 90,\n    \"version\": 11\n  },\n  {\n    \"label\": \"double exclamation mark\",\n    \"hexcode\": \"203C\",\n    \"tags\": [\n      \"!\",\n      \"!!\",\n      \"bangbang\",\n      \"double\",\n      \"exclamation\",\n      \"mark\",\n      \"punctuation\"\n    ],\n    \"emoji\": \"‼️\",\n    \"text\": \"‼︎\",\n    \"type\": 0,\n    \"order\": 4793,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"exclamation question mark\",\n    \"hexcode\": \"2049\",\n    \"tags\": [\n      \"!\",\n      \"!?\",\n      \"?\",\n      \"exclamation\",\n      \"interrobang\",\n      \"mark\",\n      \"punctuation\",\n      \"question\"\n    ],\n    \"emoji\": \"⁉️\",\n    \"text\": \"⁉︎\",\n    \"type\": 0,\n    \"order\": 4795,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red question mark\",\n    \"hexcode\": \"2753\",\n    \"tags\": [\n      \"?\",\n      \"mark\",\n      \"punctuation\",\n      \"question\",\n      \"red\"\n    ],\n    \"emoji\": \"❓️\",\n    \"text\": \"❓︎\",\n    \"type\": 1,\n    \"order\": 4796,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white question mark\",\n    \"hexcode\": \"2754\",\n    \"tags\": [\n      \"?\",\n      \"mark\",\n      \"outlined\",\n      \"punctuation\",\n      \"question\",\n      \"white\"\n    ],\n    \"emoji\": \"❔️\",\n    \"text\": \"❔︎\",\n    \"type\": 1,\n    \"order\": 4797,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white exclamation mark\",\n    \"hexcode\": \"2755\",\n    \"tags\": [\n      \"!\",\n      \"exclamation\",\n      \"mark\",\n      \"outlined\",\n      \"punctuation\",\n      \"white\"\n    ],\n    \"emoji\": \"❕️\",\n    \"text\": \"❕︎\",\n    \"type\": 1,\n    \"order\": 4798,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red exclamation mark\",\n    \"hexcode\": \"2757\",\n    \"tags\": [\n      \"!\",\n      \"exclamation\",\n      \"mark\",\n      \"punctuation\",\n      \"red\"\n    ],\n    \"emoji\": \"❗️\",\n    \"text\": \"❗︎\",\n    \"type\": 1,\n    \"order\": 4799,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"wavy dash\",\n    \"hexcode\": \"3030\",\n    \"tags\": [\n      \"dash\",\n      \"punctuation\",\n      \"wavy\"\n    ],\n    \"emoji\": \"〰️\",\n    \"text\": \"〰︎\",\n    \"type\": 0,\n    \"order\": 4801,\n    \"group\": 8,\n    \"subgroup\": 91,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"currency exchange\",\n    \"hexcode\": \"1F4B1\",\n    \"tags\": [\n      \"bank\",\n      \"currency\",\n      \"exchange\",\n      \"money\"\n    ],\n    \"emoji\": \"💱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4802,\n    \"group\": 8,\n    \"subgroup\": 92,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"heavy dollar sign\",\n    \"hexcode\": \"1F4B2\",\n    \"tags\": [\n      \"billion\",\n      \"cash\",\n      \"charge\",\n      \"currency\",\n      \"dollar\",\n      \"heavy\",\n      \"million\",\n      \"money\",\n      \"pay\",\n      \"sign\"\n    ],\n    \"emoji\": \"💲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4803,\n    \"group\": 8,\n    \"subgroup\": 92,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"medical symbol\",\n    \"hexcode\": \"2695\",\n    \"tags\": [\n      \"aesculapius\",\n      \"medical\",\n      \"medicine\",\n      \"staff\",\n      \"symbol\"\n    ],\n    \"emoji\": \"⚕️\",\n    \"text\": \"⚕︎\",\n    \"type\": 0,\n    \"order\": 4805,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 4\n  },\n  {\n    \"label\": \"recycling symbol\",\n    \"hexcode\": \"267B\",\n    \"tags\": [\n      \"recycle\",\n      \"recycling\",\n      \"symbol\"\n    ],\n    \"emoji\": \"♻️\",\n    \"text\": \"♻︎\",\n    \"type\": 0,\n    \"order\": 4807,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"fleur-de-lis\",\n    \"hexcode\": \"269C\",\n    \"tags\": [\n      \"knights\"\n    ],\n    \"emoji\": \"⚜️\",\n    \"text\": \"⚜︎\",\n    \"type\": 0,\n    \"order\": 4809,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 1\n  },\n  {\n    \"label\": \"trident emblem\",\n    \"hexcode\": \"1F531\",\n    \"tags\": [\n      \"anchor\",\n      \"emblem\",\n      \"poseidon\",\n      \"ship\",\n      \"tool\",\n      \"trident\"\n    ],\n    \"emoji\": \"🔱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4810,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"name badge\",\n    \"hexcode\": \"1F4DB\",\n    \"tags\": [\n      \"badge\",\n      \"name\"\n    ],\n    \"emoji\": \"📛\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4811,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese symbol for beginner\",\n    \"hexcode\": \"1F530\",\n    \"tags\": [\n      \"beginner\",\n      \"chevron\",\n      \"green\",\n      \"japanese\",\n      \"leaf\",\n      \"symbol\",\n      \"tool\",\n      \"yellow\"\n    ],\n    \"emoji\": \"🔰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4812,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"hollow red circle\",\n    \"hexcode\": \"2B55\",\n    \"tags\": [\n      \"circle\",\n      \"heavy\",\n      \"hollow\",\n      \"large\",\n      \"o\",\n      \"red\"\n    ],\n    \"emoji\": \"⭕️\",\n    \"text\": \"⭕︎\",\n    \"type\": 1,\n    \"order\": 4813,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"check mark button\",\n    \"hexcode\": \"2705\",\n    \"tags\": [\n      \"button\",\n      \"check\",\n      \"checked\",\n      \"checkmark\",\n      \"complete\",\n      \"completed\",\n      \"done\",\n      \"fixed\",\n      \"mark\",\n      \"tick\",\n      \"✓\"\n    ],\n    \"emoji\": \"✅️\",\n    \"text\": \"✅︎\",\n    \"type\": 1,\n    \"order\": 4814,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"check box with check\",\n    \"hexcode\": \"2611\",\n    \"tags\": [\n      \"ballot\",\n      \"box\",\n      \"check\",\n      \"checked\",\n      \"done\",\n      \"off\",\n      \"tick\",\n      \"✓\"\n    ],\n    \"emoji\": \"☑️\",\n    \"text\": \"☑︎\",\n    \"type\": 0,\n    \"order\": 4816,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"check mark\",\n    \"hexcode\": \"2714\",\n    \"tags\": [\n      \"check\",\n      \"checked\",\n      \"checkmark\",\n      \"done\",\n      \"heavy\",\n      \"mark\",\n      \"tick\",\n      \"✓\"\n    ],\n    \"emoji\": \"✔️\",\n    \"text\": \"✔︎\",\n    \"type\": 0,\n    \"order\": 4818,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cross mark\",\n    \"hexcode\": \"274C\",\n    \"tags\": [\n      \"cancel\",\n      \"cross\",\n      \"mark\",\n      \"multiplication\",\n      \"multiply\",\n      \"x\",\n      \"×\"\n    ],\n    \"emoji\": \"❌️\",\n    \"text\": \"❌︎\",\n    \"type\": 1,\n    \"order\": 4819,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"cross mark button\",\n    \"hexcode\": \"274E\",\n    \"tags\": [\n      \"button\",\n      \"cross\",\n      \"mark\",\n      \"multiplication\",\n      \"multiply\",\n      \"square\",\n      \"x\",\n      \"×\"\n    ],\n    \"emoji\": \"❎️\",\n    \"text\": \"❎︎\",\n    \"type\": 1,\n    \"order\": 4820,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"curly loop\",\n    \"hexcode\": \"27B0\",\n    \"tags\": [\n      \"curl\",\n      \"curly\",\n      \"loop\"\n    ],\n    \"emoji\": \"➰️\",\n    \"text\": \"➰︎\",\n    \"type\": 1,\n    \"order\": 4821,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"double curly loop\",\n    \"hexcode\": \"27BF\",\n    \"tags\": [\n      \"curl\",\n      \"curly\",\n      \"double\",\n      \"loop\"\n    ],\n    \"emoji\": \"➿️\",\n    \"text\": \"➿︎\",\n    \"type\": 1,\n    \"order\": 4822,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 1\n  },\n  {\n    \"label\": \"part alternation mark\",\n    \"hexcode\": \"303D\",\n    \"tags\": [\n      \"alternation\",\n      \"mark\",\n      \"part\"\n    ],\n    \"emoji\": \"〽️\",\n    \"text\": \"〽︎\",\n    \"type\": 0,\n    \"order\": 4824,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eight-spoked asterisk\",\n    \"hexcode\": \"2733\",\n    \"tags\": [\n      \"*\",\n      \"asterisk\",\n      \"eight-spoked\"\n    ],\n    \"emoji\": \"✳️\",\n    \"text\": \"✳︎\",\n    \"type\": 0,\n    \"order\": 4826,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"eight-pointed star\",\n    \"hexcode\": \"2734\",\n    \"tags\": [\n      \"*\",\n      \"eight-pointed\",\n      \"star\"\n    ],\n    \"emoji\": \"✴️\",\n    \"text\": \"✴︎\",\n    \"type\": 0,\n    \"order\": 4828,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"sparkle\",\n    \"hexcode\": \"2747\",\n    \"tags\": [\n      \"*\"\n    ],\n    \"emoji\": \"❇️\",\n    \"text\": \"❇︎\",\n    \"type\": 0,\n    \"order\": 4830,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"copyright\",\n    \"hexcode\": \"00A9\",\n    \"tags\": [\n      \"c\"\n    ],\n    \"emoji\": \"©️\",\n    \"text\": \"©︎\",\n    \"type\": 0,\n    \"order\": 4832,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"registered\",\n    \"hexcode\": \"00AE\",\n    \"tags\": [\n      \"r\"\n    ],\n    \"emoji\": \"®️\",\n    \"text\": \"®︎\",\n    \"type\": 0,\n    \"order\": 4834,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"trade mark\",\n    \"hexcode\": \"2122\",\n    \"tags\": [\n      \"mark\",\n      \"tm\",\n      \"trade\",\n      \"trademark\"\n    ],\n    \"emoji\": \"™️\",\n    \"text\": \"™︎\",\n    \"type\": 0,\n    \"order\": 4836,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"splatter\",\n    \"hexcode\": \"1FADF\",\n    \"tags\": [\n      \"drip\",\n      \"holi\",\n      \"ink\",\n      \"liquid\",\n      \"mess\",\n      \"paint\",\n      \"spill\",\n      \"stain\"\n    ],\n    \"emoji\": \"🫟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4837,\n    \"group\": 8,\n    \"subgroup\": 93,\n    \"version\": 16\n  },\n  {\n    \"label\": \"keycap: #\",\n    \"hexcode\": \"0023-FE0F-20E3\",\n    \"tags\": [\n      \"keycap\"\n    ],\n    \"emoji\": \"#️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4838,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: *\",\n    \"hexcode\": \"002A-FE0F-20E3\",\n    \"tags\": [\n      \"keycap\"\n    ],\n    \"emoji\": \"*️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4840,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 2\n  },\n  {\n    \"label\": \"keycap: 0\",\n    \"hexcode\": \"0030-FE0F-20E3\",\n    \"tags\": [\n      \"0\",\n      \"keycap\",\n      \"zero\"\n    ],\n    \"emoji\": \"0️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4842,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 1\",\n    \"hexcode\": \"0031-FE0F-20E3\",\n    \"tags\": [\n      \"1\",\n      \"keycap\",\n      \"one\"\n    ],\n    \"emoji\": \"1️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4844,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 2\",\n    \"hexcode\": \"0032-FE0F-20E3\",\n    \"tags\": [\n      \"2\",\n      \"keycap\",\n      \"two\"\n    ],\n    \"emoji\": \"2️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4846,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 3\",\n    \"hexcode\": \"0033-FE0F-20E3\",\n    \"tags\": [\n      \"3\",\n      \"keycap\",\n      \"three\"\n    ],\n    \"emoji\": \"3️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4848,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 4\",\n    \"hexcode\": \"0034-FE0F-20E3\",\n    \"tags\": [\n      \"4\",\n      \"four\",\n      \"keycap\"\n    ],\n    \"emoji\": \"4️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4850,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 5\",\n    \"hexcode\": \"0035-FE0F-20E3\",\n    \"tags\": [\n      \"5\",\n      \"five\",\n      \"keycap\"\n    ],\n    \"emoji\": \"5️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4852,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 6\",\n    \"hexcode\": \"0036-FE0F-20E3\",\n    \"tags\": [\n      \"6\",\n      \"keycap\",\n      \"six\"\n    ],\n    \"emoji\": \"6️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4854,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 7\",\n    \"hexcode\": \"0037-FE0F-20E3\",\n    \"tags\": [\n      \"7\",\n      \"keycap\",\n      \"seven\"\n    ],\n    \"emoji\": \"7️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4856,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 8\",\n    \"hexcode\": \"0038-FE0F-20E3\",\n    \"tags\": [\n      \"8\",\n      \"eight\",\n      \"keycap\"\n    ],\n    \"emoji\": \"8️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4858,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 9\",\n    \"hexcode\": \"0039-FE0F-20E3\",\n    \"tags\": [\n      \"9\",\n      \"keycap\",\n      \"nine\"\n    ],\n    \"emoji\": \"9️⃣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4860,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"keycap: 10\",\n    \"hexcode\": \"1F51F\",\n    \"tags\": [\n      \"keycap\"\n    ],\n    \"emoji\": \"🔟\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4862,\n    \"group\": 8,\n    \"subgroup\": 94,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"input latin uppercase\",\n    \"hexcode\": \"1F520\",\n    \"tags\": [\n      \"abcd\",\n      \"input\",\n      \"latin\",\n      \"letters\",\n      \"uppercase\"\n    ],\n    \"emoji\": \"🔠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4863,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"input latin lowercase\",\n    \"hexcode\": \"1F521\",\n    \"tags\": [\n      \"abcd\",\n      \"input\",\n      \"latin\",\n      \"letters\",\n      \"lowercase\"\n    ],\n    \"emoji\": \"🔡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4864,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"input numbers\",\n    \"hexcode\": \"1F522\",\n    \"tags\": [\n      \"1234\",\n      \"input\",\n      \"numbers\"\n    ],\n    \"emoji\": \"🔢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4865,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"input symbols\",\n    \"hexcode\": \"1F523\",\n    \"tags\": [\n      \"%\",\n      \"&\",\n      \"input\",\n      \"symbols\",\n      \"♪\",\n      \"〒\"\n    ],\n    \"emoji\": \"🔣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4866,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"input latin letters\",\n    \"hexcode\": \"1F524\",\n    \"tags\": [\n      \"abc\",\n      \"alphabet\",\n      \"input\",\n      \"latin\",\n      \"letters\"\n    ],\n    \"emoji\": \"🔤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4867,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"A button (blood type)\",\n    \"hexcode\": \"1F170\",\n    \"tags\": [\n      \"blood\",\n      \"button\",\n      \"type\"\n    ],\n    \"emoji\": \"🅰️\",\n    \"text\": \"🅰︎\",\n    \"type\": 0,\n    \"order\": 4869,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"AB button (blood type)\",\n    \"hexcode\": \"1F18E\",\n    \"tags\": [\n      \"ab\",\n      \"blood\",\n      \"button\",\n      \"type\"\n    ],\n    \"emoji\": \"🆎\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4870,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"B button (blood type)\",\n    \"hexcode\": \"1F171\",\n    \"tags\": [\n      \"b\",\n      \"blood\",\n      \"button\",\n      \"type\"\n    ],\n    \"emoji\": \"🅱️\",\n    \"text\": \"🅱︎\",\n    \"type\": 0,\n    \"order\": 4872,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"CL button\",\n    \"hexcode\": \"1F191\",\n    \"tags\": [\n      \"button\",\n      \"cl\"\n    ],\n    \"emoji\": \"🆑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4873,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"COOL button\",\n    \"hexcode\": \"1F192\",\n    \"tags\": [\n      \"button\",\n      \"cool\"\n    ],\n    \"emoji\": \"🆒\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4874,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"FREE button\",\n    \"hexcode\": \"1F193\",\n    \"tags\": [\n      \"button\",\n      \"free\"\n    ],\n    \"emoji\": \"🆓\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4875,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"information\",\n    \"hexcode\": \"2139\",\n    \"tags\": [\n      \"i\"\n    ],\n    \"emoji\": \"ℹ️\",\n    \"text\": \"ℹ︎\",\n    \"type\": 0,\n    \"order\": 4877,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"ID button\",\n    \"hexcode\": \"1F194\",\n    \"tags\": [\n      \"button\",\n      \"id\",\n      \"identity\"\n    ],\n    \"emoji\": \"🆔\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4878,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"circled M\",\n    \"hexcode\": \"24C2\",\n    \"tags\": [\n      \"circle\",\n      \"circled\",\n      \"m\"\n    ],\n    \"emoji\": \"Ⓜ️\",\n    \"text\": \"Ⓜ︎\",\n    \"type\": 0,\n    \"order\": 4880,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"NEW button\",\n    \"hexcode\": \"1F195\",\n    \"tags\": [\n      \"button\",\n      \"new\"\n    ],\n    \"emoji\": \"🆕\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4881,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"NG button\",\n    \"hexcode\": \"1F196\",\n    \"tags\": [\n      \"button\",\n      \"ng\"\n    ],\n    \"emoji\": \"🆖\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4882,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"O button (blood type)\",\n    \"hexcode\": \"1F17E\",\n    \"tags\": [\n      \"blood\",\n      \"button\",\n      \"o\",\n      \"type\"\n    ],\n    \"emoji\": \"🅾️\",\n    \"text\": \"🅾︎\",\n    \"type\": 0,\n    \"order\": 4884,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"OK button\",\n    \"hexcode\": \"1F197\",\n    \"tags\": [\n      \"button\",\n      \"ok\",\n      \"okay\"\n    ],\n    \"emoji\": \"🆗\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4885,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"P button\",\n    \"hexcode\": \"1F17F\",\n    \"tags\": [\n      \"button\",\n      \"p\",\n      \"parking\"\n    ],\n    \"emoji\": \"🅿️\",\n    \"text\": \"🅿︎\",\n    \"type\": 0,\n    \"order\": 4887,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"SOS button\",\n    \"hexcode\": \"1F198\",\n    \"tags\": [\n      \"button\",\n      \"help\",\n      \"sos\"\n    ],\n    \"emoji\": \"🆘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4888,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"UP! button\",\n    \"hexcode\": \"1F199\",\n    \"tags\": [\n      \"button\",\n      \"mark\",\n      \"up\",\n      \"up!\"\n    ],\n    \"emoji\": \"🆙\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4889,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"VS button\",\n    \"hexcode\": \"1F19A\",\n    \"tags\": [\n      \"button\",\n      \"versus\",\n      \"vs\"\n    ],\n    \"emoji\": \"🆚\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4890,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “here” button\",\n    \"hexcode\": \"1F201\",\n    \"tags\": [\n      \"button\",\n      \"here\",\n      \"japanese\",\n      \"katakana\"\n    ],\n    \"emoji\": \"🈁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4891,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “service charge” button\",\n    \"hexcode\": \"1F202\",\n    \"tags\": [\n      \"button\",\n      \"charge\",\n      \"japanese\",\n      \"katakana\",\n      \"service\"\n    ],\n    \"emoji\": \"🈂️\",\n    \"text\": \"🈂︎\",\n    \"type\": 0,\n    \"order\": 4893,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “monthly amount” button\",\n    \"hexcode\": \"1F237\",\n    \"tags\": [\n      \"amount\",\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"monthly\"\n    ],\n    \"emoji\": \"🈷️\",\n    \"text\": \"🈷︎\",\n    \"type\": 0,\n    \"order\": 4895,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “not free of charge” button\",\n    \"hexcode\": \"1F236\",\n    \"tags\": [\n      \"button\",\n      \"charge\",\n      \"free\",\n      \"ideograph\",\n      \"japanese\",\n      \"not\"\n    ],\n    \"emoji\": \"🈶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4896,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “reserved” button\",\n    \"hexcode\": \"1F22F\",\n    \"tags\": [\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"reserved\"\n    ],\n    \"emoji\": \"🈯️\",\n    \"text\": \"🈯︎\",\n    \"type\": 1,\n    \"order\": 4897,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “bargain” button\",\n    \"hexcode\": \"1F250\",\n    \"tags\": [\n      \"bargain\",\n      \"button\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🉐\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4898,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “discount” button\",\n    \"hexcode\": \"1F239\",\n    \"tags\": [\n      \"button\",\n      \"discount\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🈹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4899,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “free of charge” button\",\n    \"hexcode\": \"1F21A\",\n    \"tags\": [\n      \"button\",\n      \"charge\",\n      \"free\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🈚️\",\n    \"text\": \"🈚︎\",\n    \"type\": 1,\n    \"order\": 4900,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “prohibited” button\",\n    \"hexcode\": \"1F232\",\n    \"tags\": [\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"prohibited\"\n    ],\n    \"emoji\": \"🈲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4901,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “acceptable” button\",\n    \"hexcode\": \"1F251\",\n    \"tags\": [\n      \"acceptable\",\n      \"button\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🉑\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4902,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “application” button\",\n    \"hexcode\": \"1F238\",\n    \"tags\": [\n      \"application\",\n      \"button\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🈸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4903,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “passing grade” button\",\n    \"hexcode\": \"1F234\",\n    \"tags\": [\n      \"button\",\n      \"grade\",\n      \"ideograph\",\n      \"japanese\",\n      \"passing\"\n    ],\n    \"emoji\": \"🈴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4904,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “vacancy” button\",\n    \"hexcode\": \"1F233\",\n    \"tags\": [\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"vacancy\"\n    ],\n    \"emoji\": \"🈳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4905,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “congratulations” button\",\n    \"hexcode\": \"3297\",\n    \"tags\": [\n      \"button\",\n      \"congratulations\",\n      \"ideograph\",\n      \"japanese\"\n    ],\n    \"emoji\": \"㊗️\",\n    \"text\": \"㊗︎\",\n    \"type\": 0,\n    \"order\": 4907,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “secret” button\",\n    \"hexcode\": \"3299\",\n    \"tags\": [\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"secret\"\n    ],\n    \"emoji\": \"㊙️\",\n    \"text\": \"㊙︎\",\n    \"type\": 0,\n    \"order\": 4909,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “open for business” button\",\n    \"hexcode\": \"1F23A\",\n    \"tags\": [\n      \"business\",\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"open\"\n    ],\n    \"emoji\": \"🈺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4910,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"Japanese “no vacancy” button\",\n    \"hexcode\": \"1F235\",\n    \"tags\": [\n      \"button\",\n      \"ideograph\",\n      \"japanese\",\n      \"no\",\n      \"vacancy\"\n    ],\n    \"emoji\": \"🈵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4911,\n    \"group\": 8,\n    \"subgroup\": 95,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red circle\",\n    \"hexcode\": \"1F534\",\n    \"tags\": [\n      \"circle\",\n      \"geometric\",\n      \"red\"\n    ],\n    \"emoji\": \"🔴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4912,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"orange circle\",\n    \"hexcode\": \"1F7E0\",\n    \"tags\": [\n      \"circle\",\n      \"orange\"\n    ],\n    \"emoji\": \"🟠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4913,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"yellow circle\",\n    \"hexcode\": \"1F7E1\",\n    \"tags\": [\n      \"circle\",\n      \"yellow\"\n    ],\n    \"emoji\": \"🟡\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4914,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"green circle\",\n    \"hexcode\": \"1F7E2\",\n    \"tags\": [\n      \"circle\",\n      \"green\"\n    ],\n    \"emoji\": \"🟢\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4915,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"blue circle\",\n    \"hexcode\": \"1F535\",\n    \"tags\": [\n      \"blue\",\n      \"circle\",\n      \"geometric\"\n    ],\n    \"emoji\": \"🔵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4916,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"purple circle\",\n    \"hexcode\": \"1F7E3\",\n    \"tags\": [\n      \"circle\",\n      \"purple\"\n    ],\n    \"emoji\": \"🟣\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4917,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"brown circle\",\n    \"hexcode\": \"1F7E4\",\n    \"tags\": [\n      \"brown\",\n      \"circle\"\n    ],\n    \"emoji\": \"🟤\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4918,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"black circle\",\n    \"hexcode\": \"26AB\",\n    \"tags\": [\n      \"black\",\n      \"circle\",\n      \"geometric\"\n    ],\n    \"emoji\": \"⚫️\",\n    \"text\": \"⚫︎\",\n    \"type\": 1,\n    \"order\": 4919,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white circle\",\n    \"hexcode\": \"26AA\",\n    \"tags\": [\n      \"circle\",\n      \"geometric\",\n      \"white\"\n    ],\n    \"emoji\": \"⚪️\",\n    \"text\": \"⚪︎\",\n    \"type\": 1,\n    \"order\": 4920,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red square\",\n    \"hexcode\": \"1F7E5\",\n    \"tags\": [\n      \"card\",\n      \"penalty\",\n      \"red\",\n      \"square\"\n    ],\n    \"emoji\": \"🟥\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4921,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"orange square\",\n    \"hexcode\": \"1F7E7\",\n    \"tags\": [\n      \"orange\",\n      \"square\"\n    ],\n    \"emoji\": \"🟧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4922,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"yellow square\",\n    \"hexcode\": \"1F7E8\",\n    \"tags\": [\n      \"card\",\n      \"penalty\",\n      \"square\",\n      \"yellow\"\n    ],\n    \"emoji\": \"🟨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4923,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"green square\",\n    \"hexcode\": \"1F7E9\",\n    \"tags\": [\n      \"green\",\n      \"square\"\n    ],\n    \"emoji\": \"🟩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4924,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"blue square\",\n    \"hexcode\": \"1F7E6\",\n    \"tags\": [\n      \"blue\",\n      \"square\"\n    ],\n    \"emoji\": \"🟦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4925,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"purple square\",\n    \"hexcode\": \"1F7EA\",\n    \"tags\": [\n      \"purple\",\n      \"square\"\n    ],\n    \"emoji\": \"🟪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4926,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"brown square\",\n    \"hexcode\": \"1F7EB\",\n    \"tags\": [\n      \"brown\",\n      \"square\"\n    ],\n    \"emoji\": \"🟫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4927,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 12\n  },\n  {\n    \"label\": \"black large square\",\n    \"hexcode\": \"2B1B\",\n    \"tags\": [\n      \"black\",\n      \"geometric\",\n      \"large\",\n      \"square\"\n    ],\n    \"emoji\": \"⬛️\",\n    \"text\": \"⬛︎\",\n    \"type\": 1,\n    \"order\": 4928,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white large square\",\n    \"hexcode\": \"2B1C\",\n    \"tags\": [\n      \"geometric\",\n      \"large\",\n      \"square\",\n      \"white\"\n    ],\n    \"emoji\": \"⬜️\",\n    \"text\": \"⬜︎\",\n    \"type\": 1,\n    \"order\": 4929,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black medium square\",\n    \"hexcode\": \"25FC\",\n    \"tags\": [\n      \"black\",\n      \"geometric\",\n      \"medium\",\n      \"square\"\n    ],\n    \"emoji\": \"◼️\",\n    \"text\": \"◼︎\",\n    \"type\": 0,\n    \"order\": 4931,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white medium square\",\n    \"hexcode\": \"25FB\",\n    \"tags\": [\n      \"geometric\",\n      \"medium\",\n      \"square\",\n      \"white\"\n    ],\n    \"emoji\": \"◻️\",\n    \"text\": \"◻︎\",\n    \"type\": 0,\n    \"order\": 4933,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black medium-small square\",\n    \"hexcode\": \"25FE\",\n    \"tags\": [\n      \"black\",\n      \"geometric\",\n      \"medium-small\",\n      \"square\"\n    ],\n    \"emoji\": \"◾️\",\n    \"text\": \"◾︎\",\n    \"type\": 1,\n    \"order\": 4934,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white medium-small square\",\n    \"hexcode\": \"25FD\",\n    \"tags\": [\n      \"geometric\",\n      \"medium-small\",\n      \"square\",\n      \"white\"\n    ],\n    \"emoji\": \"◽️\",\n    \"text\": \"◽︎\",\n    \"type\": 1,\n    \"order\": 4935,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black small square\",\n    \"hexcode\": \"25AA\",\n    \"tags\": [\n      \"black\",\n      \"geometric\",\n      \"small\",\n      \"square\"\n    ],\n    \"emoji\": \"▪️\",\n    \"text\": \"▪︎\",\n    \"type\": 0,\n    \"order\": 4937,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white small square\",\n    \"hexcode\": \"25AB\",\n    \"tags\": [\n      \"geometric\",\n      \"small\",\n      \"square\",\n      \"white\"\n    ],\n    \"emoji\": \"▫️\",\n    \"text\": \"▫︎\",\n    \"type\": 0,\n    \"order\": 4939,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"large orange diamond\",\n    \"hexcode\": \"1F536\",\n    \"tags\": [\n      \"diamond\",\n      \"geometric\",\n      \"large\",\n      \"orange\"\n    ],\n    \"emoji\": \"🔶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4940,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"large blue diamond\",\n    \"hexcode\": \"1F537\",\n    \"tags\": [\n      \"blue\",\n      \"diamond\",\n      \"geometric\",\n      \"large\"\n    ],\n    \"emoji\": \"🔷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4941,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"small orange diamond\",\n    \"hexcode\": \"1F538\",\n    \"tags\": [\n      \"diamond\",\n      \"geometric\",\n      \"orange\",\n      \"small\"\n    ],\n    \"emoji\": \"🔸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4942,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"small blue diamond\",\n    \"hexcode\": \"1F539\",\n    \"tags\": [\n      \"blue\",\n      \"diamond\",\n      \"geometric\",\n      \"small\"\n    ],\n    \"emoji\": \"🔹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4943,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red triangle pointed up\",\n    \"hexcode\": \"1F53A\",\n    \"tags\": [\n      \"geometric\",\n      \"pointed\",\n      \"red\",\n      \"triangle\",\n      \"up\"\n    ],\n    \"emoji\": \"🔺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4944,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"red triangle pointed down\",\n    \"hexcode\": \"1F53B\",\n    \"tags\": [\n      \"down\",\n      \"geometric\",\n      \"pointed\",\n      \"red\",\n      \"triangle\"\n    ],\n    \"emoji\": \"🔻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4945,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"diamond with a dot\",\n    \"hexcode\": \"1F4A0\",\n    \"tags\": [\n      \"comic\",\n      \"diamond\",\n      \"dot\",\n      \"geometric\"\n    ],\n    \"emoji\": \"💠\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4946,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"radio button\",\n    \"hexcode\": \"1F518\",\n    \"tags\": [\n      \"button\",\n      \"geometric\",\n      \"radio\"\n    ],\n    \"emoji\": \"🔘\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4947,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"white square button\",\n    \"hexcode\": \"1F533\",\n    \"tags\": [\n      \"button\",\n      \"geometric\",\n      \"outlined\",\n      \"square\",\n      \"white\"\n    ],\n    \"emoji\": \"🔳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4948,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black square button\",\n    \"hexcode\": \"1F532\",\n    \"tags\": [\n      \"black\",\n      \"button\",\n      \"geometric\",\n      \"square\"\n    ],\n    \"emoji\": \"🔲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4949,\n    \"group\": 8,\n    \"subgroup\": 96,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"chequered flag\",\n    \"hexcode\": \"1F3C1\",\n    \"tags\": [\n      \"checkered\",\n      \"chequered\",\n      \"finish\",\n      \"flag\",\n      \"flags\",\n      \"game\",\n      \"race\",\n      \"racing\",\n      \"sport\",\n      \"win\"\n    ],\n    \"emoji\": \"🏁\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4950,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"triangular flag\",\n    \"hexcode\": \"1F6A9\",\n    \"tags\": [\n      \"construction\",\n      \"flag\",\n      \"golf\",\n      \"post\",\n      \"triangular\"\n    ],\n    \"emoji\": \"🚩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4951,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"crossed flags\",\n    \"hexcode\": \"1F38C\",\n    \"tags\": [\n      \"celebration\",\n      \"cross\",\n      \"crossed\",\n      \"flags\",\n      \"japanese\"\n    ],\n    \"emoji\": \"🎌\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4952,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"black flag\",\n    \"hexcode\": \"1F3F4\",\n    \"tags\": [\n      \"black\",\n      \"flag\",\n      \"waving\"\n    ],\n    \"emoji\": \"🏴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4953,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 1\n  },\n  {\n    \"label\": \"white flag\",\n    \"hexcode\": \"1F3F3\",\n    \"tags\": [\n      \"flag\",\n      \"waving\",\n      \"white\"\n    ],\n    \"emoji\": \"🏳️\",\n    \"text\": \"🏳︎\",\n    \"type\": 0,\n    \"order\": 4955,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 0.7\n  },\n  {\n    \"label\": \"rainbow flag\",\n    \"hexcode\": \"1F3F3-FE0F-200D-1F308\",\n    \"tags\": [\n      \"bisexual\",\n      \"flag\",\n      \"gay\",\n      \"genderqueer\",\n      \"glbt\",\n      \"glbtq\",\n      \"lesbian\",\n      \"lgbt\",\n      \"lgbtq\",\n      \"lgbtqia\",\n      \"pride\",\n      \"queer\",\n      \"rainbow\",\n      \"trans\",\n      \"transgender\"\n    ],\n    \"emoji\": \"🏳️‍🌈\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4956,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 4\n  },\n  {\n    \"label\": \"transgender flag\",\n    \"hexcode\": \"1F3F3-FE0F-200D-26A7-FE0F\",\n    \"tags\": [\n      \"blue\",\n      \"flag\",\n      \"light\",\n      \"pink\",\n      \"transgender\",\n      \"white\"\n    ],\n    \"emoji\": \"🏳️‍⚧️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4958,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 13\n  },\n  {\n    \"label\": \"pirate flag\",\n    \"hexcode\": \"1F3F4-200D-2620-FE0F\",\n    \"tags\": [\n      \"flag\",\n      \"jolly\",\n      \"pirate\",\n      \"plunder\",\n      \"roger\",\n      \"treasure\"\n    ],\n    \"emoji\": \"🏴‍☠️\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4962,\n    \"group\": 9,\n    \"subgroup\": 97,\n    \"version\": 11\n  },\n  {\n    \"label\": \"flag: Ascension Island\",\n    \"hexcode\": \"1F1E6-1F1E8\",\n    \"tags\": [\n      \"AC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4964,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Andorra\",\n    \"hexcode\": \"1F1E6-1F1E9\",\n    \"tags\": [\n      \"AD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4965,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: United Arab Emirates\",\n    \"hexcode\": \"1F1E6-1F1EA\",\n    \"tags\": [\n      \"AE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4966,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Afghanistan\",\n    \"hexcode\": \"1F1E6-1F1EB\",\n    \"tags\": [\n      \"AF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4967,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Antigua & Barbuda\",\n    \"hexcode\": \"1F1E6-1F1EC\",\n    \"tags\": [\n      \"AG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4968,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Anguilla\",\n    \"hexcode\": \"1F1E6-1F1EE\",\n    \"tags\": [\n      \"AI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4969,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Albania\",\n    \"hexcode\": \"1F1E6-1F1F1\",\n    \"tags\": [\n      \"AL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4970,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Armenia\",\n    \"hexcode\": \"1F1E6-1F1F2\",\n    \"tags\": [\n      \"AM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4971,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Angola\",\n    \"hexcode\": \"1F1E6-1F1F4\",\n    \"tags\": [\n      \"AO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4972,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Antarctica\",\n    \"hexcode\": \"1F1E6-1F1F6\",\n    \"tags\": [\n      \"AQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4973,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Argentina\",\n    \"hexcode\": \"1F1E6-1F1F7\",\n    \"tags\": [\n      \"AR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4974,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: American Samoa\",\n    \"hexcode\": \"1F1E6-1F1F8\",\n    \"tags\": [\n      \"AS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4975,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Austria\",\n    \"hexcode\": \"1F1E6-1F1F9\",\n    \"tags\": [\n      \"AT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4976,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Australia\",\n    \"hexcode\": \"1F1E6-1F1FA\",\n    \"tags\": [\n      \"AU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4977,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Aruba\",\n    \"hexcode\": \"1F1E6-1F1FC\",\n    \"tags\": [\n      \"AW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4978,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Åland Islands\",\n    \"hexcode\": \"1F1E6-1F1FD\",\n    \"tags\": [\n      \"AX\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4979,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Azerbaijan\",\n    \"hexcode\": \"1F1E6-1F1FF\",\n    \"tags\": [\n      \"AZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇦🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4980,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bosnia & Herzegovina\",\n    \"hexcode\": \"1F1E7-1F1E6\",\n    \"tags\": [\n      \"BA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4981,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Barbados\",\n    \"hexcode\": \"1F1E7-1F1E7\",\n    \"tags\": [\n      \"BB\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4982,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bangladesh\",\n    \"hexcode\": \"1F1E7-1F1E9\",\n    \"tags\": [\n      \"BD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4983,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Belgium\",\n    \"hexcode\": \"1F1E7-1F1EA\",\n    \"tags\": [\n      \"BE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4984,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Burkina Faso\",\n    \"hexcode\": \"1F1E7-1F1EB\",\n    \"tags\": [\n      \"BF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4985,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bulgaria\",\n    \"hexcode\": \"1F1E7-1F1EC\",\n    \"tags\": [\n      \"BG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4986,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bahrain\",\n    \"hexcode\": \"1F1E7-1F1ED\",\n    \"tags\": [\n      \"BH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4987,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Burundi\",\n    \"hexcode\": \"1F1E7-1F1EE\",\n    \"tags\": [\n      \"BI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4988,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Benin\",\n    \"hexcode\": \"1F1E7-1F1EF\",\n    \"tags\": [\n      \"BJ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4989,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Barthélemy\",\n    \"hexcode\": \"1F1E7-1F1F1\",\n    \"tags\": [\n      \"BL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4990,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bermuda\",\n    \"hexcode\": \"1F1E7-1F1F2\",\n    \"tags\": [\n      \"BM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4991,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Brunei\",\n    \"hexcode\": \"1F1E7-1F1F3\",\n    \"tags\": [\n      \"BN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4992,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bolivia\",\n    \"hexcode\": \"1F1E7-1F1F4\",\n    \"tags\": [\n      \"BO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4993,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Caribbean Netherlands\",\n    \"hexcode\": \"1F1E7-1F1F6\",\n    \"tags\": [\n      \"BQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4994,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Brazil\",\n    \"hexcode\": \"1F1E7-1F1F7\",\n    \"tags\": [\n      \"BR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4995,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bahamas\",\n    \"hexcode\": \"1F1E7-1F1F8\",\n    \"tags\": [\n      \"BS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4996,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bhutan\",\n    \"hexcode\": \"1F1E7-1F1F9\",\n    \"tags\": [\n      \"BT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4997,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Bouvet Island\",\n    \"hexcode\": \"1F1E7-1F1FB\",\n    \"tags\": [\n      \"BV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4998,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Botswana\",\n    \"hexcode\": \"1F1E7-1F1FC\",\n    \"tags\": [\n      \"BW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 4999,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Belarus\",\n    \"hexcode\": \"1F1E7-1F1FE\",\n    \"tags\": [\n      \"BY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5000,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Belize\",\n    \"hexcode\": \"1F1E7-1F1FF\",\n    \"tags\": [\n      \"BZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇧🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5001,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Canada\",\n    \"hexcode\": \"1F1E8-1F1E6\",\n    \"tags\": [\n      \"CA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5002,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cocos (Keeling) Islands\",\n    \"hexcode\": \"1F1E8-1F1E8\",\n    \"tags\": [\n      \"CC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5003,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Congo - Kinshasa\",\n    \"hexcode\": \"1F1E8-1F1E9\",\n    \"tags\": [\n      \"CD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5004,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Central African Republic\",\n    \"hexcode\": \"1F1E8-1F1EB\",\n    \"tags\": [\n      \"CF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5005,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Congo - Brazzaville\",\n    \"hexcode\": \"1F1E8-1F1EC\",\n    \"tags\": [\n      \"CG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5006,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Switzerland\",\n    \"hexcode\": \"1F1E8-1F1ED\",\n    \"tags\": [\n      \"CH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5007,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Côte d’Ivoire\",\n    \"hexcode\": \"1F1E8-1F1EE\",\n    \"tags\": [\n      \"CI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5008,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cook Islands\",\n    \"hexcode\": \"1F1E8-1F1F0\",\n    \"tags\": [\n      \"CK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5009,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Chile\",\n    \"hexcode\": \"1F1E8-1F1F1\",\n    \"tags\": [\n      \"CL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5010,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cameroon\",\n    \"hexcode\": \"1F1E8-1F1F2\",\n    \"tags\": [\n      \"CM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5011,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: China\",\n    \"hexcode\": \"1F1E8-1F1F3\",\n    \"tags\": [\n      \"CN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5012,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Colombia\",\n    \"hexcode\": \"1F1E8-1F1F4\",\n    \"tags\": [\n      \"CO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5013,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Clipperton Island\",\n    \"hexcode\": \"1F1E8-1F1F5\",\n    \"tags\": [\n      \"CP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5014,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sark\",\n    \"hexcode\": \"1F1E8-1F1F6\",\n    \"tags\": [\n      \"CQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5015,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 16\n  },\n  {\n    \"label\": \"flag: Costa Rica\",\n    \"hexcode\": \"1F1E8-1F1F7\",\n    \"tags\": [\n      \"CR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5016,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cuba\",\n    \"hexcode\": \"1F1E8-1F1FA\",\n    \"tags\": [\n      \"CU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5017,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cape Verde\",\n    \"hexcode\": \"1F1E8-1F1FB\",\n    \"tags\": [\n      \"CV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5018,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Curaçao\",\n    \"hexcode\": \"1F1E8-1F1FC\",\n    \"tags\": [\n      \"CW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5019,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Christmas Island\",\n    \"hexcode\": \"1F1E8-1F1FD\",\n    \"tags\": [\n      \"CX\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5020,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cyprus\",\n    \"hexcode\": \"1F1E8-1F1FE\",\n    \"tags\": [\n      \"CY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5021,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Czechia\",\n    \"hexcode\": \"1F1E8-1F1FF\",\n    \"tags\": [\n      \"CZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇨🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5022,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Germany\",\n    \"hexcode\": \"1F1E9-1F1EA\",\n    \"tags\": [\n      \"DE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5023,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Diego Garcia\",\n    \"hexcode\": \"1F1E9-1F1EC\",\n    \"tags\": [\n      \"DG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5024,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Djibouti\",\n    \"hexcode\": \"1F1E9-1F1EF\",\n    \"tags\": [\n      \"DJ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5025,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Denmark\",\n    \"hexcode\": \"1F1E9-1F1F0\",\n    \"tags\": [\n      \"DK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5026,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Dominica\",\n    \"hexcode\": \"1F1E9-1F1F2\",\n    \"tags\": [\n      \"DM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5027,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Dominican Republic\",\n    \"hexcode\": \"1F1E9-1F1F4\",\n    \"tags\": [\n      \"DO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5028,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Algeria\",\n    \"hexcode\": \"1F1E9-1F1FF\",\n    \"tags\": [\n      \"DZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇩🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5029,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Ceuta & Melilla\",\n    \"hexcode\": \"1F1EA-1F1E6\",\n    \"tags\": [\n      \"EA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5030,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Ecuador\",\n    \"hexcode\": \"1F1EA-1F1E8\",\n    \"tags\": [\n      \"EC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5031,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Estonia\",\n    \"hexcode\": \"1F1EA-1F1EA\",\n    \"tags\": [\n      \"EE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5032,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Egypt\",\n    \"hexcode\": \"1F1EA-1F1EC\",\n    \"tags\": [\n      \"EG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5033,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Western Sahara\",\n    \"hexcode\": \"1F1EA-1F1ED\",\n    \"tags\": [\n      \"EH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5034,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Eritrea\",\n    \"hexcode\": \"1F1EA-1F1F7\",\n    \"tags\": [\n      \"ER\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5035,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Spain\",\n    \"hexcode\": \"1F1EA-1F1F8\",\n    \"tags\": [\n      \"ES\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5036,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Ethiopia\",\n    \"hexcode\": \"1F1EA-1F1F9\",\n    \"tags\": [\n      \"ET\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5037,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: European Union\",\n    \"hexcode\": \"1F1EA-1F1FA\",\n    \"tags\": [\n      \"EU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇪🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5038,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Finland\",\n    \"hexcode\": \"1F1EB-1F1EE\",\n    \"tags\": [\n      \"FI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5039,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Fiji\",\n    \"hexcode\": \"1F1EB-1F1EF\",\n    \"tags\": [\n      \"FJ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5040,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Falkland Islands\",\n    \"hexcode\": \"1F1EB-1F1F0\",\n    \"tags\": [\n      \"FK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5041,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Micronesia\",\n    \"hexcode\": \"1F1EB-1F1F2\",\n    \"tags\": [\n      \"FM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5042,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Faroe Islands\",\n    \"hexcode\": \"1F1EB-1F1F4\",\n    \"tags\": [\n      \"FO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5043,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: France\",\n    \"hexcode\": \"1F1EB-1F1F7\",\n    \"tags\": [\n      \"FR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇫🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5044,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Gabon\",\n    \"hexcode\": \"1F1EC-1F1E6\",\n    \"tags\": [\n      \"GA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5045,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: United Kingdom\",\n    \"hexcode\": \"1F1EC-1F1E7\",\n    \"tags\": [\n      \"GB\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5046,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Grenada\",\n    \"hexcode\": \"1F1EC-1F1E9\",\n    \"tags\": [\n      \"GD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5047,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Georgia\",\n    \"hexcode\": \"1F1EC-1F1EA\",\n    \"tags\": [\n      \"GE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5048,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: French Guiana\",\n    \"hexcode\": \"1F1EC-1F1EB\",\n    \"tags\": [\n      \"GF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5049,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guernsey\",\n    \"hexcode\": \"1F1EC-1F1EC\",\n    \"tags\": [\n      \"GG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5050,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Ghana\",\n    \"hexcode\": \"1F1EC-1F1ED\",\n    \"tags\": [\n      \"GH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5051,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Gibraltar\",\n    \"hexcode\": \"1F1EC-1F1EE\",\n    \"tags\": [\n      \"GI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5052,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Greenland\",\n    \"hexcode\": \"1F1EC-1F1F1\",\n    \"tags\": [\n      \"GL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5053,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Gambia\",\n    \"hexcode\": \"1F1EC-1F1F2\",\n    \"tags\": [\n      \"GM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5054,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guinea\",\n    \"hexcode\": \"1F1EC-1F1F3\",\n    \"tags\": [\n      \"GN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5055,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guadeloupe\",\n    \"hexcode\": \"1F1EC-1F1F5\",\n    \"tags\": [\n      \"GP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5056,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Equatorial Guinea\",\n    \"hexcode\": \"1F1EC-1F1F6\",\n    \"tags\": [\n      \"GQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5057,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Greece\",\n    \"hexcode\": \"1F1EC-1F1F7\",\n    \"tags\": [\n      \"GR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5058,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: South Georgia & South Sandwich Islands\",\n    \"hexcode\": \"1F1EC-1F1F8\",\n    \"tags\": [\n      \"GS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5059,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guatemala\",\n    \"hexcode\": \"1F1EC-1F1F9\",\n    \"tags\": [\n      \"GT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5060,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guam\",\n    \"hexcode\": \"1F1EC-1F1FA\",\n    \"tags\": [\n      \"GU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5061,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guinea-Bissau\",\n    \"hexcode\": \"1F1EC-1F1FC\",\n    \"tags\": [\n      \"GW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5062,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Guyana\",\n    \"hexcode\": \"1F1EC-1F1FE\",\n    \"tags\": [\n      \"GY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇬🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5063,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Hong Kong SAR China\",\n    \"hexcode\": \"1F1ED-1F1F0\",\n    \"tags\": [\n      \"HK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5064,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Heard & McDonald Islands\",\n    \"hexcode\": \"1F1ED-1F1F2\",\n    \"tags\": [\n      \"HM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5065,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Honduras\",\n    \"hexcode\": \"1F1ED-1F1F3\",\n    \"tags\": [\n      \"HN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5066,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Croatia\",\n    \"hexcode\": \"1F1ED-1F1F7\",\n    \"tags\": [\n      \"HR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5067,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Haiti\",\n    \"hexcode\": \"1F1ED-1F1F9\",\n    \"tags\": [\n      \"HT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5068,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Hungary\",\n    \"hexcode\": \"1F1ED-1F1FA\",\n    \"tags\": [\n      \"HU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇭🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5069,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Canary Islands\",\n    \"hexcode\": \"1F1EE-1F1E8\",\n    \"tags\": [\n      \"IC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5070,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Indonesia\",\n    \"hexcode\": \"1F1EE-1F1E9\",\n    \"tags\": [\n      \"ID\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5071,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Ireland\",\n    \"hexcode\": \"1F1EE-1F1EA\",\n    \"tags\": [\n      \"IE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5072,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Israel\",\n    \"hexcode\": \"1F1EE-1F1F1\",\n    \"tags\": [\n      \"IL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5073,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Isle of Man\",\n    \"hexcode\": \"1F1EE-1F1F2\",\n    \"tags\": [\n      \"IM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5074,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: India\",\n    \"hexcode\": \"1F1EE-1F1F3\",\n    \"tags\": [\n      \"IN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5075,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: British Indian Ocean Territory\",\n    \"hexcode\": \"1F1EE-1F1F4\",\n    \"tags\": [\n      \"IO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5076,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Iraq\",\n    \"hexcode\": \"1F1EE-1F1F6\",\n    \"tags\": [\n      \"IQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5077,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Iran\",\n    \"hexcode\": \"1F1EE-1F1F7\",\n    \"tags\": [\n      \"IR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5078,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Iceland\",\n    \"hexcode\": \"1F1EE-1F1F8\",\n    \"tags\": [\n      \"IS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5079,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Italy\",\n    \"hexcode\": \"1F1EE-1F1F9\",\n    \"tags\": [\n      \"IT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇮🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5080,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Jersey\",\n    \"hexcode\": \"1F1EF-1F1EA\",\n    \"tags\": [\n      \"JE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇯🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5081,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Jamaica\",\n    \"hexcode\": \"1F1EF-1F1F2\",\n    \"tags\": [\n      \"JM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇯🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5082,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Jordan\",\n    \"hexcode\": \"1F1EF-1F1F4\",\n    \"tags\": [\n      \"JO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇯🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5083,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Japan\",\n    \"hexcode\": \"1F1EF-1F1F5\",\n    \"tags\": [\n      \"JP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇯🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5084,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Kenya\",\n    \"hexcode\": \"1F1F0-1F1EA\",\n    \"tags\": [\n      \"KE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5085,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Kyrgyzstan\",\n    \"hexcode\": \"1F1F0-1F1EC\",\n    \"tags\": [\n      \"KG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5086,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cambodia\",\n    \"hexcode\": \"1F1F0-1F1ED\",\n    \"tags\": [\n      \"KH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5087,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Kiribati\",\n    \"hexcode\": \"1F1F0-1F1EE\",\n    \"tags\": [\n      \"KI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5088,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Comoros\",\n    \"hexcode\": \"1F1F0-1F1F2\",\n    \"tags\": [\n      \"KM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5089,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Kitts & Nevis\",\n    \"hexcode\": \"1F1F0-1F1F3\",\n    \"tags\": [\n      \"KN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5090,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: North Korea\",\n    \"hexcode\": \"1F1F0-1F1F5\",\n    \"tags\": [\n      \"KP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5091,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: South Korea\",\n    \"hexcode\": \"1F1F0-1F1F7\",\n    \"tags\": [\n      \"KR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5092,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Kuwait\",\n    \"hexcode\": \"1F1F0-1F1FC\",\n    \"tags\": [\n      \"KW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5093,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Cayman Islands\",\n    \"hexcode\": \"1F1F0-1F1FE\",\n    \"tags\": [\n      \"KY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5094,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Kazakhstan\",\n    \"hexcode\": \"1F1F0-1F1FF\",\n    \"tags\": [\n      \"KZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇰🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5095,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Laos\",\n    \"hexcode\": \"1F1F1-1F1E6\",\n    \"tags\": [\n      \"LA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5096,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Lebanon\",\n    \"hexcode\": \"1F1F1-1F1E7\",\n    \"tags\": [\n      \"LB\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5097,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Lucia\",\n    \"hexcode\": \"1F1F1-1F1E8\",\n    \"tags\": [\n      \"LC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5098,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Liechtenstein\",\n    \"hexcode\": \"1F1F1-1F1EE\",\n    \"tags\": [\n      \"LI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5099,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sri Lanka\",\n    \"hexcode\": \"1F1F1-1F1F0\",\n    \"tags\": [\n      \"LK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5100,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Liberia\",\n    \"hexcode\": \"1F1F1-1F1F7\",\n    \"tags\": [\n      \"LR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5101,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Lesotho\",\n    \"hexcode\": \"1F1F1-1F1F8\",\n    \"tags\": [\n      \"LS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5102,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Lithuania\",\n    \"hexcode\": \"1F1F1-1F1F9\",\n    \"tags\": [\n      \"LT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5103,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Luxembourg\",\n    \"hexcode\": \"1F1F1-1F1FA\",\n    \"tags\": [\n      \"LU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5104,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Latvia\",\n    \"hexcode\": \"1F1F1-1F1FB\",\n    \"tags\": [\n      \"LV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5105,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Libya\",\n    \"hexcode\": \"1F1F1-1F1FE\",\n    \"tags\": [\n      \"LY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇱🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5106,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Morocco\",\n    \"hexcode\": \"1F1F2-1F1E6\",\n    \"tags\": [\n      \"MA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5107,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Monaco\",\n    \"hexcode\": \"1F1F2-1F1E8\",\n    \"tags\": [\n      \"MC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5108,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Moldova\",\n    \"hexcode\": \"1F1F2-1F1E9\",\n    \"tags\": [\n      \"MD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5109,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Montenegro\",\n    \"hexcode\": \"1F1F2-1F1EA\",\n    \"tags\": [\n      \"ME\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5110,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Martin\",\n    \"hexcode\": \"1F1F2-1F1EB\",\n    \"tags\": [\n      \"MF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5111,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Madagascar\",\n    \"hexcode\": \"1F1F2-1F1EC\",\n    \"tags\": [\n      \"MG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5112,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Marshall Islands\",\n    \"hexcode\": \"1F1F2-1F1ED\",\n    \"tags\": [\n      \"MH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5113,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: North Macedonia\",\n    \"hexcode\": \"1F1F2-1F1F0\",\n    \"tags\": [\n      \"MK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5114,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mali\",\n    \"hexcode\": \"1F1F2-1F1F1\",\n    \"tags\": [\n      \"ML\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5115,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Myanmar (Burma)\",\n    \"hexcode\": \"1F1F2-1F1F2\",\n    \"tags\": [\n      \"MM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5116,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mongolia\",\n    \"hexcode\": \"1F1F2-1F1F3\",\n    \"tags\": [\n      \"MN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5117,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Macao SAR China\",\n    \"hexcode\": \"1F1F2-1F1F4\",\n    \"tags\": [\n      \"MO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5118,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Northern Mariana Islands\",\n    \"hexcode\": \"1F1F2-1F1F5\",\n    \"tags\": [\n      \"MP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5119,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Martinique\",\n    \"hexcode\": \"1F1F2-1F1F6\",\n    \"tags\": [\n      \"MQ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇶\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5120,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mauritania\",\n    \"hexcode\": \"1F1F2-1F1F7\",\n    \"tags\": [\n      \"MR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5121,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Montserrat\",\n    \"hexcode\": \"1F1F2-1F1F8\",\n    \"tags\": [\n      \"MS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5122,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Malta\",\n    \"hexcode\": \"1F1F2-1F1F9\",\n    \"tags\": [\n      \"MT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5123,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mauritius\",\n    \"hexcode\": \"1F1F2-1F1FA\",\n    \"tags\": [\n      \"MU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5124,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Maldives\",\n    \"hexcode\": \"1F1F2-1F1FB\",\n    \"tags\": [\n      \"MV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5125,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Malawi\",\n    \"hexcode\": \"1F1F2-1F1FC\",\n    \"tags\": [\n      \"MW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5126,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mexico\",\n    \"hexcode\": \"1F1F2-1F1FD\",\n    \"tags\": [\n      \"MX\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5127,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Malaysia\",\n    \"hexcode\": \"1F1F2-1F1FE\",\n    \"tags\": [\n      \"MY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5128,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mozambique\",\n    \"hexcode\": \"1F1F2-1F1FF\",\n    \"tags\": [\n      \"MZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇲🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5129,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Namibia\",\n    \"hexcode\": \"1F1F3-1F1E6\",\n    \"tags\": [\n      \"NA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5130,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: New Caledonia\",\n    \"hexcode\": \"1F1F3-1F1E8\",\n    \"tags\": [\n      \"NC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5131,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Niger\",\n    \"hexcode\": \"1F1F3-1F1EA\",\n    \"tags\": [\n      \"NE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5132,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Norfolk Island\",\n    \"hexcode\": \"1F1F3-1F1EB\",\n    \"tags\": [\n      \"NF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5133,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Nigeria\",\n    \"hexcode\": \"1F1F3-1F1EC\",\n    \"tags\": [\n      \"NG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5134,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Nicaragua\",\n    \"hexcode\": \"1F1F3-1F1EE\",\n    \"tags\": [\n      \"NI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5135,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Netherlands\",\n    \"hexcode\": \"1F1F3-1F1F1\",\n    \"tags\": [\n      \"NL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5136,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Norway\",\n    \"hexcode\": \"1F1F3-1F1F4\",\n    \"tags\": [\n      \"NO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5137,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Nepal\",\n    \"hexcode\": \"1F1F3-1F1F5\",\n    \"tags\": [\n      \"NP\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇵\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5138,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Nauru\",\n    \"hexcode\": \"1F1F3-1F1F7\",\n    \"tags\": [\n      \"NR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5139,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Niue\",\n    \"hexcode\": \"1F1F3-1F1FA\",\n    \"tags\": [\n      \"NU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5140,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: New Zealand\",\n    \"hexcode\": \"1F1F3-1F1FF\",\n    \"tags\": [\n      \"NZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇳🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5141,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Oman\",\n    \"hexcode\": \"1F1F4-1F1F2\",\n    \"tags\": [\n      \"OM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇴🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5142,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Panama\",\n    \"hexcode\": \"1F1F5-1F1E6\",\n    \"tags\": [\n      \"PA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5143,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Peru\",\n    \"hexcode\": \"1F1F5-1F1EA\",\n    \"tags\": [\n      \"PE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5144,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: French Polynesia\",\n    \"hexcode\": \"1F1F5-1F1EB\",\n    \"tags\": [\n      \"PF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5145,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Papua New Guinea\",\n    \"hexcode\": \"1F1F5-1F1EC\",\n    \"tags\": [\n      \"PG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5146,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Philippines\",\n    \"hexcode\": \"1F1F5-1F1ED\",\n    \"tags\": [\n      \"PH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5147,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Pakistan\",\n    \"hexcode\": \"1F1F5-1F1F0\",\n    \"tags\": [\n      \"PK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5148,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Poland\",\n    \"hexcode\": \"1F1F5-1F1F1\",\n    \"tags\": [\n      \"PL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5149,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Pierre & Miquelon\",\n    \"hexcode\": \"1F1F5-1F1F2\",\n    \"tags\": [\n      \"PM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5150,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Pitcairn Islands\",\n    \"hexcode\": \"1F1F5-1F1F3\",\n    \"tags\": [\n      \"PN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5151,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Puerto Rico\",\n    \"hexcode\": \"1F1F5-1F1F7\",\n    \"tags\": [\n      \"PR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5152,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Palestinian Territories\",\n    \"hexcode\": \"1F1F5-1F1F8\",\n    \"tags\": [\n      \"PS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5153,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Portugal\",\n    \"hexcode\": \"1F1F5-1F1F9\",\n    \"tags\": [\n      \"PT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5154,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Palau\",\n    \"hexcode\": \"1F1F5-1F1FC\",\n    \"tags\": [\n      \"PW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5155,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Paraguay\",\n    \"hexcode\": \"1F1F5-1F1FE\",\n    \"tags\": [\n      \"PY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇵🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5156,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Qatar\",\n    \"hexcode\": \"1F1F6-1F1E6\",\n    \"tags\": [\n      \"QA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇶🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5157,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Réunion\",\n    \"hexcode\": \"1F1F7-1F1EA\",\n    \"tags\": [\n      \"RE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇷🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5158,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Romania\",\n    \"hexcode\": \"1F1F7-1F1F4\",\n    \"tags\": [\n      \"RO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇷🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5159,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Serbia\",\n    \"hexcode\": \"1F1F7-1F1F8\",\n    \"tags\": [\n      \"RS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇷🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5160,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Russia\",\n    \"hexcode\": \"1F1F7-1F1FA\",\n    \"tags\": [\n      \"RU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇷🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5161,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Rwanda\",\n    \"hexcode\": \"1F1F7-1F1FC\",\n    \"tags\": [\n      \"RW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇷🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5162,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Saudi Arabia\",\n    \"hexcode\": \"1F1F8-1F1E6\",\n    \"tags\": [\n      \"SA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5163,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Solomon Islands\",\n    \"hexcode\": \"1F1F8-1F1E7\",\n    \"tags\": [\n      \"SB\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇧\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5164,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Seychelles\",\n    \"hexcode\": \"1F1F8-1F1E8\",\n    \"tags\": [\n      \"SC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5165,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sudan\",\n    \"hexcode\": \"1F1F8-1F1E9\",\n    \"tags\": [\n      \"SD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5166,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sweden\",\n    \"hexcode\": \"1F1F8-1F1EA\",\n    \"tags\": [\n      \"SE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5167,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Singapore\",\n    \"hexcode\": \"1F1F8-1F1EC\",\n    \"tags\": [\n      \"SG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5168,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Helena\",\n    \"hexcode\": \"1F1F8-1F1ED\",\n    \"tags\": [\n      \"SH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5169,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Slovenia\",\n    \"hexcode\": \"1F1F8-1F1EE\",\n    \"tags\": [\n      \"SI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5170,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Svalbard & Jan Mayen\",\n    \"hexcode\": \"1F1F8-1F1EF\",\n    \"tags\": [\n      \"SJ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5171,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Slovakia\",\n    \"hexcode\": \"1F1F8-1F1F0\",\n    \"tags\": [\n      \"SK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5172,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sierra Leone\",\n    \"hexcode\": \"1F1F8-1F1F1\",\n    \"tags\": [\n      \"SL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5173,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: San Marino\",\n    \"hexcode\": \"1F1F8-1F1F2\",\n    \"tags\": [\n      \"SM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5174,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Senegal\",\n    \"hexcode\": \"1F1F8-1F1F3\",\n    \"tags\": [\n      \"SN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5175,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Somalia\",\n    \"hexcode\": \"1F1F8-1F1F4\",\n    \"tags\": [\n      \"SO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5176,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Suriname\",\n    \"hexcode\": \"1F1F8-1F1F7\",\n    \"tags\": [\n      \"SR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5177,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: South Sudan\",\n    \"hexcode\": \"1F1F8-1F1F8\",\n    \"tags\": [\n      \"SS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5178,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: São Tomé & Príncipe\",\n    \"hexcode\": \"1F1F8-1F1F9\",\n    \"tags\": [\n      \"ST\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5179,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: El Salvador\",\n    \"hexcode\": \"1F1F8-1F1FB\",\n    \"tags\": [\n      \"SV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5180,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Sint Maarten\",\n    \"hexcode\": \"1F1F8-1F1FD\",\n    \"tags\": [\n      \"SX\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇽\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5181,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Syria\",\n    \"hexcode\": \"1F1F8-1F1FE\",\n    \"tags\": [\n      \"SY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5182,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Eswatini\",\n    \"hexcode\": \"1F1F8-1F1FF\",\n    \"tags\": [\n      \"SZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇸🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5183,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tristan da Cunha\",\n    \"hexcode\": \"1F1F9-1F1E6\",\n    \"tags\": [\n      \"TA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5184,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Turks & Caicos Islands\",\n    \"hexcode\": \"1F1F9-1F1E8\",\n    \"tags\": [\n      \"TC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5185,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Chad\",\n    \"hexcode\": \"1F1F9-1F1E9\",\n    \"tags\": [\n      \"TD\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇩\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5186,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: French Southern Territories\",\n    \"hexcode\": \"1F1F9-1F1EB\",\n    \"tags\": [\n      \"TF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5187,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Togo\",\n    \"hexcode\": \"1F1F9-1F1EC\",\n    \"tags\": [\n      \"TG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5188,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Thailand\",\n    \"hexcode\": \"1F1F9-1F1ED\",\n    \"tags\": [\n      \"TH\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇭\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5189,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tajikistan\",\n    \"hexcode\": \"1F1F9-1F1EF\",\n    \"tags\": [\n      \"TJ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇯\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5190,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tokelau\",\n    \"hexcode\": \"1F1F9-1F1F0\",\n    \"tags\": [\n      \"TK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5191,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Timor-Leste\",\n    \"hexcode\": \"1F1F9-1F1F1\",\n    \"tags\": [\n      \"TL\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇱\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5192,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Turkmenistan\",\n    \"hexcode\": \"1F1F9-1F1F2\",\n    \"tags\": [\n      \"TM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5193,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tunisia\",\n    \"hexcode\": \"1F1F9-1F1F3\",\n    \"tags\": [\n      \"TN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5194,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tonga\",\n    \"hexcode\": \"1F1F9-1F1F4\",\n    \"tags\": [\n      \"TO\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇴\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5195,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Türkiye\",\n    \"hexcode\": \"1F1F9-1F1F7\",\n    \"tags\": [\n      \"TR\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇷\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5196,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Trinidad & Tobago\",\n    \"hexcode\": \"1F1F9-1F1F9\",\n    \"tags\": [\n      \"TT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5197,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tuvalu\",\n    \"hexcode\": \"1F1F9-1F1FB\",\n    \"tags\": [\n      \"TV\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇻\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5198,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Taiwan\",\n    \"hexcode\": \"1F1F9-1F1FC\",\n    \"tags\": [\n      \"TW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5199,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Tanzania\",\n    \"hexcode\": \"1F1F9-1F1FF\",\n    \"tags\": [\n      \"TZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇹🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5200,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Ukraine\",\n    \"hexcode\": \"1F1FA-1F1E6\",\n    \"tags\": [\n      \"UA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5201,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Uganda\",\n    \"hexcode\": \"1F1FA-1F1EC\",\n    \"tags\": [\n      \"UG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5202,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: U.S. Outlying Islands\",\n    \"hexcode\": \"1F1FA-1F1F2\",\n    \"tags\": [\n      \"UM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5203,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: United Nations\",\n    \"hexcode\": \"1F1FA-1F1F3\",\n    \"tags\": [\n      \"UN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5204,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 4\n  },\n  {\n    \"label\": \"flag: United States\",\n    \"hexcode\": \"1F1FA-1F1F8\",\n    \"tags\": [\n      \"US\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5205,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 0.6\n  },\n  {\n    \"label\": \"flag: Uruguay\",\n    \"hexcode\": \"1F1FA-1F1FE\",\n    \"tags\": [\n      \"UY\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇾\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5206,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Uzbekistan\",\n    \"hexcode\": \"1F1FA-1F1FF\",\n    \"tags\": [\n      \"UZ\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇺🇿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5207,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Vatican City\",\n    \"hexcode\": \"1F1FB-1F1E6\",\n    \"tags\": [\n      \"VA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5208,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: St. Vincent & Grenadines\",\n    \"hexcode\": \"1F1FB-1F1E8\",\n    \"tags\": [\n      \"VC\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇨\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5209,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Venezuela\",\n    \"hexcode\": \"1F1FB-1F1EA\",\n    \"tags\": [\n      \"VE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5210,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: British Virgin Islands\",\n    \"hexcode\": \"1F1FB-1F1EC\",\n    \"tags\": [\n      \"VG\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇬\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5211,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: U.S. Virgin Islands\",\n    \"hexcode\": \"1F1FB-1F1EE\",\n    \"tags\": [\n      \"VI\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇮\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5212,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Vietnam\",\n    \"hexcode\": \"1F1FB-1F1F3\",\n    \"tags\": [\n      \"VN\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇳\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5213,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Vanuatu\",\n    \"hexcode\": \"1F1FB-1F1FA\",\n    \"tags\": [\n      \"VU\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇻🇺\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5214,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Wallis & Futuna\",\n    \"hexcode\": \"1F1FC-1F1EB\",\n    \"tags\": [\n      \"WF\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇼🇫\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5215,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Samoa\",\n    \"hexcode\": \"1F1FC-1F1F8\",\n    \"tags\": [\n      \"WS\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇼🇸\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5216,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Kosovo\",\n    \"hexcode\": \"1F1FD-1F1F0\",\n    \"tags\": [\n      \"XK\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇽🇰\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5217,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Yemen\",\n    \"hexcode\": \"1F1FE-1F1EA\",\n    \"tags\": [\n      \"YE\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇾🇪\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5218,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Mayotte\",\n    \"hexcode\": \"1F1FE-1F1F9\",\n    \"tags\": [\n      \"YT\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇾🇹\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5219,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: South Africa\",\n    \"hexcode\": \"1F1FF-1F1E6\",\n    \"tags\": [\n      \"ZA\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇿🇦\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5220,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Zambia\",\n    \"hexcode\": \"1F1FF-1F1F2\",\n    \"tags\": [\n      \"ZM\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇿🇲\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5221,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: Zimbabwe\",\n    \"hexcode\": \"1F1FF-1F1FC\",\n    \"tags\": [\n      \"ZW\",\n      \"flag\"\n    ],\n    \"emoji\": \"🇿🇼\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5222,\n    \"group\": 9,\n    \"subgroup\": 98,\n    \"version\": 2\n  },\n  {\n    \"label\": \"flag: England\",\n    \"hexcode\": \"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F\",\n    \"tags\": [\n      \"flag\",\n      \"gbeng\"\n    ],\n    \"emoji\": \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5223,\n    \"group\": 9,\n    \"subgroup\": 99,\n    \"version\": 5\n  },\n  {\n    \"label\": \"flag: Scotland\",\n    \"hexcode\": \"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F\",\n    \"tags\": [\n      \"flag\",\n      \"gbsct\"\n    ],\n    \"emoji\": \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5224,\n    \"group\": 9,\n    \"subgroup\": 99,\n    \"version\": 5\n  },\n  {\n    \"label\": \"flag: Wales\",\n    \"hexcode\": \"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F\",\n    \"tags\": [\n      \"flag\",\n      \"gbwls\"\n    ],\n    \"emoji\": \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n    \"text\": \"\",\n    \"type\": 1,\n    \"order\": 5225,\n    \"group\": 9,\n    \"subgroup\": 99,\n    \"version\": 5\n  }\n]"
  },
  {
    "path": "src/Spectre.Console/Data/spinners_default.json",
    "content": "{\n  \"Default\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"⣷\",\n      \"⣯\",\n      \"⣟\",\n      \"⡿\",\n      \"⢿\",\n      \"⣻\",\n      \"⣽\",\n      \"⣾\"\n    ]\n  },\n  \"Ascii\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"-\",\n      \"\\\\\",\n      \"|\",\n      \"/\",\n      \"-\",\n      \"\\\\\",\n      \"|\",\n      \"/\"\n    ]\n  }\n}"
  },
  {
    "path": "src/Spectre.Console/Data/spinners_sindresorhus.json",
    "content": "{\n  \"dots\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠋\",\n      \"⠙\",\n      \"⠹\",\n      \"⠸\",\n      \"⠼\",\n      \"⠴\",\n      \"⠦\",\n      \"⠧\",\n      \"⠇\",\n      \"⠏\"\n    ]\n  },\n  \"dots2\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⣾\",\n      \"⣽\",\n      \"⣻\",\n      \"⢿\",\n      \"⡿\",\n      \"⣟\",\n      \"⣯\",\n      \"⣷\"\n    ]\n  },\n  \"dots3\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠋\",\n      \"⠙\",\n      \"⠚\",\n      \"⠞\",\n      \"⠖\",\n      \"⠦\",\n      \"⠴\",\n      \"⠲\",\n      \"⠳\",\n      \"⠓\"\n    ]\n  },\n  \"dots4\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠄\",\n      \"⠆\",\n      \"⠇\",\n      \"⠋\",\n      \"⠙\",\n      \"⠸\",\n      \"⠰\",\n      \"⠠\",\n      \"⠰\",\n      \"⠸\",\n      \"⠙\",\n      \"⠋\",\n      \"⠇\",\n      \"⠆\"\n    ]\n  },\n  \"dots5\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠋\",\n      \"⠙\",\n      \"⠚\",\n      \"⠒\",\n      \"⠂\",\n      \"⠂\",\n      \"⠒\",\n      \"⠲\",\n      \"⠴\",\n      \"⠦\",\n      \"⠖\",\n      \"⠒\",\n      \"⠐\",\n      \"⠐\",\n      \"⠒\",\n      \"⠓\",\n      \"⠋\"\n    ]\n  },\n  \"dots6\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠁\",\n      \"⠉\",\n      \"⠙\",\n      \"⠚\",\n      \"⠒\",\n      \"⠂\",\n      \"⠂\",\n      \"⠒\",\n      \"⠲\",\n      \"⠴\",\n      \"⠤\",\n      \"⠄\",\n      \"⠄\",\n      \"⠤\",\n      \"⠴\",\n      \"⠲\",\n      \"⠒\",\n      \"⠂\",\n      \"⠂\",\n      \"⠒\",\n      \"⠚\",\n      \"⠙\",\n      \"⠉\",\n      \"⠁\"\n    ]\n  },\n  \"dots7\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠈\",\n      \"⠉\",\n      \"⠋\",\n      \"⠓\",\n      \"⠒\",\n      \"⠐\",\n      \"⠐\",\n      \"⠒\",\n      \"⠖\",\n      \"⠦\",\n      \"⠤\",\n      \"⠠\",\n      \"⠠\",\n      \"⠤\",\n      \"⠦\",\n      \"⠖\",\n      \"⠒\",\n      \"⠐\",\n      \"⠐\",\n      \"⠒\",\n      \"⠓\",\n      \"⠋\",\n      \"⠉\",\n      \"⠈\"\n    ]\n  },\n  \"dots8\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠁\",\n      \"⠁\",\n      \"⠉\",\n      \"⠙\",\n      \"⠚\",\n      \"⠒\",\n      \"⠂\",\n      \"⠂\",\n      \"⠒\",\n      \"⠲\",\n      \"⠴\",\n      \"⠤\",\n      \"⠄\",\n      \"⠄\",\n      \"⠤\",\n      \"⠠\",\n      \"⠠\",\n      \"⠤\",\n      \"⠦\",\n      \"⠖\",\n      \"⠒\",\n      \"⠐\",\n      \"⠐\",\n      \"⠒\",\n      \"⠓\",\n      \"⠋\",\n      \"⠉\",\n      \"⠈\",\n      \"⠈\"\n    ]\n  },\n  \"dots9\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⢹\",\n      \"⢺\",\n      \"⢼\",\n      \"⣸\",\n      \"⣇\",\n      \"⡧\",\n      \"⡗\",\n      \"⡏\"\n    ]\n  },\n  \"dots10\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⢄\",\n      \"⢂\",\n      \"⢁\",\n      \"⡁\",\n      \"⡈\",\n      \"⡐\",\n      \"⡠\"\n    ]\n  },\n  \"dots11\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠁\",\n      \"⠂\",\n      \"⠄\",\n      \"⡀\",\n      \"⢀\",\n      \"⠠\",\n      \"⠐\",\n      \"⠈\"\n    ]\n  },\n  \"dots12\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⢀⠀\",\n      \"⡀⠀\",\n      \"⠄⠀\",\n      \"⢂⠀\",\n      \"⡂⠀\",\n      \"⠅⠀\",\n      \"⢃⠀\",\n      \"⡃⠀\",\n      \"⠍⠀\",\n      \"⢋⠀\",\n      \"⡋⠀\",\n      \"⠍⠁\",\n      \"⢋⠁\",\n      \"⡋⠁\",\n      \"⠍⠉\",\n      \"⠋⠉\",\n      \"⠋⠉\",\n      \"⠉⠙\",\n      \"⠉⠙\",\n      \"⠉⠩\",\n      \"⠈⢙\",\n      \"⠈⡙\",\n      \"⢈⠩\",\n      \"⡀⢙\",\n      \"⠄⡙\",\n      \"⢂⠩\",\n      \"⡂⢘\",\n      \"⠅⡘\",\n      \"⢃⠨\",\n      \"⡃⢐\",\n      \"⠍⡐\",\n      \"⢋⠠\",\n      \"⡋⢀\",\n      \"⠍⡁\",\n      \"⢋⠁\",\n      \"⡋⠁\",\n      \"⠍⠉\",\n      \"⠋⠉\",\n      \"⠋⠉\",\n      \"⠉⠙\",\n      \"⠉⠙\",\n      \"⠉⠩\",\n      \"⠈⢙\",\n      \"⠈⡙\",\n      \"⠈⠩\",\n      \"⠀⢙\",\n      \"⠀⡙\",\n      \"⠀⠩\",\n      \"⠀⢘\",\n      \"⠀⡘\",\n      \"⠀⠨\",\n      \"⠀⢐\",\n      \"⠀⡐\",\n      \"⠀⠠\",\n      \"⠀⢀\",\n      \"⠀⡀\"\n    ]\n  },\n  \"dots13\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⣼\",\n      \"⣹\",\n      \"⢻\",\n      \"⠿\",\n      \"⡟\",\n      \"⣏\",\n      \"⣧\",\n      \"⣶\"\n    ]\n  },\n  \"dots14\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠉⠉\",\n      \"⠈⠙\",\n      \"⠀⠹\",\n      \"⠀⢸\",\n      \"⠀⣰\",\n      \"⢀⣠\",\n      \"⣀⣀\",\n      \"⣄⡀\",\n      \"⣆⠀\",\n      \"⡇⠀\",\n      \"⠏⠀\",\n      \"⠋⠁\"\n    ]\n  },\n  \"dots8Bit\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠀\",\n      \"⠁\",\n      \"⠂\",\n      \"⠃\",\n      \"⠄\",\n      \"⠅\",\n      \"⠆\",\n      \"⠇\",\n      \"⡀\",\n      \"⡁\",\n      \"⡂\",\n      \"⡃\",\n      \"⡄\",\n      \"⡅\",\n      \"⡆\",\n      \"⡇\",\n      \"⠈\",\n      \"⠉\",\n      \"⠊\",\n      \"⠋\",\n      \"⠌\",\n      \"⠍\",\n      \"⠎\",\n      \"⠏\",\n      \"⡈\",\n      \"⡉\",\n      \"⡊\",\n      \"⡋\",\n      \"⡌\",\n      \"⡍\",\n      \"⡎\",\n      \"⡏\",\n      \"⠐\",\n      \"⠑\",\n      \"⠒\",\n      \"⠓\",\n      \"⠔\",\n      \"⠕\",\n      \"⠖\",\n      \"⠗\",\n      \"⡐\",\n      \"⡑\",\n      \"⡒\",\n      \"⡓\",\n      \"⡔\",\n      \"⡕\",\n      \"⡖\",\n      \"⡗\",\n      \"⠘\",\n      \"⠙\",\n      \"⠚\",\n      \"⠛\",\n      \"⠜\",\n      \"⠝\",\n      \"⠞\",\n      \"⠟\",\n      \"⡘\",\n      \"⡙\",\n      \"⡚\",\n      \"⡛\",\n      \"⡜\",\n      \"⡝\",\n      \"⡞\",\n      \"⡟\",\n      \"⠠\",\n      \"⠡\",\n      \"⠢\",\n      \"⠣\",\n      \"⠤\",\n      \"⠥\",\n      \"⠦\",\n      \"⠧\",\n      \"⡠\",\n      \"⡡\",\n      \"⡢\",\n      \"⡣\",\n      \"⡤\",\n      \"⡥\",\n      \"⡦\",\n      \"⡧\",\n      \"⠨\",\n      \"⠩\",\n      \"⠪\",\n      \"⠫\",\n      \"⠬\",\n      \"⠭\",\n      \"⠮\",\n      \"⠯\",\n      \"⡨\",\n      \"⡩\",\n      \"⡪\",\n      \"⡫\",\n      \"⡬\",\n      \"⡭\",\n      \"⡮\",\n      \"⡯\",\n      \"⠰\",\n      \"⠱\",\n      \"⠲\",\n      \"⠳\",\n      \"⠴\",\n      \"⠵\",\n      \"⠶\",\n      \"⠷\",\n      \"⡰\",\n      \"⡱\",\n      \"⡲\",\n      \"⡳\",\n      \"⡴\",\n      \"⡵\",\n      \"⡶\",\n      \"⡷\",\n      \"⠸\",\n      \"⠹\",\n      \"⠺\",\n      \"⠻\",\n      \"⠼\",\n      \"⠽\",\n      \"⠾\",\n      \"⠿\",\n      \"⡸\",\n      \"⡹\",\n      \"⡺\",\n      \"⡻\",\n      \"⡼\",\n      \"⡽\",\n      \"⡾\",\n      \"⡿\",\n      \"⢀\",\n      \"⢁\",\n      \"⢂\",\n      \"⢃\",\n      \"⢄\",\n      \"⢅\",\n      \"⢆\",\n      \"⢇\",\n      \"⣀\",\n      \"⣁\",\n      \"⣂\",\n      \"⣃\",\n      \"⣄\",\n      \"⣅\",\n      \"⣆\",\n      \"⣇\",\n      \"⢈\",\n      \"⢉\",\n      \"⢊\",\n      \"⢋\",\n      \"⢌\",\n      \"⢍\",\n      \"⢎\",\n      \"⢏\",\n      \"⣈\",\n      \"⣉\",\n      \"⣊\",\n      \"⣋\",\n      \"⣌\",\n      \"⣍\",\n      \"⣎\",\n      \"⣏\",\n      \"⢐\",\n      \"⢑\",\n      \"⢒\",\n      \"⢓\",\n      \"⢔\",\n      \"⢕\",\n      \"⢖\",\n      \"⢗\",\n      \"⣐\",\n      \"⣑\",\n      \"⣒\",\n      \"⣓\",\n      \"⣔\",\n      \"⣕\",\n      \"⣖\",\n      \"⣗\",\n      \"⢘\",\n      \"⢙\",\n      \"⢚\",\n      \"⢛\",\n      \"⢜\",\n      \"⢝\",\n      \"⢞\",\n      \"⢟\",\n      \"⣘\",\n      \"⣙\",\n      \"⣚\",\n      \"⣛\",\n      \"⣜\",\n      \"⣝\",\n      \"⣞\",\n      \"⣟\",\n      \"⢠\",\n      \"⢡\",\n      \"⢢\",\n      \"⢣\",\n      \"⢤\",\n      \"⢥\",\n      \"⢦\",\n      \"⢧\",\n      \"⣠\",\n      \"⣡\",\n      \"⣢\",\n      \"⣣\",\n      \"⣤\",\n      \"⣥\",\n      \"⣦\",\n      \"⣧\",\n      \"⢨\",\n      \"⢩\",\n      \"⢪\",\n      \"⢫\",\n      \"⢬\",\n      \"⢭\",\n      \"⢮\",\n      \"⢯\",\n      \"⣨\",\n      \"⣩\",\n      \"⣪\",\n      \"⣫\",\n      \"⣬\",\n      \"⣭\",\n      \"⣮\",\n      \"⣯\",\n      \"⢰\",\n      \"⢱\",\n      \"⢲\",\n      \"⢳\",\n      \"⢴\",\n      \"⢵\",\n      \"⢶\",\n      \"⢷\",\n      \"⣰\",\n      \"⣱\",\n      \"⣲\",\n      \"⣳\",\n      \"⣴\",\n      \"⣵\",\n      \"⣶\",\n      \"⣷\",\n      \"⢸\",\n      \"⢹\",\n      \"⢺\",\n      \"⢻\",\n      \"⢼\",\n      \"⢽\",\n      \"⢾\",\n      \"⢿\",\n      \"⣸\",\n      \"⣹\",\n      \"⣺\",\n      \"⣻\",\n      \"⣼\",\n      \"⣽\",\n      \"⣾\",\n      \"⣿\"\n    ]\n  },\n  \"dotsCircle\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⢎ \",\n      \"⠎⠁\",\n      \"⠊⠑\",\n      \"⠈⠱\",\n      \" ⡱\",\n      \"⢀⡰\",\n      \"⢄⡠\",\n      \"⢆⡀\"\n    ]\n  },\n  \"sand\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠁\",\n      \"⠂\",\n      \"⠄\",\n      \"⡀\",\n      \"⡈\",\n      \"⡐\",\n      \"⡠\",\n      \"⣀\",\n      \"⣁\",\n      \"⣂\",\n      \"⣄\",\n      \"⣌\",\n      \"⣔\",\n      \"⣤\",\n      \"⣥\",\n      \"⣦\",\n      \"⣮\",\n      \"⣶\",\n      \"⣷\",\n      \"⣿\",\n      \"⡿\",\n      \"⠿\",\n      \"⢟\",\n      \"⠟\",\n      \"⡛\",\n      \"⠛\",\n      \"⠫\",\n      \"⢋\",\n      \"⠋\",\n      \"⠍\",\n      \"⡉\",\n      \"⠉\",\n      \"⠑\",\n      \"⠡\",\n      \"⢁\"\n    ]\n  },\n  \"line\": {\n    \"interval\": 130,\n    \"unicode\": false,\n    \"frames\": [\n      \"-\",\n      \"\\\\\",\n      \"|\",\n      \"/\"\n    ]\n  },\n  \"line2\": {\n    \"interval\": 100,\n    \"unicode\": false,\n    \"frames\": [\n      \"⠂\",\n      \"-\",\n      \"–\",\n      \"—\",\n      \"–\",\n      \"-\"\n    ]\n  },\n  \"pipe\": {\n    \"interval\": 100,\n    \"unicode\": false,\n    \"frames\": [\n      \"┤\",\n      \"┘\",\n      \"┴\",\n      \"└\",\n      \"├\",\n      \"┌\",\n      \"┬\",\n      \"┐\"\n    ]\n  },\n  \"simpleDots\": {\n    \"interval\": 400,\n    \"unicode\": false,\n    \"frames\": [\n      \".  \",\n      \".. \",\n      \"...\",\n      \"   \"\n    ]\n  },\n  \"simpleDotsScrolling\": {\n    \"interval\": 200,\n    \"unicode\": false,\n    \"frames\": [\n      \".  \",\n      \".. \",\n      \"...\",\n      \" ..\",\n      \"  .\",\n      \"   \"\n    ]\n  },\n  \"star\": {\n    \"interval\": 70,\n    \"unicode\": true,\n    \"frames\": [\n      \"✶\",\n      \"✸\",\n      \"✹\",\n      \"✺\",\n      \"✹\",\n      \"✷\"\n    ]\n  },\n  \"star2\": {\n    \"interval\": 80,\n    \"unicode\": false,\n    \"frames\": [\n      \"+\",\n      \"x\",\n      \"*\"\n    ]\n  },\n  \"flip\": {\n    \"interval\": 70,\n    \"unicode\": false,\n    \"frames\": [\n      \"_\",\n      \"_\",\n      \"_\",\n      \"-\",\n      \"`\",\n      \"`\",\n      \"'\",\n      \"´\",\n      \"-\",\n      \"_\",\n      \"_\",\n      \"_\"\n    ]\n  },\n  \"hamburger\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"☱\",\n      \"☲\",\n      \"☴\"\n    ]\n  },\n  \"growVertical\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"▁\",\n      \"▃\",\n      \"▄\",\n      \"▅\",\n      \"▆\",\n      \"▇\",\n      \"▆\",\n      \"▅\",\n      \"▄\",\n      \"▃\"\n    ]\n  },\n  \"growHorizontal\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"▏\",\n      \"▎\",\n      \"▍\",\n      \"▌\",\n      \"▋\",\n      \"▊\",\n      \"▉\",\n      \"▊\",\n      \"▋\",\n      \"▌\",\n      \"▍\",\n      \"▎\"\n    ]\n  },\n  \"balloon\": {\n    \"interval\": 140,\n    \"unicode\": false,\n    \"frames\": [\n      \" \",\n      \".\",\n      \"o\",\n      \"O\",\n      \"@\",\n      \"*\",\n      \" \"\n    ]\n  },\n  \"balloon2\": {\n    \"interval\": 120,\n    \"unicode\": false,\n    \"frames\": [\n      \".\",\n      \"o\",\n      \"O\",\n      \"°\",\n      \"O\",\n      \"o\",\n      \".\"\n    ]\n  },\n  \"noise\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"▓\",\n      \"▒\",\n      \"░\"\n    ]\n  },\n  \"bounce\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"⠁\",\n      \"⠂\",\n      \"⠄\",\n      \"⠂\"\n    ]\n  },\n  \"boxBounce\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"▖\",\n      \"▘\",\n      \"▝\",\n      \"▗\"\n    ]\n  },\n  \"boxBounce2\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"▌\",\n      \"▀\",\n      \"▐\",\n      \"▄\"\n    ]\n  },\n  \"triangle\": {\n    \"interval\": 50,\n    \"unicode\": true,\n    \"frames\": [\n      \"◢\",\n      \"◣\",\n      \"◤\",\n      \"◥\"\n    ]\n  },\n  \"binary\": {\n    \"interval\": 80,\n    \"unicode\": false,\n    \"frames\": [\n      \"010010\",\n      \"001100\",\n      \"100101\",\n      \"111010\",\n      \"111101\",\n      \"010111\",\n      \"101011\",\n      \"111000\",\n      \"110011\",\n      \"110101\"\n    ]\n  },\n  \"arc\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"◜\",\n      \"◠\",\n      \"◝\",\n      \"◞\",\n      \"◡\",\n      \"◟\"\n    ]\n  },\n  \"circle\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"◡\",\n      \"⊙\",\n      \"◠\"\n    ]\n  },\n  \"squareCorners\": {\n    \"interval\": 180,\n    \"unicode\": true,\n    \"frames\": [\n      \"◰\",\n      \"◳\",\n      \"◲\",\n      \"◱\"\n    ]\n  },\n  \"circleQuarters\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"◴\",\n      \"◷\",\n      \"◶\",\n      \"◵\"\n    ]\n  },\n  \"circleHalves\": {\n    \"interval\": 50,\n    \"unicode\": true,\n    \"frames\": [\n      \"◐\",\n      \"◓\",\n      \"◑\",\n      \"◒\"\n    ]\n  },\n  \"squish\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"╫\",\n      \"╪\"\n    ]\n  },\n  \"toggle\": {\n    \"interval\": 250,\n    \"unicode\": true,\n    \"frames\": [\n      \"⊶\",\n      \"⊷\"\n    ]\n  },\n  \"toggle2\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"▫\",\n      \"▪\"\n    ]\n  },\n  \"toggle3\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"□\",\n      \"■\"\n    ]\n  },\n  \"toggle4\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"■\",\n      \"□\",\n      \"▪\",\n      \"▫\"\n    ]\n  },\n  \"toggle5\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"▮\",\n      \"▯\"\n    ]\n  },\n  \"toggle6\": {\n    \"interval\": 300,\n    \"unicode\": true,\n    \"frames\": [\n      \"ဝ\",\n      \"၀\"\n    ]\n  },\n  \"toggle7\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⦾\",\n      \"⦿\"\n    ]\n  },\n  \"toggle8\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"◍\",\n      \"◌\"\n    ]\n  },\n  \"toggle9\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"◉\",\n      \"◎\"\n    ]\n  },\n  \"toggle10\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"㊂\",\n      \"㊀\",\n      \"㊁\"\n    ]\n  },\n  \"toggle11\": {\n    \"interval\": 50,\n    \"unicode\": true,\n    \"frames\": [\n      \"⧇\",\n      \"⧆\"\n    ]\n  },\n  \"toggle12\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"☗\",\n      \"☖\"\n    ]\n  },\n  \"toggle13\": {\n    \"interval\": 80,\n    \"unicode\": false,\n    \"frames\": [\n      \"=\",\n      \"*\",\n      \"-\"\n    ]\n  },\n  \"arrow\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"←\",\n      \"↖\",\n      \"↑\",\n      \"↗\",\n      \"→\",\n      \"↘\",\n      \"↓\",\n      \"↙\"\n    ]\n  },\n  \"arrow2\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"⬆️ \",\n      \"↗️ \",\n      \"➡️ \",\n      \"↘️ \",\n      \"⬇️ \",\n      \"↙️ \",\n      \"⬅️ \",\n      \"↖️ \"\n    ]\n  },\n  \"arrow3\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"▹▹▹▹▹\",\n      \"▸▹▹▹▹\",\n      \"▹▸▹▹▹\",\n      \"▹▹▸▹▹\",\n      \"▹▹▹▸▹\",\n      \"▹▹▹▹▸\"\n    ]\n  },\n  \"bouncingBar\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"[    ]\",\n      \"[=   ]\",\n      \"[==  ]\",\n      \"[=== ]\",\n      \"[====]\",\n      \"[ ===]\",\n      \"[  ==]\",\n      \"[   =]\",\n      \"[    ]\",\n      \"[   =]\",\n      \"[  ==]\",\n      \"[ ===]\",\n      \"[====]\",\n      \"[=== ]\",\n      \"[==  ]\",\n      \"[=   ]\"\n    ]\n  },\n  \"bouncingBall\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"( ●    )\",\n      \"(  ●   )\",\n      \"(   ●  )\",\n      \"(    ● )\",\n      \"(     ●)\",\n      \"(    ● )\",\n      \"(   ●  )\",\n      \"(  ●   )\",\n      \"( ●    )\",\n      \"(●     )\"\n    ]\n  },\n  \"smiley\": {\n    \"interval\": 200,\n    \"unicode\": true,\n    \"frames\": [\n      \"😄 \",\n      \"😝 \"\n    ]\n  },\n  \"monkey\": {\n    \"interval\": 300,\n    \"unicode\": true,\n    \"frames\": [\n      \"🙈 \",\n      \"🙈 \",\n      \"🙉 \",\n      \"🙊 \"\n    ]\n  },\n  \"hearts\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"💛 \",\n      \"💙 \",\n      \"💜 \",\n      \"💚 \",\n      \"❤️ \"\n    ]\n  },\n  \"clock\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"🕛 \",\n      \"🕐 \",\n      \"🕑 \",\n      \"🕒 \",\n      \"🕓 \",\n      \"🕔 \",\n      \"🕕 \",\n      \"🕖 \",\n      \"🕗 \",\n      \"🕘 \",\n      \"🕙 \",\n      \"🕚 \"\n    ]\n  },\n  \"earth\": {\n    \"interval\": 180,\n    \"unicode\": true,\n    \"frames\": [\n      \"🌍 \",\n      \"🌎 \",\n      \"🌏 \"\n    ]\n  },\n  \"material\": {\n    \"interval\": 17,\n    \"unicode\": true,\n    \"frames\": [\n      \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"██████████▁▁▁▁▁▁▁▁▁▁\",\n      \"███████████▁▁▁▁▁▁▁▁▁\",\n      \"█████████████▁▁▁▁▁▁▁\",\n      \"██████████████▁▁▁▁▁▁\",\n      \"██████████████▁▁▁▁▁▁\",\n      \"▁██████████████▁▁▁▁▁\",\n      \"▁██████████████▁▁▁▁▁\",\n      \"▁██████████████▁▁▁▁▁\",\n      \"▁▁██████████████▁▁▁▁\",\n      \"▁▁▁██████████████▁▁▁\",\n      \"▁▁▁▁█████████████▁▁▁\",\n      \"▁▁▁▁██████████████▁▁\",\n      \"▁▁▁▁██████████████▁▁\",\n      \"▁▁▁▁▁██████████████▁\",\n      \"▁▁▁▁▁██████████████▁\",\n      \"▁▁▁▁▁██████████████▁\",\n      \"▁▁▁▁▁▁██████████████\",\n      \"▁▁▁▁▁▁██████████████\",\n      \"▁▁▁▁▁▁▁█████████████\",\n      \"▁▁▁▁▁▁▁█████████████\",\n      \"▁▁▁▁▁▁▁▁████████████\",\n      \"▁▁▁▁▁▁▁▁████████████\",\n      \"▁▁▁▁▁▁▁▁▁███████████\",\n      \"▁▁▁▁▁▁▁▁▁███████████\",\n      \"▁▁▁▁▁▁▁▁▁▁██████████\",\n      \"▁▁▁▁▁▁▁▁▁▁██████████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n      \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n      \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n      \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n      \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n      \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n      \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n      \"███████████▁▁▁▁▁▁▁▁▁\",\n      \"████████████▁▁▁▁▁▁▁▁\",\n      \"████████████▁▁▁▁▁▁▁▁\",\n      \"██████████████▁▁▁▁▁▁\",\n      \"██████████████▁▁▁▁▁▁\",\n      \"▁██████████████▁▁▁▁▁\",\n      \"▁██████████████▁▁▁▁▁\",\n      \"▁▁▁█████████████▁▁▁▁\",\n      \"▁▁▁▁▁████████████▁▁▁\",\n      \"▁▁▁▁▁████████████▁▁▁\",\n      \"▁▁▁▁▁▁███████████▁▁▁\",\n      \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n      \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n      \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n      \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n      \"▁▁▁▁▁▁▁▁▁▁█████████▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n      \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\"\n    ]\n  },\n  \"moon\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"🌑 \",\n      \"🌒 \",\n      \"🌓 \",\n      \"🌔 \",\n      \"🌕 \",\n      \"🌖 \",\n      \"🌗 \",\n      \"🌘 \"\n    ]\n  },\n  \"runner\": {\n    \"interval\": 140,\n    \"unicode\": true,\n    \"frames\": [\n      \"🚶 \",\n      \"🏃 \"\n    ]\n  },\n  \"pong\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"▐⠂       ▌\",\n      \"▐⠈       ▌\",\n      \"▐ ⠂      ▌\",\n      \"▐ ⠠      ▌\",\n      \"▐  ⡀     ▌\",\n      \"▐  ⠠     ▌\",\n      \"▐   ⠂    ▌\",\n      \"▐   ⠈    ▌\",\n      \"▐    ⠂   ▌\",\n      \"▐    ⠠   ▌\",\n      \"▐     ⡀  ▌\",\n      \"▐     ⠠  ▌\",\n      \"▐      ⠂ ▌\",\n      \"▐      ⠈ ▌\",\n      \"▐       ⠂▌\",\n      \"▐       ⠠▌\",\n      \"▐       ⡀▌\",\n      \"▐      ⠠ ▌\",\n      \"▐      ⠂ ▌\",\n      \"▐     ⠈  ▌\",\n      \"▐     ⠂  ▌\",\n      \"▐    ⠠   ▌\",\n      \"▐    ⡀   ▌\",\n      \"▐   ⠠    ▌\",\n      \"▐   ⠂    ▌\",\n      \"▐  ⠈     ▌\",\n      \"▐  ⠂     ▌\",\n      \"▐ ⠠      ▌\",\n      \"▐ ⡀      ▌\",\n      \"▐⠠       ▌\"\n    ]\n  },\n  \"shark\": {\n    \"interval\": 120,\n    \"unicode\": true,\n    \"frames\": [\n      \"▐|\\\\____________▌\",\n      \"▐_|\\\\___________▌\",\n      \"▐__|\\\\__________▌\",\n      \"▐___|\\\\_________▌\",\n      \"▐____|\\\\________▌\",\n      \"▐_____|\\\\_______▌\",\n      \"▐______|\\\\______▌\",\n      \"▐_______|\\\\_____▌\",\n      \"▐________|\\\\____▌\",\n      \"▐_________|\\\\___▌\",\n      \"▐__________|\\\\__▌\",\n      \"▐___________|\\\\_▌\",\n      \"▐____________|\\\\▌\",\n      \"▐____________/|▌\",\n      \"▐___________/|_▌\",\n      \"▐__________/|__▌\",\n      \"▐_________/|___▌\",\n      \"▐________/|____▌\",\n      \"▐_______/|_____▌\",\n      \"▐______/|______▌\",\n      \"▐_____/|_______▌\",\n      \"▐____/|________▌\",\n      \"▐___/|_________▌\",\n      \"▐__/|__________▌\",\n      \"▐_/|___________▌\",\n      \"▐/|____________▌\"\n    ]\n  },\n  \"dqpb\": {\n    \"interval\": 100,\n    \"unicode\": false,\n    \"frames\": [\n      \"d\",\n      \"q\",\n      \"p\",\n      \"b\"\n    ]\n  },\n  \"weather\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"☀️ \",\n      \"☀️ \",\n      \"☀️ \",\n      \"🌤 \",\n      \"⛅️ \",\n      \"🌥 \",\n      \"☁️ \",\n      \"🌧 \",\n      \"🌨 \",\n      \"🌧 \",\n      \"🌨 \",\n      \"🌧 \",\n      \"🌨 \",\n      \"⛈ \",\n      \"🌨 \",\n      \"🌧 \",\n      \"🌨 \",\n      \"☁️ \",\n      \"🌥 \",\n      \"⛅️ \",\n      \"🌤 \",\n      \"☀️ \",\n      \"☀️ \"\n    ]\n  },\n  \"christmas\": {\n    \"interval\": 400,\n    \"unicode\": true,\n    \"frames\": [\n      \"🌲\",\n      \"🎄\"\n    ]\n  },\n  \"grenade\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"،  \",\n      \"′  \",\n      \" ´ \",\n      \" ‾ \",\n      \"  ⸌\",\n      \"  ⸊\",\n      \"  |\",\n      \"  ⁎\",\n      \"  ⁕\",\n      \" ෴ \",\n      \"  ⁓\",\n      \"   \",\n      \"   \",\n      \"   \"\n    ]\n  },\n  \"point\": {\n    \"interval\": 125,\n    \"unicode\": true,\n    \"frames\": [\n      \"∙∙∙\",\n      \"●∙∙\",\n      \"∙●∙\",\n      \"∙∙●\",\n      \"∙∙∙\"\n    ]\n  },\n  \"layer\": {\n    \"interval\": 150,\n    \"unicode\": true,\n    \"frames\": [\n      \"-\",\n      \"=\",\n      \"≡\"\n    ]\n  },\n  \"betaWave\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"ρββββββ\",\n      \"βρβββββ\",\n      \"ββρββββ\",\n      \"βββρβββ\",\n      \"ββββρββ\",\n      \"βββββρβ\",\n      \"ββββββρ\"\n    ]\n  },\n  \"fingerDance\": {\n    \"interval\": 160,\n    \"unicode\": true,\n    \"frames\": [\n      \"🤘 \",\n      \"🤟 \",\n      \"🖖 \",\n      \"✋ \",\n      \"🤚 \",\n      \"👆 \"\n    ]\n  },\n  \"fistBump\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n      \"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n      \"🤜\\u3000\\u3000\\u3000\\u3000🤛 \",\n      \"\\u3000🤜\\u3000\\u3000🤛\\u3000 \",\n      \"\\u3000\\u3000🤜🤛\\u3000\\u3000 \",\n      \"\\u3000🤜✨🤛\\u3000\\u3000 \",\n      \"🤜\\u3000✨\\u3000🤛\\u3000 \"\n    ]\n  },\n  \"soccerHeader\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \" 🧑⚽️       🧑 \",\n      \"🧑  ⚽️      🧑 \",\n      \"🧑   ⚽️     🧑 \",\n      \"🧑    ⚽️    🧑 \",\n      \"🧑     ⚽️   🧑 \",\n      \"🧑      ⚽️  🧑 \",\n      \"🧑       ⚽️🧑  \",\n      \"🧑      ⚽️  🧑 \",\n      \"🧑     ⚽️   🧑 \",\n      \"🧑    ⚽️    🧑 \",\n      \"🧑   ⚽️     🧑 \",\n      \"🧑  ⚽️      🧑 \"\n    ]\n  },\n  \"mindblown\": {\n    \"interval\": 160,\n    \"unicode\": true,\n    \"frames\": [\n      \"😐 \",\n      \"😐 \",\n      \"😮 \",\n      \"😮 \",\n      \"😦 \",\n      \"😦 \",\n      \"😧 \",\n      \"😧 \",\n      \"🤯 \",\n      \"💥 \",\n      \"✨ \",\n      \"\\u3000 \",\n      \"\\u3000 \",\n      \"\\u3000 \"\n    ]\n  },\n  \"speaker\": {\n    \"interval\": 160,\n    \"unicode\": true,\n    \"frames\": [\n      \"🔈 \",\n      \"🔉 \",\n      \"🔊 \",\n      \"🔉 \"\n    ]\n  },\n  \"orangePulse\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"🔸 \",\n      \"🔶 \",\n      \"🟠 \",\n      \"🟠 \",\n      \"🔶 \"\n    ]\n  },\n  \"bluePulse\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"🔹 \",\n      \"🔷 \",\n      \"🔵 \",\n      \"🔵 \",\n      \"🔷 \"\n    ]\n  },\n  \"orangeBluePulse\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"🔸 \",\n      \"🔶 \",\n      \"🟠 \",\n      \"🟠 \",\n      \"🔶 \",\n      \"🔹 \",\n      \"🔷 \",\n      \"🔵 \",\n      \"🔵 \",\n      \"🔷 \"\n    ]\n  },\n  \"timeTravel\": {\n    \"interval\": 100,\n    \"unicode\": true,\n    \"frames\": [\n      \"🕛 \",\n      \"🕚 \",\n      \"🕙 \",\n      \"🕘 \",\n      \"🕗 \",\n      \"🕖 \",\n      \"🕕 \",\n      \"🕔 \",\n      \"🕓 \",\n      \"🕒 \",\n      \"🕑 \",\n      \"🕐 \"\n    ]\n  },\n  \"aesthetic\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \"▰▱▱▱▱▱▱\",\n      \"▰▰▱▱▱▱▱\",\n      \"▰▰▰▱▱▱▱\",\n      \"▰▰▰▰▱▱▱\",\n      \"▰▰▰▰▰▱▱\",\n      \"▰▰▰▰▰▰▱\",\n      \"▰▰▰▰▰▰▰\",\n      \"▰▱▱▱▱▱▱\"\n    ]\n  },\n  \"dwarfFortress\": {\n    \"interval\": 80,\n    \"unicode\": true,\n    \"frames\": [\n      \" ██████£££  \",\n      \"☺██████£££  \",\n      \"☺██████£££  \",\n      \"☺▓█████£££  \",\n      \"☺▓█████£££  \",\n      \"☺▒█████£££  \",\n      \"☺▒█████£££  \",\n      \"☺░█████£££  \",\n      \"☺░█████£££  \",\n      \"☺ █████£££  \",\n      \" ☺█████£££  \",\n      \" ☺█████£££  \",\n      \" ☺▓████£££  \",\n      \" ☺▓████£££  \",\n      \" ☺▒████£££  \",\n      \" ☺▒████£££  \",\n      \" ☺░████£££  \",\n      \" ☺░████£££  \",\n      \" ☺ ████£££  \",\n      \"  ☺████£££  \",\n      \"  ☺████£££  \",\n      \"  ☺▓███£££  \",\n      \"  ☺▓███£££  \",\n      \"  ☺▒███£££  \",\n      \"  ☺▒███£££  \",\n      \"  ☺░███£££  \",\n      \"  ☺░███£££  \",\n      \"  ☺ ███£££  \",\n      \"   ☺███£££  \",\n      \"   ☺███£££  \",\n      \"   ☺▓██£££  \",\n      \"   ☺▓██£££  \",\n      \"   ☺▒██£££  \",\n      \"   ☺▒██£££  \",\n      \"   ☺░██£££  \",\n      \"   ☺░██£££  \",\n      \"   ☺ ██£££  \",\n      \"    ☺██£££  \",\n      \"    ☺██£££  \",\n      \"    ☺▓█£££  \",\n      \"    ☺▓█£££  \",\n      \"    ☺▒█£££  \",\n      \"    ☺▒█£££  \",\n      \"    ☺░█£££  \",\n      \"    ☺░█£££  \",\n      \"    ☺ █£££  \",\n      \"     ☺█£££  \",\n      \"     ☺█£££  \",\n      \"     ☺▓£££  \",\n      \"     ☺▓£££  \",\n      \"     ☺▒£££  \",\n      \"     ☺▒£££  \",\n      \"     ☺░£££  \",\n      \"     ☺░£££  \",\n      \"     ☺ £££  \",\n      \"      ☺£££  \",\n      \"      ☺£££  \",\n      \"      ☺▓££  \",\n      \"      ☺▓££  \",\n      \"      ☺▒££  \",\n      \"      ☺▒££  \",\n      \"      ☺░££  \",\n      \"      ☺░££  \",\n      \"      ☺ ££  \",\n      \"       ☺££  \",\n      \"       ☺££  \",\n      \"       ☺▓£  \",\n      \"       ☺▓£  \",\n      \"       ☺▒£  \",\n      \"       ☺▒£  \",\n      \"       ☺░£  \",\n      \"       ☺░£  \",\n      \"       ☺ £  \",\n      \"        ☺£  \",\n      \"        ☺£  \",\n      \"        ☺▓  \",\n      \"        ☺▓  \",\n      \"        ☺▒  \",\n      \"        ☺▒  \",\n      \"        ☺░  \",\n      \"        ☺░  \",\n      \"        ☺   \",\n      \"        ☺  &\",\n      \"        ☺ ☼&\",\n      \"       ☺ ☼ &\",\n      \"       ☺☼  &\",\n      \"      ☺☼  & \",\n      \"      ‼   & \",\n      \"     ☺   &  \",\n      \"    ‼    &  \",\n      \"   ☺    &   \",\n      \"  ‼     &   \",\n      \" ☺     &    \",\n      \"‼      &    \",\n      \"      &     \",\n      \"      &     \",\n      \"     &   ░  \",\n      \"     &   ▒  \",\n      \"    &    ▓  \",\n      \"    &    £  \",\n      \"   &    ░£  \",\n      \"   &    ▒£  \",\n      \"  &     ▓£  \",\n      \"  &     ££  \",\n      \" &     ░££  \",\n      \" &     ▒££  \",\n      \"&      ▓££  \",\n      \"&      £££  \",\n      \"      ░£££  \",\n      \"      ▒£££  \",\n      \"      ▓£££  \",\n      \"      █£££  \",\n      \"     ░█£££  \",\n      \"     ▒█£££  \",\n      \"     ▓█£££  \",\n      \"     ██£££  \",\n      \"    ░██£££  \",\n      \"    ▒██£££  \",\n      \"    ▓██£££  \",\n      \"    ███£££  \",\n      \"   ░███£££  \",\n      \"   ▒███£££  \",\n      \"   ▓███£££  \",\n      \"   ████£££  \",\n      \"  ░████£££  \",\n      \"  ▒████£££  \",\n      \"  ▓████£££  \",\n      \"  █████£££  \",\n      \" ░█████£££  \",\n      \" ▒█████£££  \",\n      \" ▓█████£££  \",\n      \" ██████£££  \",\n      \" ██████£££  \"\n    ]\n  }\n}"
  },
  {
    "path": "src/Spectre.Console/Emoji.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Utility for working with emojis.\n/// </summary>\npublic static partial class Emoji\n{\n    private static readonly Dictionary<string, string> _remappings;\n\n    static Emoji()\n    {\n        _remappings = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);\n    }\n\n    /// <summary>\n    /// Remaps a specific emoji tag with a new emoji.\n    /// </summary>\n    /// <param name=\"tag\">The emoji tag.</param>\n    /// <param name=\"emoji\">The emoji.</param>\n    public static void Remap(string tag, string emoji)\n    {\n        ArgumentNullException.ThrowIfNull(tag);\n        ArgumentNullException.ThrowIfNull(emoji);\n\n        tag = tag.TrimStart(':').TrimEnd(':');\n        emoji = emoji.TrimStart(':').TrimEnd(':');\n\n        _remappings[tag] = emoji;\n    }\n\n    /// <summary>\n    /// Replaces emoji markup with corresponding unicode characters.\n    /// </summary>\n    /// <param name=\"value\">A string with emojis codes, e.g. \"Hello :smiley:!\".</param>\n    /// <returns>A string with emoji codes replaced with actual emoji.</returns>\n    public static string Replace(string value)\n    {\n        var colonPos = value.IndexOf(':');\n        if (colonPos == -1)\n        {\n            // No colons, no emoji. return what was passed in with no changes.\n            return value;\n        }\n\n        var span = value.AsSpan();\n        StringBuilder? output = null;\n\n        var index = colonPos + 1;\n        int nextColonPos;\n        while ((nextColonPos = span.IndexOf(':', index)) != -1)\n        {\n            var emojiKey = span.Slice(index, nextColonPos - index).ToString();\n            if (TryGetEmoji(emojiKey, out var emojiValue))\n            {\n                output ??= new StringBuilder();\n                output.AppendSpan(span[..(index - 1)]);\n                output.Append(emojiValue);\n\n                span = span.Slice(nextColonPos + 1);\n                index = 0;\n            }\n            else\n            {\n                index = nextColonPos + 1;\n            }\n        }\n\n        if (output == null)\n        {\n            return value;\n        }\n\n        output.AppendSpan(span);\n        return output.ToString();\n    }\n\n    private static bool TryGetEmoji(string emoji, out string value)\n    {\n        if (_remappings.TryGetValue(emoji, out var remappedEmojiValue))\n        {\n            value = remappedEmojiValue;\n            return true;\n        }\n\n        if (_emojis.TryGetValue(emoji, out var emojiValue))\n        {\n            value = emojiValue;\n            return true;\n        }\n\n        value = string.Empty;\n        return false;\n    }\n\n    private static int IndexOf(this ReadOnlySpan<char> span, char value, int startIndex)\n    {\n        var indexInSlice = span.Slice(startIndex).IndexOf(value);\n\n        if (indexInSlice == -1)\n        {\n            return -1;\n        }\n\n        return startIndex + indexInSlice;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/AppVeyorEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class AppVeyorEnricher : IProfileEnricher\n{\n    public string Name => \"AppVeyor\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"APPVEYOR\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/AzurePipelinesEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class AzurePipelinesEnricher : IProfileEnricher\n{\n    public string Name => \"AzurePipeline\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        environmentVariables.TryGetValue(\"TF_BUILD\", out var environmentValue);\n        return !string.IsNullOrWhiteSpace(environmentValue);\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Ansi = true;\n        profile.Capabilities.Interactive = false;\n        profile.Capabilities.Links = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/BambooEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class BambooEnricher : IProfileEnricher\n{\n    public string Name => \"Bamboo\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"bamboo_buildNumber\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/BitbucketEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class BitbucketEnricher : IProfileEnricher\n{\n    public string Name => \"Bitbucket\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"BITBUCKET_REPO_OWNER\") ||\n            environmentVariables.ContainsKey(\"BITBUCKET_REPO_SLUG\") ||\n            environmentVariables.ContainsKey(\"BITBUCKET_COMMIT\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/BitriseEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class BitriseEnricher : IProfileEnricher\n{\n    public string Name => \"Bitrise\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"BITRISE_BUILD_URL\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/ContinuaEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class ContinuaEnricher : IProfileEnricher\n{\n    public string Name => \"ContinuaCI\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"ContinuaCI.Version\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/GitHubEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class GitHubEnricher : IProfileEnricher\n{\n    public string Name => \"GitHub\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        if (environmentVariables.TryGetValue(\"GITHUB_ACTIONS\", out var value))\n        {\n            return value?.Equals(\"true\", StringComparison.OrdinalIgnoreCase) ?? false;\n        }\n\n        return false;\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Ansi = true;\n        profile.Capabilities.Interactive = false;\n        profile.Capabilities.Links = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/GitLabEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class GitLabEnricher : IProfileEnricher\n{\n    public string Name => \"GitLab\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        if (environmentVariables.TryGetValue(\"CI_SERVER\", out var value))\n        {\n            return value?.Equals(\"yes\", StringComparison.OrdinalIgnoreCase) ?? false;\n        }\n\n        return false;\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/GoCDEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class GoCDEnricher : IProfileEnricher\n{\n    public string Name => \"GoCD\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"GO_SERVER_URL\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/JenkinsEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class JenkinsEnricher : IProfileEnricher\n{\n    public string Name => \"Jenkins\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"JENKINS_URL\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/MyGetEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class MyGetEnricher : IProfileEnricher\n{\n    public string Name => \"MyGet\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        if (environmentVariables.TryGetValue(\"BuildRunner\", out var value))\n        {\n            return value?.Equals(\"MyGet\", StringComparison.OrdinalIgnoreCase) ?? false;\n        }\n\n        return false;\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/TeamCityEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class TeamCityEnricher : IProfileEnricher\n{\n    public string Name => \"TeamCity\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"TEAMCITY_VERSION\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/TfsEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class TfsEnricher : IProfileEnricher\n{\n    public string Name => \"TFS\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"TF_BUILD\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/CI/TravisEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal sealed class TravisEnricher : IProfileEnricher\n{\n    public string Name => \"Travis\";\n\n    public bool Enabled(IDictionary<string, string> environmentVariables)\n    {\n        return environmentVariables.ContainsKey(\"TRAVIS\");\n    }\n\n    public void Enrich(Profile profile)\n    {\n        profile.Capabilities.Interactive = false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/ProfileEnricher.cs",
    "content": "namespace Spectre.Console.Enrichment;\n\ninternal static class ProfileEnricher\n{\n    private static readonly List<IProfileEnricher> _defaultEnrichers =\n    [\n        new AppVeyorEnricher(),\n        new AzurePipelinesEnricher(),\n        new BambooEnricher(),\n        new BitbucketEnricher(),\n        new BitriseEnricher(),\n        new ContinuaEnricher(),\n        new GitHubEnricher(),\n        new GitLabEnricher(),\n        new GoCDEnricher(),\n        new JenkinsEnricher(),\n        new MyGetEnricher(),\n        new TeamCityEnricher(),\n        new TfsEnricher(),\n        new TravisEnricher()\n    ];\n\n    public static void Enrich(\n        Profile profile,\n        ProfileEnrichment settings,\n        IDictionary<string, string>? environmentVariables)\n    {\n        ArgumentNullException.ThrowIfNull(profile);\n\n        settings ??= new ProfileEnrichment();\n\n        var variables = GetEnvironmentVariables(environmentVariables);\n        foreach (var enricher in GetEnrichers(settings))\n        {\n            if (string.IsNullOrWhiteSpace(enricher.Name))\n            {\n                throw new InvalidOperationException($\"Profile enricher of type '{enricher.GetType().FullName}' does not have a name.\");\n            }\n\n            if (enricher.Enabled(variables))\n            {\n                enricher.Enrich(profile);\n                profile.AddEnricher(enricher.Name);\n            }\n        }\n    }\n\n    private static List<IProfileEnricher> GetEnrichers(ProfileEnrichment settings)\n    {\n        var enrichers = new List<IProfileEnricher>();\n\n        if (settings.UseDefaultEnrichers)\n        {\n            enrichers.AddRange(_defaultEnrichers);\n        }\n\n        if (settings.Enrichers?.Count > 0)\n        {\n            enrichers.AddRange(settings.Enrichers);\n        }\n\n        return enrichers;\n    }\n\n    private static IDictionary<string, string> GetEnvironmentVariables(IDictionary<string, string>? variables)\n    {\n        if (variables != null)\n        {\n            return new Dictionary<string, string>(variables, StringComparer.OrdinalIgnoreCase);\n        }\n\n        return Environment.GetEnvironmentVariables()\n            .Cast<System.Collections.DictionaryEntry>()\n            .Aggregate(\n                new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase),\n                (dictionary, entry) =>\n                {\n                    var key = (string)entry.Key;\n                    if (!dictionary.TryGetValue(key, out _))\n                    {\n                        dictionary.Add(key, entry.Value as string ?? string.Empty);\n                    }\n\n                    return dictionary;\n                },\n                dictionary => dictionary);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Enrichment/ProfileEnrichment.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains settings for profile enrichment.\n/// </summary>\npublic sealed class ProfileEnrichment\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// any default enrichers should be added.\n    /// </summary>\n    /// <remarks>Defaults to <c>true</c>.</remarks>\n    public bool UseDefaultEnrichers { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the list of custom enrichers to use.\n    /// </summary>\n    public List<IProfileEnricher>? Enrichers { get; set; }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Ansi.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Writes a VT/Ansi control code sequence to the console (if supported).\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"sequence\">The VT/Ansi control code sequence to write.</param>\n    public static void WriteAnsi(this IAnsiConsole console, string sequence)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        if (console.Profile.Capabilities.Ansi)\n        {\n            console.Write(new ControlCode(sequence));\n        }\n    }\n\n    /// <summary>\n    /// Gets the VT/ANSI control code sequence for a <see cref=\"IRenderable\"/>.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"renderable\">The renderable to the VT/ANSI control code sequence for.</param>\n    /// <returns>The VT/ANSI control code sequence.</returns>\n    public static string ToAnsi(this IAnsiConsole console, IRenderable renderable)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        // TODO: Make this a bit more efficient\n        var buffer = new StringWriter();\n        var ansi = new AnsiWriter(buffer, console.Profile.Capabilities);\n        ansi.Write(console, renderable);\n        return buffer.ToString();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Async.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Provides extension methods for running tasks with a spinner animation.\n/// </summary>\npublic static class SpinnerExtensions\n{\n    /// <summary>\n    /// Runs a task with a spinner animation.\n    /// </summary>\n    /// <param name=\"task\">The task to run.</param>\n    /// <param name=\"spinner\">The spinner to use.</param>\n    /// <param name=\"style\">The style to apply to the spinner.</param>\n    /// <param name=\"ansiConsole\">The console to write to.</param>\n    /// <returns>The result of the task.</returns>\n    public static async Task Spinner(this Task task, Spinner? spinner = null, Style? style = null,\n        IAnsiConsole? ansiConsole = null)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        await SpinnerInternal<object>(task, spinner ?? Console.Spinner.Known.Default, style, ansiConsole);\n    }\n\n    /// <summary>\n    /// Runs a task with a spinner animation.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of the task result.</typeparam>\n    /// <param name=\"task\">The task to run.</param>\n    /// <param name=\"spinner\">The spinner to use.</param>\n    /// <param name=\"style\">The style to apply to the spinner.</param>\n    /// <param name=\"ansiConsole\">The console to write to.</param>\n    /// <returns>The result of the task.</returns>\n    public static async Task<T> Spinner<T>(this Task<T> task, Spinner? spinner = null, Style? style = null,\n        IAnsiConsole? ansiConsole = null)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        return (await SpinnerInternal<T>(task, spinner ?? Console.Spinner.Known.Default, style, ansiConsole))!;\n    }\n\n    private static async Task<T?> SpinnerInternal<T>(Task task, Spinner spinner, Style? style = null,\n        IAnsiConsole? ansiConsole = null)\n    {\n        ansiConsole ??= AnsiConsole.Console;\n\n        style ??= Style.Plain;\n        var currentFrame = 0;\n        var cancellationTokenSource = new CancellationTokenSource();\n\n        // Start spinner animation in background\n        var spinnerTask = Task.Run(\n            async () =>\n            {\n                while (!cancellationTokenSource.Token.IsCancellationRequested)\n                {\n                    ansiConsole.Cursor.Show(false);\n\n                    var spinnerFrame = spinner.Frames[currentFrame];\n\n                    // Write the spinner frame\n                    ansiConsole.Write(new Text(spinnerFrame, style));\n                    ansiConsole.WriteAnsi(w => w.CursorLeft(spinnerFrame.Length));\n\n                    currentFrame = (currentFrame + 1) % spinner.Frames.Count;\n                    await Task.Delay(spinner.Interval, cancellationTokenSource.Token);\n                }\n            }, cancellationTokenSource.Token);\n\n        try\n        {\n            // Wait for the actual task to complete\n            if (task is Task<T> taskWithResult)\n            {\n                var result = await taskWithResult;\n                await cancellationTokenSource.CancelAsync();\n                await spinnerTask.ContinueWith(_ => { }, TaskContinuationOptions.OnlyOnCanceled);\n\n                return result;\n            }\n            else\n            {\n                await task;\n                await cancellationTokenSource.CancelAsync();\n                await spinnerTask.ContinueWith(_ => { }, TaskContinuationOptions.OnlyOnCanceled);\n\n                return default;\n            }\n        }\n        finally\n        {\n            var spinnerFrame = spinner.Frames[currentFrame];\n\n            ansiConsole.Write(new string(' ', spinnerFrame.Length));\n            ansiConsole.WriteAnsi(w => w.CursorLeft(spinnerFrame.Length));\n            ansiConsole.Cursor.Show();\n            await cancellationTokenSource.CancelAsync();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Exceptions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Writes an exception to the console.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"exception\">The exception to write to the console.</param>\n    /// <param name=\"format\">The exception format options.</param>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static void WriteException(this IAnsiConsole console, Exception exception,\n        ExceptionFormats format = ExceptionFormats.Default)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        console.Write(exception.GetRenderable(format));\n    }\n\n    /// <summary>\n    /// Writes an exception to the console.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"exception\">The exception to write to the console.</param>\n    /// <param name=\"settings\">The exception settings.</param>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static void WriteException(this IAnsiConsole console, Exception exception, ExceptionSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        console.Write(exception.GetRenderable(settings));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Exclusive.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Runs the specified function in exclusive mode.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"func\">The func to run in exclusive mode.</param>\n    /// <returns>The result of the function.</returns>\n    public static T RunExclusive<T>(this IAnsiConsole console, Func<T> func)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return console.ExclusivityMode.Run(func);\n    }\n\n    /// <summary>\n    /// Runs the specified function in exclusive mode asynchronously.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"func\">The func to run in exclusive mode.</param>\n    /// <returns>The result of the function.</returns>\n    public static Task<T> RunExclusive<T>(this IAnsiConsole console, Func<Task<T>> func)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return console.ExclusivityMode.RunAsync(func);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Input.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    internal static async Task<string> ReadLine(this IAnsiConsole console, Style? style, bool secret, char? mask, IEnumerable<string>? items = null, CancellationToken cancellationToken = default, string? initialInput = null)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        style ??= Style.Plain;\n        var text = string.Empty;\n\n        var autocomplete = new List<string>(items ?? []);\n\n        Queue<ConsoleKeyInfo>? injectedQueue = null;\n        if (!string.IsNullOrEmpty(initialInput))\n        {\n            injectedQueue = new Queue<ConsoleKeyInfo>();\n            foreach (var ch in initialInput)\n            {\n                var control = char.IsUpper(ch);\n                injectedQueue.Enqueue(new ConsoleKeyInfo(ch, (ConsoleKey)ch, false, false, control));\n            }\n        }\n\n        while (true)\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            ConsoleKeyInfo? rawKey;\n            if (injectedQueue != null && injectedQueue.Count > 0)\n            {\n                rawKey = injectedQueue.Dequeue();\n            }\n            else\n            {\n                rawKey = await console.Input.ReadKeyAsync(true, cancellationToken).ConfigureAwait(false);\n            }\n\n            if (rawKey == null)\n            {\n                continue;\n            }\n\n            var key = rawKey.Value;\n            if (key.Key == ConsoleKey.Enter)\n            {\n                return text;\n            }\n\n            if (key.Key == ConsoleKey.Tab && autocomplete.Count > 0)\n            {\n                var autoCompleteDirection = key.Modifiers.HasFlag(ConsoleModifiers.Shift)\n                    ? AutoCompleteDirection.Backward\n                    : AutoCompleteDirection.Forward;\n                var replace = AutoComplete(autocomplete, text, autoCompleteDirection);\n                if (!string.IsNullOrEmpty(replace))\n                {\n                    // Render the suggestion\n                    console.Write(\"\\b \\b\".Repeat(text.Length), style);\n                    console.Write(replace);\n                    text = replace;\n                    continue;\n                }\n            }\n\n            if (key.Key == ConsoleKey.Backspace)\n            {\n                if (text.Length > 0)\n                {\n                    var lastChar = text.Last();\n                    text = text.Substring(0, text.Length - 1);\n\n                    if (mask != null)\n                    {\n                        if (UnicodeCalculator.GetWidth(lastChar) == 1)\n                        {\n                            console.Write(\"\\b \\b\");\n                        }\n                        else if (UnicodeCalculator.GetWidth(lastChar) == 2)\n                        {\n                            console.Write(\"\\b \\b\\b \\b\");\n                        }\n                    }\n                }\n\n                continue;\n            }\n\n            if (!char.IsControl(key.KeyChar))\n            {\n                text += key.KeyChar.ToString();\n                var output = key.KeyChar.ToString();\n                console.Write(secret ? output.Mask(mask) : output, style);\n            }\n        }\n    }\n\n    private static string AutoComplete(List<string> autocomplete, string text, AutoCompleteDirection autoCompleteDirection)\n    {\n        var found = autocomplete.Find(i => i == text);\n        var replace = string.Empty;\n\n        if (found == null)\n        {\n            // Get the closest match\n            var next = autocomplete.Find(i => i.StartsWith(text, true, CultureInfo.InvariantCulture));\n            if (next != null)\n            {\n                replace = next;\n            }\n            else if (string.IsNullOrEmpty(text))\n            {\n                // Use the first item\n                replace = autocomplete[0];\n            }\n        }\n        else\n        {\n            // Get the next match\n            replace = GetAutocompleteValue(autoCompleteDirection, autocomplete, found);\n        }\n\n        return replace;\n    }\n\n    private static string GetAutocompleteValue(AutoCompleteDirection autoCompleteDirection, IList<string> autocomplete, string found)\n    {\n        var foundAutocompleteIndex = autocomplete.IndexOf(found);\n        var index = autoCompleteDirection switch\n        {\n            AutoCompleteDirection.Forward => foundAutocompleteIndex + 1,\n            AutoCompleteDirection.Backward => foundAutocompleteIndex - 1,\n            _ => throw new ArgumentOutOfRangeException(nameof(autoCompleteDirection), autoCompleteDirection, null),\n        };\n\n        if (index >= autocomplete.Count)\n        {\n            index = 0;\n        }\n\n        if (index < 0)\n        {\n            index = autocomplete.Count - 1;\n        }\n\n        return autocomplete[index];\n    }\n\n    private enum AutoCompleteDirection\n    {\n        Forward,\n        Backward,\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Live.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Creates a new <see cref=\"LiveDisplay\"/> instance for the console.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"target\">The target renderable to update.</param>\n    /// <returns>A <see cref=\"LiveDisplay\"/> instance.</returns>\n    public static LiveDisplay Live(this IAnsiConsole console, IRenderable target)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(target);\n\n        return new LiveDisplay(console, target);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Markup.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Markup(this IAnsiConsole console, string format, params object[] args)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        Markup(console, CultureInfo.CurrentCulture, format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// console.MarkupInterpolated($\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupInterpolated(this IAnsiConsole console, FormattableString value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        MarkupInterpolated(console, CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void Markup(this IAnsiConsole console, IFormatProvider provider, string format, params object[] args)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        Markup(console, string.Format(provider, format, args));\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// console.MarkupInterpolated(CultureInfo.InvariantCulture, $\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupInterpolated(this IAnsiConsole console, IFormatProvider provider, FormattableString value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        Markup(console, Console.Markup.EscapeInterpolated(provider, value));\n    }\n\n    /// <summary>\n    /// Writes the specified markup to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void Markup(this IAnsiConsole console, string value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        console.Write(new Markup(value));\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void MarkupLine(this IAnsiConsole console, string format, params object[] args)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        MarkupLine(console, CultureInfo.CurrentCulture, format, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// console.MarkupLineInterpolated($\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupLineInterpolated(this IAnsiConsole console, FormattableString value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        MarkupLineInterpolated(console, CultureInfo.CurrentCulture, value);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"value\">The value to write.</param>\n    public static void MarkupLine(this IAnsiConsole console, string value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        Markup(console, value + Environment.NewLine);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"format\">A composite format string.</param>\n    /// <param name=\"args\">An array of objects to write.</param>\n    public static void MarkupLine(this IAnsiConsole console, IFormatProvider provider, string format, params object[] args)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        Markup(console, provider, format + Environment.NewLine, args);\n    }\n\n    /// <summary>\n    /// Writes the specified markup, followed by the current line terminator, to the console.\n    /// <para/>\n    /// All interpolation holes which contain a string are automatically escaped.\n    /// </summary>\n    /// <example>\n    /// <code>\n    /// string input = args[0];\n    /// string output = Process(input);\n    /// console.MarkupLineInterpolated(CultureInfo.InvariantCulture, $\"[blue]{input}[/] -> [green]{output}[/]\");\n    /// </code>\n    /// </example>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"provider\">An object that supplies culture-specific formatting information.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    public static void MarkupLineInterpolated(this IAnsiConsole console, IFormatProvider provider, FormattableString value)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        MarkupLine(console, Console.Markup.EscapeInterpolated(provider, value));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Progress.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Creates a new <see cref=\"Progress\"/> instance for the console.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>A <see cref=\"Progress\"/> instance.</returns>\n    public static Progress Progress(this IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new Progress(console);\n    }\n\n    /// <summary>\n    /// Creates a new <see cref=\"Status\"/> instance for the console.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>A <see cref=\"Status\"/> instance.</returns>\n    public static Status Status(this IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new Status(console);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Prompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt to display.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Prompt<T>(this IAnsiConsole console, IPrompt<T> prompt)\n    {\n        ArgumentNullException.ThrowIfNull(prompt);\n\n        return prompt.Show(console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Ask<T>(this IAnsiConsole console, string prompt)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new TextPrompt<T>(prompt).Show(console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"culture\">Specific CultureInfo to use when converting input.</param>\n    /// <returns>The prompt input result.</returns>\n    public static T Ask<T>(this IAnsiConsole console, string prompt, CultureInfo? culture)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        var textPrompt = new TextPrompt<T>(prompt);\n        textPrompt.Culture = culture;\n        return textPrompt.Show(console);\n    }\n\n    /// <summary>\n    /// Displays a prompt with two choices, yes or no.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">Specifies the default answer.</param>\n    /// <returns><c>true</c> if the user selected \"yes\", otherwise <c>false</c>.</returns>\n    public static bool Confirm(this IAnsiConsole console, string prompt, bool defaultValue = true)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new ConfirmationPrompt(prompt)\n        {\n            DefaultValue = defaultValue,\n        }\n        .Show(console);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt to display.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> PromptAsync<T>(this IAnsiConsole console, IPrompt<T> prompt, CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(prompt);\n\n        return prompt.ShowAsync(console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> AskAsync<T>(this IAnsiConsole console, string prompt, CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new TextPrompt<T>(prompt).ShowAsync(console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"culture\">Specific CultureInfo to use when converting input.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    public static Task<T> AskAsync<T>(this IAnsiConsole console, string prompt, CultureInfo? culture, CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        var textPrompt = new TextPrompt<T>(prompt);\n        textPrompt.Culture = culture;\n        return textPrompt.ShowAsync(console, cancellationToken);\n    }\n\n    /// <summary>\n    /// Displays a prompt with two choices, yes or no.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"defaultValue\">Specifies the default answer.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns><c>true</c> if the user selected \"yes\", otherwise <c>false</c>.</returns>\n    public static Task<bool> ConfirmAsync(this IAnsiConsole console, string prompt, bool defaultValue = true, CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new ConfirmationPrompt(prompt)\n        {\n            DefaultValue = defaultValue,\n        }\n        .ShowAsync(console, cancellationToken);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Recording.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Creates a recorder for the specified console.\n    /// </summary>\n    /// <param name=\"console\">The console to record.</param>\n    /// <returns>A recorder for the specified console.</returns>\n    public static Recorder CreateRecorder(this IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new Recorder(console);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Screen.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Switches to an alternate screen buffer if the terminal supports it.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"action\">The action to execute within the alternate screen buffer.</param>\n    public static void AlternateScreen(this IAnsiConsole console, Action action)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        if (!console.Profile.Capabilities.Ansi)\n        {\n            throw new NotSupportedException(\"Alternate buffers are not supported since your terminal does not support ANSI.\");\n        }\n\n        if (!console.Profile.Capabilities.AlternateBuffer)\n        {\n            throw new NotSupportedException(\"Alternate buffers are not supported by your terminal.\");\n        }\n\n        // Switch to alternate screen\n        console.WriteAnsi(w =>\n        {\n            w.EnterAltScreen();\n            w.CursorHome();\n        });\n\n        try\n        {\n            // Execute custom action\n            action();\n        }\n        finally\n        {\n            // Switch back to primary screen\n            console.WriteAnsi(w => w.ExitAltScreen());\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.Write.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Writes the specified string value to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"text\">The text to write.</param>\n    public static void Write(this IAnsiConsole console, string text)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(text);\n\n        console.Write(new Text(text, Style.Plain));\n    }\n\n    /// <summary>\n    /// Writes the specified string value to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"text\">The text to write.</param>\n    /// <param name=\"style\">The text style or <see cref=\"Style.Plain\"/> if <see langword=\"null\"/>.</param>\n    public static void Write(this IAnsiConsole console, string text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(text);\n\n        console.Write(new Text(text, style));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.WriteLine.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Writes an empty line to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    public static void WriteLine(this IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        console.Write(Text.NewLine);\n    }\n\n    /// <summary>\n    /// Writes the specified string value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"text\">The text to write.</param>\n    public static void WriteLine(this IAnsiConsole console, string text)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(text);\n\n        WriteLine(console, text, Style.Plain);\n    }\n\n    /// <summary>\n    /// Writes the specified string value, followed by the current line terminator, to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write to.</param>\n    /// <param name=\"text\">The text to write.</param>\n    /// <param name=\"style\">The text style or <see cref=\"Style.Plain\"/> if <see langword=\"null\"/>.</param>\n    public static void WriteLine(this IAnsiConsole console, string text, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(text);\n\n        console.Write(text + Environment.NewLine, style);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiConsoleExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsole\"/>.\n/// </summary>\npublic static partial class AnsiConsoleExtensions\n{\n    /// <summary>\n    /// Clears the console.\n    /// </summary>\n    /// <param name=\"console\">The console to clear.</param>\n    public static void Clear(this IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        console.Clear(true);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/AnsiWriterExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class AnsiWriterExtensions\n{\n    public static void Write(this AnsiWriter writer, IAnsiConsole console, IRenderable? renderable)\n    {\n        ArgumentNullException.ThrowIfNull(writer);\n        ArgumentNullException.ThrowIfNull(console);\n\n        if (renderable == null)\n        {\n            return;\n        }\n\n        foreach (var segment in renderable.GetSegments(console))\n        {\n            if (segment.IsControlCode)\n            {\n                writer.Write(segment.Text);\n                continue;\n            }\n\n            var parts = segment.Text.NormalizeNewLines().Split(['\\n']);\n            foreach (var (_, _, last, part) in parts.Enumerate())\n            {\n                if (!string.IsNullOrEmpty(part))\n                {\n                    writer.Write(part, segment.Style, segment.Link);\n                }\n\n                if (!last)\n                {\n                    writer.WriteLine();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/CharExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"char\"/>.\n/// </summary>\npublic static partial class CharExtensions\n{\n#if WCWIDTH\n    /// <summary>\n    /// Gets the cell width of a character.\n    /// </summary>\n    /// <param name=\"character\">The character to get the cell width of.</param>\n    /// <returns>The cell width of the character.</returns>\n    public static int GetCellWidth(this char character)\n    {\n        return Cell.GetCellLength(character);\n    }\n#endif\n\n    internal static bool IsDigit(this char character, int min = 0)\n    {\n        return char.IsDigit(character) && character >= (char)min;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/DayOfWeekExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class DayOfWeekExtensions\n{\n    public static string GetAbbreviatedDayName(this DayOfWeek day, CultureInfo culture)\n    {\n        culture ??= CultureInfo.InvariantCulture;\n        return culture.DateTimeFormat\n            .GetAbbreviatedDayName(day)\n            .CapitalizeFirstLetter(culture);\n    }\n\n    public static DayOfWeek GetNextWeekDay(this DayOfWeek day)\n    {\n        var next = (int)day + 1;\n        if (next > (int)DayOfWeek.Saturday)\n        {\n            return DayOfWeek.Sunday;\n        }\n\n        return (DayOfWeek)next;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/DictionaryExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class DictionaryExtensions\n{\n    public static void Deconstruct<T1, T2>(this KeyValuePair<T1, T2> tuple, out T1 key, out T2 value)\n    {\n        key = tuple.Key;\n        value = tuple.Value;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/EnumerableExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class EnumerableExtensions\n{\n    // List.Reverse clashes with IEnumerable<T>.Reverse, so this method only exists\n    // so we won't have to cast List<T> to IEnumerable<T>.\n    public static IEnumerable<T> ReverseEnumerable<T>(this IEnumerable<T> source)\n    {\n        ArgumentNullException.ThrowIfNull(source);\n\n        return source.Reverse();\n    }\n\n    public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)\n    {\n        return !source.Any(predicate);\n    }\n\n    public static IEnumerable<T> Repeat<T>(this IEnumerable<T> source, int count)\n    {\n        while (count-- > 0)\n        {\n            foreach (var item in source)\n            {\n                yield return item;\n            }\n        }\n    }\n\n    public static int IndexOf<T>(this IEnumerable<T> source, T item)\n    {\n        var index = 0;\n        foreach (var candidate in source)\n        {\n            if (Equals(candidate, item))\n            {\n                return index;\n            }\n\n            index++;\n        }\n\n        return -1;\n    }\n\n    public static int GetCount<T>(this IEnumerable<T> source)\n    {\n        if (source is IList<T> list)\n        {\n            return list.Count;\n        }\n\n        if (source is T[] array)\n        {\n            return array.Length;\n        }\n\n        return source.Count();\n    }\n\n    public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)\n    {\n        foreach (var item in source)\n        {\n            action(item);\n        }\n    }\n\n    public static bool AnyTrue(this IEnumerable<bool> source)\n    {\n        return source.Any(b => b);\n    }\n\n    public static IEnumerable<(int Index, bool First, bool Last, T Item)> Enumerate<T>(this IEnumerable<T> source)\n    {\n        ArgumentNullException.ThrowIfNull(source);\n\n        return Enumerate(source.GetEnumerator());\n    }\n\n    public static IEnumerable<(int Index, bool First, bool Last, T Item)> Enumerate<T>(this IEnumerator<T> source)\n    {\n        ArgumentNullException.ThrowIfNull(source);\n\n        var first = true;\n        var last = !source.MoveNext();\n        T current;\n\n        for (var index = 0; !last; index++)\n        {\n            current = source.Current;\n            last = !source.MoveNext();\n            yield return (index, first, last, current);\n            first = false;\n        }\n    }\n\n    public static IEnumerable<TResult> SelectIndex<T, TResult>(this IEnumerable<T> source, Func<T, int, TResult> func)\n    {\n        return source.Select((value, index) => func(value, index));\n    }\n\n#if !NET6_0_OR_GREATER\n    public static IEnumerable<(TFirst First, TSecond Second)> Zip<TFirst, TSecond>(\n        this IEnumerable<TFirst> source, IEnumerable<TSecond> first)\n    {\n        return source.Zip(first, (first, second) => (first, second));\n    }\n#endif\n\n    public static IEnumerable<(TFirst First, TSecond Second, TThird Third)> ZipThree<TFirst, TSecond, TThird>(\n        this IEnumerable<TFirst> first, IEnumerable<TSecond> second, IEnumerable<TThird> third)\n    {\n        return first.Zip(second, (a, b) => (a, b))\n            .Zip(third, (a, b) => (a.a, a.b, b));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/ExceptionExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Exception\"/>.\n/// </summary>\npublic static class ExceptionExtensions\n{\n    /// <summary>\n    /// Gets a <see cref=\"IRenderable\"/> representation of the exception.\n    /// </summary>\n    /// <param name=\"exception\">The exception to format.</param>\n    /// <param name=\"format\">The exception format options.</param>\n    /// <returns>A <see cref=\"IRenderable\"/> representing the exception.</returns>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static IRenderable GetRenderable(this Exception exception, ExceptionFormats format = ExceptionFormats.Default)\n    {\n        ArgumentNullException.ThrowIfNull(exception);\n\n        return GetRenderable(exception, new ExceptionSettings\n        {\n            Format = format,\n        });\n    }\n\n    /// <summary>\n    /// Gets a <see cref=\"IRenderable\"/> representation of the exception.\n    /// </summary>\n    /// <param name=\"exception\">The exception to format.</param>\n    /// <param name=\"settings\">The exception settings.</param>\n    /// <returns>A <see cref=\"IRenderable\"/> representing the exception.</returns>\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    public static IRenderable GetRenderable(this Exception exception, ExceptionSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(exception);\n\n        ArgumentNullException.ThrowIfNull(settings);\n\n        return ExceptionFormatter.Format(exception, settings);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/Int32Extensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class Int32Extensions\n{\n    public static int Clamp(this int value, int min, int max)\n    {\n        if (value <= min)\n        {\n            return min;\n        }\n\n        if (value >= max)\n        {\n            return max;\n        }\n\n        return value;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/ListExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class ListExtensions\n{\n    public static void RemoveLast<T>(this List<T> list)\n    {\n        ArgumentNullException.ThrowIfNull(list);\n\n        if (list.Count > 0)\n        {\n            list.RemoveAt(list.Count - 1);\n        }\n    }\n\n    public static void AddOrReplaceLast<T>(this List<T> list, T item)\n    {\n        ArgumentNullException.ThrowIfNull(list);\n\n        if (list.Count == 0)\n        {\n            list.Add(item);\n        }\n        else\n        {\n            list[list.Count - 1] = item;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/StackExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class StackExtensions\n{\n    public static void PushRange<T>(this Stack<T> stack, IEnumerable<T> source)\n    {\n        ArgumentNullException.ThrowIfNull(stack);\n\n        if (source != null)\n        {\n            foreach (var item in source)\n            {\n                stack.Push(item);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/StringBuilderExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class StringBuilderExtensions\n{\n    public static StringBuilder AppendWithStyle(this StringBuilder builder, Style? style, int? value)\n    {\n        return AppendWithStyle(builder, style, value?.ToString(CultureInfo.InvariantCulture));\n    }\n\n    public static StringBuilder AppendWithStyle(this StringBuilder builder, Style? style, string? value)\n    {\n        value ??= string.Empty;\n\n        if (style != null)\n        {\n            return builder.Append('[')\n            .Append(style.Value.ToMarkup())\n            .Append(']')\n            .Append(value.EscapeMarkup())\n            .Append(\"[/]\");\n        }\n\n        return builder.Append(value);\n    }\n\n    public static void AppendSpan(this StringBuilder builder, ReadOnlySpan<char> span)\n    {\n        // NetStandard 2 lacks the override for StringBuilder to add the span. We'll need to convert the span\n        // to a string for it, but for .NET 6.0 or newer we'll use the override.\n#if NETSTANDARD2_0\n        builder.Append(span.ToString());\n#else\n        builder.Append(span);\n#endif\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/StringExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"string\"/>.\n/// </summary>\npublic static class StringExtensions\n{\n    // Cache whether or not internally normalized line endings\n    // already are normalized. No reason to do yet another replace if it is.\n    private static readonly bool _alreadyNormalized\n        = Environment.NewLine.Equals(\"\\n\", StringComparison.OrdinalIgnoreCase);\n\n    /// <summary>\n    /// Gets the cell width of the specified text.\n    /// </summary>\n    /// <param name=\"text\">The text to get the cell width of.</param>\n    /// <returns>The cell width of the text.</returns>\n    public static int GetCellWidth(this string text)\n    {\n        return Cell.GetCellLength(text);\n    }\n\n    internal static string CapitalizeFirstLetter(this string? text, CultureInfo? culture = null)\n    {\n        if (text == null)\n        {\n            return string.Empty;\n        }\n\n        culture ??= CultureInfo.InvariantCulture;\n\n        if (text.Length > 0 && char.IsLower(text[0]))\n        {\n            text = string.Format(culture, \"{0}{1}\", char.ToUpper(text[0], culture), text.Substring(1));\n        }\n\n        return text;\n    }\n\n    internal static string? RemoveNewLines(this string? text)\n    {\n        return text?.ReplaceExact(\"\\r\\n\", string.Empty)\n            ?.ReplaceExact(\"\\n\", string.Empty);\n    }\n\n    internal static string NormalizeNewLines(this string? text, bool native = false)\n    {\n        text = text?.ReplaceExact(\"\\r\\n\", \"\\n\");\n        text ??= string.Empty;\n\n        if (native && !_alreadyNormalized)\n        {\n            text = text.ReplaceExact(\"\\n\", Environment.NewLine);\n        }\n\n        return text;\n    }\n\n    internal static string[] SplitLines(this string text)\n    {\n        var result = text?.NormalizeNewLines()?.Split(['\\n'], StringSplitOptions.None);\n        return result ?? [];\n    }\n\n    internal static string[] SplitWords(this string word, StringSplitOptions options = StringSplitOptions.None)\n    {\n        var result = new List<string>();\n\n        static string Read(StringBuffer reader, Func<char, bool> criteria)\n        {\n            var buffer = new StringBuilder();\n            while (!reader.Eof)\n            {\n                var current = reader.Peek();\n                if (!criteria(current))\n                {\n                    break;\n                }\n\n                buffer.Append(reader.Read());\n            }\n\n            return buffer.ToString();\n        }\n\n        using (var reader = new StringBuffer(word))\n        {\n            while (!reader.Eof)\n            {\n                var current = reader.Peek();\n                if (char.IsWhiteSpace(current))\n                {\n                    var x = Read(reader, c => char.IsWhiteSpace(c));\n                    if (options != StringSplitOptions.RemoveEmptyEntries)\n                    {\n                        result.Add(x);\n                    }\n                }\n                else\n                {\n                    result.Add(Read(reader, c => !char.IsWhiteSpace(c)));\n                }\n            }\n        }\n\n        return result.ToArray();\n    }\n\n    internal static string Repeat(this string text, int count)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        if (count <= 0)\n        {\n            return string.Empty;\n        }\n\n        if (count == 1)\n        {\n            return text;\n        }\n\n        return string.Concat(Enumerable.Repeat(text, count));\n    }\n\n    internal static string ReplaceExact(this string text, string oldValue, string? newValue)\n    {\n#if NETSTANDARD2_0\n        return text.Replace(oldValue, newValue);\n#else\n        return text.Replace(oldValue, newValue, StringComparison.Ordinal);\n#endif\n    }\n\n    internal static bool ContainsExact(this string text, string value)\n    {\n#if NETSTANDARD2_0\n        return text.Contains(value);\n#else\n        return text.Contains(value, StringComparison.Ordinal);\n#endif\n    }\n\n#if NETSTANDARD2_0\n    internal static bool Contains(this string target, string value, System.StringComparison comparisonType)\n    {\n        return target.IndexOf(value, comparisonType) != -1;\n    }\n#endif\n\n    /// <summary>\n    /// \"Masks\" every character in a string.\n    /// </summary>\n    /// <param name=\"value\">String value to mask.</param>\n    /// <param name=\"mask\">Character to use for masking.</param>\n    /// <returns>Masked string.</returns>\n    public static string Mask(this string value, char? mask)\n    {\n        if (mask is null)\n        {\n            return string.Empty;\n        }\n\n        return new string(mask.Value, value.Length);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Extensions/Bcl/TextWriterExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class TextWriterExtensions\n{\n    public static bool IsStandardOut(this TextWriter writer)\n    {\n        try\n        {\n            return writer == System.Console.Out;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n\n    public static bool IsStandardError(this TextWriter writer)\n    {\n        try\n        {\n            return writer == System.Console.Error;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.AssemblyInfo.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable RS0016\nusing System.Security;\n#if NET9_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n\n[assembly: TypeForwardedTo(typeof(System.Threading.Lock))]\n#endif\n\n#if !SOURCE_GENERATOR\n[assembly: SecurityTransparent]\n#endif\n#pragma warning restore RS0016\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.Lock.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if (NETSTANDARD2_1_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER) && !NET9_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n/// <summary>\n/// A backport of .NET 9.0+'s System.Threading.Lock. Provides a way to get mutual exclusion in regions of code between different threads.\n/// A lock may be held by one thread at a time.\n/// </summary>\n/// <remarks>\n/// Threads that cannot immediately enter the lock may wait for the lock to be exited or until a specified timeout. A thread\n/// that holds a lock may enter the lock repeatedly without exiting it, such as recursively, in which case the thread should\n/// eventually exit the lock the same number of times to fully exit the lock and allow other threads to enter the lock.\n/// </remarks>\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nsealed class Lock\n{\n#pragma warning disable CS9216 // A value of type 'System.Threading.Lock' converted to a different type will use likely unintended monitor-based locking in 'lock' statement.\n    /// <summary>\n    /// Determines whether the current thread holds this lock.\n    /// </summary>\n    /// <returns>\n    /// true if the current thread holds this lock; otherwise, false.\n    /// </returns>\n#pragma warning disable SA1623 // Property summary documentation should match accessors\n    public bool IsHeldByCurrentThread => Monitor.IsEntered(this);\n#pragma warning restore SA1623 // Property summary documentation should match accessors\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Enter(object)\"/>\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Enter() => Monitor.Enter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter() => Monitor.TryEnter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </returns>\n    /// <param name=\"timeout\">A <see cref=\"TimeSpan\" /> representing the amount of time to wait for the lock.\n    /// A value of -1 millisecond specifies an infinite wait.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">The value of timeout in milliseconds is negative and is not equal to <see cref=\"Timeout.Infinite\"/>\n    /// (-1 millisecond), or is greater than <see cref=\"int.MaxValue\"/>.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter(TimeSpan timeout) => Monitor.TryEnter(this, timeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </returns>\n    /// <param name=\"millisecondsTimeout\">The number of milliseconds to wait for the lock.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">millisecondsTimeout is negative, and not equal to <see cref=\"Timeout.Infinite\"/>.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter(int millisecondsTimeout) => Monitor.TryEnter(this, millisecondsTimeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Exit(object)\"/>\n    /// </summary>\n    /// <exception cref=\"SynchronizationLockException\">The current thread does not own the lock for the specified object.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Exit() => Monitor.Exit(this);\n#pragma warning restore CS9216 // A value of type 'System.Threading.Lock' converted to a different type will use likely unintended monitor-based locking in 'lock' statement.\n\n    /// <summary>\n    /// Enters the lock and returns a <see cref=\"Scope\"/> that may be disposed to exit the lock. Once the method returns,\n    /// the calling thread would be the only thread that holds the lock. This method is intended to be used along with a\n    /// language construct that would automatically dispose the <see cref=\"Scope\"/>, such as with the C# using statement.\n    /// </summary>\n    /// <returns>\n    /// A <see cref=\"Scope\"/> that may be disposed to exit the lock.\n    /// </returns>\n    /// <remarks>\n    /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is\n    /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock, such as by\n    /// disposing the returned <see cref=\"Scope\"/>, as many times as it had entered the lock to fully exit the lock and\n    /// allow other threads to enter the lock.\n    /// </remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public Scope EnterScope()\n    {\n        this.Enter();\n        return new Scope(this);\n    }\n\n    /// <summary>\n    /// A disposable structure that is returned by <see cref=\"EnterScope()\"/>, which when disposed, exits the lock.\n    /// </summary>\n    public ref struct Scope(Lock @lock)\n    {\n        /// <summary>\n        /// Exits the lock.\n        /// </summary>\n        /// <remarks>\n        /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The\n        /// calling thread should ensure that each enter is matched with an exit.\n        /// </remarks>\n        /// <exception cref=\"SynchronizationLockException\">\n        /// The calling thread does not hold the lock.\n        /// </exception>\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public readonly void Dispose() => @lock.Exit();\n    }\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n#pragma warning restore SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.LockFactory.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n#endif\n#if NET9_0_OR_GREATER\nusing FrameworkNamespace = System.Threading;\n#endif\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace Backport.System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n#if NET9_0_OR_GREATER\n/// <summary>\n/// Represents a factory class for backporting .NET 9.0's System.Threading.Lock to prior framework versions.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use <see cref=\"FrameworkNamespace.Lock\"/>.\n/// </summary>\npublic static class LockFactory\n{\n/// <summary>\n/// Creates a new instance of <see cref=\"FrameworkNamespace.Lock\"/>. On frameworks prior to .NET 9.0, a different backported class is returned.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use <see cref=\"FrameworkNamespace.Lock\"/>.\n/// </summary>\n/// <returns>An instance of <see cref=\"FrameworkNamespace.Lock\"/>.</returns>\n[MethodImpl(MethodImplOptions.AggressiveInlining)]\npublic static FrameworkNamespace.Lock Create() => new();\n}\n#else\n/// <summary>\n/// Represents a factory class for backporting .NET 9.0's System.Threading.Lock to prior framework versions.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use System.Threading.Lock.\n/// </summary>\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nstatic class LockFactory\n{\n    /// <summary>\n    /// Creates a new instance of <see cref=\"Lock\"/>. On .NET 9.0 or later, an instance of System.Threading.Lock is returned.\n    /// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use System.Threading.Lock.\n    /// </summary>\n    /// <returns>An instance of <see cref=\"Lock\"/>.</returns>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public static Lock Create() => new();\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.ThreadAbortableLock.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if !NET9_0_OR_GREATER\nusing System;\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n#endif\nusing System.Threading;\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace Backport.System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n/// <summary>\n/// A backport of .NET 9.0+'s System.Threading.Lock. Provides a way to get mutual exclusion in regions of code between different threads.\n/// A lock may be held by one thread at a time. Do not try and create an instance of this class; use <see cref=\"LockFactory.Create()\"/>.\n/// </summary>\n/// <remarks>\n/// Threads that cannot immediately enter the lock may wait for the lock to be exited or until a specified timeout. A thread\n/// that holds a lock may enter the lock repeatedly without exiting it, such as recursively, in which case the thread should\n/// eventually exit the lock the same number of times to fully exit the lock and allow other threads to enter the lock.\n/// </remarks>\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nsealed class Lock\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n{\n#pragma warning disable SA1642 // ConstructorSummaryDocumentationMustBeginWithStandardText\n    /// <summary>\n    /// Use <see cref=\"LockFactory.Create()\"/> instead.\n    /// </summary>\n#pragma warning restore SA1642 // ConstructorSummaryDocumentationMustBeginWithStandardText\n    internal Lock()\n    {\n    }\n\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    /// <summary>\n    /// Determines whether the current thread holds this lock.\n    /// </summary>\n    /// <returns>\n    /// true if the current thread holds this lock; otherwise, false.\n    /// </returns>\n    /// <exception cref=\"ArgumentNullException\"><inheritdoc cref=\"ArgumentNullException\"/></exception>\n#pragma warning disable SA1623 // Property summary documentation should match accessors\n    public bool IsHeldByCurrentThread => Monitor.IsEntered(this);\n#pragma warning restore SA1623 // Property summary documentation should match accessors\n#endif\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Enter(object)\"/>\n    /// </summary>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public void Enter() => Monitor.Enter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </returns>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter() => Monitor.TryEnter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </returns>\n    /// <param name=\"timeout\">A <see cref=\"TimeSpan\" /> representing the amount of time to wait for the lock.\n    /// A value of -1 millisecond specifies an infinite wait.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">The value of timeout in milliseconds is negative and is not equal to <see cref=\"Timeout.Infinite\"/>\n    /// (-1 millisecond), or is greater than <see cref=\"int.MaxValue\"/>.</exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter(TimeSpan timeout) => Monitor.TryEnter(this, timeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </returns>\n    /// <param name=\"millisecondsTimeout\">The number of milliseconds to wait for the lock.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">millisecondsTimeout is negative, and not equal to <see cref=\"Timeout.Infinite\"/>.</exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter(int millisecondsTimeout) => Monitor.TryEnter(this, millisecondsTimeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Exit(object)\"/>\n    /// </summary>\n    /// <exception cref=\"SynchronizationLockException\"><inheritdoc cref=\"Monitor.Exit(object)\"/></exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public void Exit() => Monitor.Exit(this);\n\n    /// <summary>\n    /// Enters the lock and returns a <see cref=\"Scope\"/> that may be disposed to exit the lock. Once the method returns,\n    /// the calling thread would be the only thread that holds the lock. This method is intended to be used along with a\n    /// language construct that would automatically dispose the <see cref=\"Scope\"/>, such as with the C# using statement.\n    /// </summary>\n    /// <returns>\n    /// A <see cref=\"Scope\"/> that may be disposed to exit the lock.\n    /// </returns>\n    /// <remarks>\n    /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is\n    /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock, such as by\n    /// disposing the returned <see cref=\"Scope\"/>, as many times as it had entered the lock to fully exit the lock and\n    /// allow other threads to enter the lock.\n    /// </remarks>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n#if (NET40_OR_GREATER || NETSTANDARD2_0_OR_GREATER) && !NET5_0_OR_GREATER\n    [Obsolete(\"This method is a best-effort at hardening against thread aborts, but can theoretically retain lock on pre-.NET 5.0. Use with caution.\")]\n    public Scope EnterScope()\n    {\n        bool lockTaken = false;\n        try\n        {\n            Monitor.Enter(this, ref lockTaken);\n            return new Scope(this);\n        }\n        catch (ThreadAbortException)\n        {\n            if (lockTaken)\n            {\n                Monitor.Exit(this);\n            }\n\n            throw;\n        }\n    }\n#else\n    public Scope EnterScope()\n    {\n        Monitor.Enter(this);\n        return new Scope(this);\n    }\n#endif\n\n    /// <summary>\n    /// A disposable structure that is returned by <see cref=\"EnterScope()\"/>, which when disposed, exits the lock.\n    /// </summary>\n    public ref struct Scope(Lock @lock)\n    {\n        /// <summary>\n        /// Exits the lock.\n        /// </summary>\n        /// <remarks>\n        /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The\n        /// calling thread should ensure that each enter is matched with an exit.\n        /// </remarks>\n        /// <exception cref=\"SynchronizationLockException\">\n        /// The calling thread does not hold the lock.\n        /// </exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n        public readonly void Dispose() => @lock.Exit();\n    }\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n#pragma warning restore SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/Color.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Spectre.Console\n{\n    /// <summary>\n    /// Represents a color.\n    /// </summary>\n    public partial struct Color\n    {\n        internal Color(byte number, byte red, byte green, byte blue, bool isDefault = false)\n            : this(red, green, blue)\n        {\n            Number = number;\n            IsDefault = isDefault;\n        }\n        \n        /// <summary>\n        /// Gets the color \"Black\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Black { get; } = new Color(0, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Maroon\" (RGB 128,0,0).\n        /// </summary>\n        public static Color Maroon { get; } = new Color(1, 128, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Green\" (RGB 0,128,0).\n        /// </summary>\n        public static Color Green { get; } = new Color(2, 0, 128, 0);\n        \n        /// <summary>\n        /// Gets the color \"Olive\" (RGB 128,128,0).\n        /// </summary>\n        public static Color Olive { get; } = new Color(3, 128, 128, 0);\n        \n        /// <summary>\n        /// Gets the color \"Navy\" (RGB 0,0,128).\n        /// </summary>\n        public static Color Navy { get; } = new Color(4, 0, 0, 128);\n        \n        /// <summary>\n        /// Gets the color \"Purple\" (RGB 128,0,128).\n        /// </summary>\n        public static Color Purple { get; } = new Color(5, 128, 0, 128);\n        \n        /// <summary>\n        /// Gets the color \"Teal\" (RGB 0,128,128).\n        /// </summary>\n        public static Color Teal { get; } = new Color(6, 0, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Silver\" (RGB 192,192,192).\n        /// </summary>\n        public static Color Silver { get; } = new Color(7, 192, 192, 192);\n        \n        /// <summary>\n        /// Gets the color \"Grey\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey { get; } = new Color(8, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Gray\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray { get; } = new Color(8, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Red\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red { get; } = new Color(9, 255, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Lime\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Lime { get; } = new Color(10, 0, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"Yellow\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow { get; } = new Color(11, 255, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"Blue\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue { get; } = new Color(12, 0, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Fuchsia\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Fuchsia { get; } = new Color(13, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Magenta\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta { get; } = new Color(13, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Aqua\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Aqua { get; } = new Color(14, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Cyan\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan { get; } = new Color(14, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"White\" (RGB 255,255,255).\n        /// </summary>\n        public static Color White { get; } = new Color(15, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Grey0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Grey0 { get; } = new Color(16, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Gray0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Gray0 { get; } = new Color(16, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"NavyBlue\" (RGB 0,0,95).\n        /// </summary>\n        public static Color NavyBlue { get; } = new Color(17, 0, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkBlue\" (RGB 0,0,135).\n        /// </summary>\n        public static Color DarkBlue { get; } = new Color(18, 0, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Blue3\" (RGB 0,0,175).\n        /// </summary>\n        public static Color Blue3 { get; } = new Color(19, 0, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Blue3_1\" (RGB 0,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Blue3_1 { get; } = new Color(20, 0, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Blue1\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue1 { get; } = new Color(21, 0, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkGreen\" (RGB 0,95,0).\n        /// </summary>\n        public static Color DarkGreen { get; } = new Color(22, 0, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4\" (RGB 0,95,95).\n        /// </summary>\n        public static Color DeepSkyBlue4 { get; } = new Color(23, 0, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_1\" (RGB 0,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_1 { get; } = new Color(24, 0, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_2\" (RGB 0,95,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_2 { get; } = new Color(25, 0, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue3\" (RGB 0,95,215).\n        /// </summary>\n        public static Color DodgerBlue3 { get; } = new Color(26, 0, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue2\" (RGB 0,95,255).\n        /// </summary>\n        public static Color DodgerBlue2 { get; } = new Color(27, 0, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green4\" (RGB 0,135,0).\n        /// </summary>\n        public static Color Green4 { get; } = new Color(28, 0, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen4\" (RGB 0,135,95).\n        /// </summary>\n        public static Color SpringGreen4 { get; } = new Color(29, 0, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"Turquoise4\" (RGB 0,135,135).\n        /// </summary>\n        public static Color Turquoise4 { get; } = new Color(30, 0, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3\" (RGB 0,135,175).\n        /// </summary>\n        public static Color DeepSkyBlue3 { get; } = new Color(31, 0, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3_1\" (RGB 0,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue3_1 { get; } = new Color(32, 0, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue1\" (RGB 0,135,255).\n        /// </summary>\n        public static Color DodgerBlue1 { get; } = new Color(33, 0, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green3\" (RGB 0,175,0).\n        /// </summary>\n        public static Color Green3 { get; } = new Color(34, 0, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen3\" (RGB 0,175,95).\n        /// </summary>\n        public static Color SpringGreen3 { get; } = new Color(35, 0, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkCyan\" (RGB 0,175,135).\n        /// </summary>\n        public static Color DarkCyan { get; } = new Color(36, 0, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSeaGreen\" (RGB 0,175,175).\n        /// </summary>\n        public static Color LightSeaGreen { get; } = new Color(37, 0, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue2\" (RGB 0,175,215).\n        /// </summary>\n        public static Color DeepSkyBlue2 { get; } = new Color(38, 0, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue1\" (RGB 0,175,255).\n        /// </summary>\n        public static Color DeepSkyBlue1 { get; } = new Color(39, 0, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green3_1\" (RGB 0,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Green3_1 { get; } = new Color(40, 0, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen3_1\" (RGB 0,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen3_1 { get; } = new Color(41, 0, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen2\" (RGB 0,215,135).\n        /// </summary>\n        public static Color SpringGreen2 { get; } = new Color(42, 0, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"Cyan3\" (RGB 0,215,175).\n        /// </summary>\n        public static Color Cyan3 { get; } = new Color(43, 0, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkTurquoise\" (RGB 0,215,215).\n        /// </summary>\n        public static Color DarkTurquoise { get; } = new Color(44, 0, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Turquoise2\" (RGB 0,215,255).\n        /// </summary>\n        public static Color Turquoise2 { get; } = new Color(45, 0, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green1\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Green1 { get; } = new Color(46, 0, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen2_1\" (RGB 0,255,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen2_1 { get; } = new Color(47, 0, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen1\" (RGB 0,255,135).\n        /// </summary>\n        public static Color SpringGreen1 { get; } = new Color(48, 0, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumSpringGreen\" (RGB 0,255,175).\n        /// </summary>\n        public static Color MediumSpringGreen { get; } = new Color(49, 0, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Cyan2\" (RGB 0,255,215).\n        /// </summary>\n        public static Color Cyan2 { get; } = new Color(50, 0, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"Cyan1\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan1 { get; } = new Color(51, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkRed\" (RGB 95,0,0).\n        /// </summary>\n        public static Color DarkRed { get; } = new Color(52, 95, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4\" (RGB 95,0,95).\n        /// </summary>\n        public static Color DeepPink4 { get; } = new Color(53, 95, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"Purple4\" (RGB 95,0,135).\n        /// </summary>\n        public static Color Purple4 { get; } = new Color(54, 95, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Purple4_1\" (RGB 95,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple4_1 { get; } = new Color(55, 95, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Purple3\" (RGB 95,0,215).\n        /// </summary>\n        public static Color Purple3 { get; } = new Color(56, 95, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"BlueViolet\" (RGB 95,0,255).\n        /// </summary>\n        public static Color BlueViolet { get; } = new Color(57, 95, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange4\" (RGB 95,95,0).\n        /// </summary>\n        public static Color Orange4 { get; } = new Color(58, 95, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"Grey37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Grey37 { get; } = new Color(59, 95, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"Gray37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Gray37 { get; } = new Color(59, 95, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple4\" (RGB 95,95,135).\n        /// </summary>\n        public static Color MediumPurple4 { get; } = new Color(60, 95, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue3\" (RGB 95,95,175).\n        /// </summary>\n        public static Color SlateBlue3 { get; } = new Color(61, 95, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue3_1\" (RGB 95,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SlateBlue3_1 { get; } = new Color(62, 95, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"RoyalBlue1\" (RGB 95,95,255).\n        /// </summary>\n        public static Color RoyalBlue1 { get; } = new Color(63, 95, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse4\" (RGB 95,135,0).\n        /// </summary>\n        public static Color Chartreuse4 { get; } = new Color(64, 95, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4\" (RGB 95,135,95).\n        /// </summary>\n        public static Color DarkSeaGreen4 { get; } = new Color(65, 95, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleTurquoise4\" (RGB 95,135,135).\n        /// </summary>\n        public static Color PaleTurquoise4 { get; } = new Color(66, 95, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue\" (RGB 95,135,175).\n        /// </summary>\n        public static Color SteelBlue { get; } = new Color(67, 95, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue3\" (RGB 95,135,215).\n        /// </summary>\n        public static Color SteelBlue3 { get; } = new Color(68, 95, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"CornflowerBlue\" (RGB 95,135,255).\n        /// </summary>\n        public static Color CornflowerBlue { get; } = new Color(69, 95, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse3\" (RGB 95,175,0).\n        /// </summary>\n        public static Color Chartreuse3 { get; } = new Color(70, 95, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4_1\" (RGB 95,175,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen4_1 { get; } = new Color(71, 95, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"CadetBlue\" (RGB 95,175,135).\n        /// </summary>\n        public static Color CadetBlue { get; } = new Color(72, 95, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"CadetBlue_1\" (RGB 95,175,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color CadetBlue_1 { get; } = new Color(73, 95, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue3\" (RGB 95,175,215).\n        /// </summary>\n        public static Color SkyBlue3 { get; } = new Color(74, 95, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue1\" (RGB 95,175,255).\n        /// </summary>\n        public static Color SteelBlue1 { get; } = new Color(75, 95, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse3_1\" (RGB 95,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse3_1 { get; } = new Color(76, 95, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen3\" (RGB 95,215,95).\n        /// </summary>\n        public static Color PaleGreen3 { get; } = new Color(77, 95, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen3\" (RGB 95,215,135).\n        /// </summary>\n        public static Color SeaGreen3 { get; } = new Color(78, 95, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine3\" (RGB 95,215,175).\n        /// </summary>\n        public static Color Aquamarine3 { get; } = new Color(79, 95, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumTurquoise\" (RGB 95,215,215).\n        /// </summary>\n        public static Color MediumTurquoise { get; } = new Color(80, 95, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue1_1\" (RGB 95,215,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SteelBlue1_1 { get; } = new Color(81, 95, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse2\" (RGB 95,255,0).\n        /// </summary>\n        public static Color Chartreuse2 { get; } = new Color(82, 95, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen2\" (RGB 95,255,95).\n        /// </summary>\n        public static Color SeaGreen2 { get; } = new Color(83, 95, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen1\" (RGB 95,255,135).\n        /// </summary>\n        public static Color SeaGreen1 { get; } = new Color(84, 95, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen1_1\" (RGB 95,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SeaGreen1_1 { get; } = new Color(85, 95, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine1\" (RGB 95,255,215).\n        /// </summary>\n        public static Color Aquamarine1 { get; } = new Color(86, 95, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray2\" (RGB 95,255,255).\n        /// </summary>\n        public static Color DarkSlateGray2 { get; } = new Color(87, 95, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkRed_1\" (RGB 135,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkRed_1 { get; } = new Color(88, 135, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4_1\" (RGB 135,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_1 { get; } = new Color(89, 135, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkMagenta\" (RGB 135,0,135).\n        /// </summary>\n        public static Color DarkMagenta { get; } = new Color(90, 135, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkMagenta_1\" (RGB 135,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkMagenta_1 { get; } = new Color(91, 135, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkViolet\" (RGB 135,0,215).\n        /// </summary>\n        public static Color DarkViolet { get; } = new Color(92, 135, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Purple_1\" (RGB 135,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_1 { get; } = new Color(93, 135, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange4_1\" (RGB 135,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Orange4_1 { get; } = new Color(94, 135, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightPink4\" (RGB 135,95,95).\n        /// </summary>\n        public static Color LightPink4 { get; } = new Color(95, 135, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"Plum4\" (RGB 135,95,135).\n        /// </summary>\n        public static Color Plum4 { get; } = new Color(96, 135, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple3\" (RGB 135,95,175).\n        /// </summary>\n        public static Color MediumPurple3 { get; } = new Color(97, 135, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple3_1\" (RGB 135,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple3_1 { get; } = new Color(98, 135, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue1\" (RGB 135,95,255).\n        /// </summary>\n        public static Color SlateBlue1 { get; } = new Color(99, 135, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow4\" (RGB 135,135,0).\n        /// </summary>\n        public static Color Yellow4 { get; } = new Color(100, 135, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"Wheat4\" (RGB 135,135,95).\n        /// </summary>\n        public static Color Wheat4 { get; } = new Color(101, 135, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"Grey53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Grey53 { get; } = new Color(102, 135, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Gray53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Gray53 { get; } = new Color(102, 135, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSlateGrey\" (RGB 135,135,175).\n        /// </summary>\n        public static Color LightSlateGrey { get; } = new Color(103, 135, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple\" (RGB 135,135,215).\n        /// </summary>\n        public static Color MediumPurple { get; } = new Color(104, 135, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSlateBlue\" (RGB 135,135,255).\n        /// </summary>\n        public static Color LightSlateBlue { get; } = new Color(105, 135, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow4_1\" (RGB 135,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow4_1 { get; } = new Color(106, 135, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3\" (RGB 135,175,95).\n        /// </summary>\n        public static Color DarkOliveGreen3 { get; } = new Color(107, 135, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen\" (RGB 135,175,135).\n        /// </summary>\n        public static Color DarkSeaGreen { get; } = new Color(108, 135, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue3\" (RGB 135,175,175).\n        /// </summary>\n        public static Color LightSkyBlue3 { get; } = new Color(109, 135, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue3_1\" (RGB 135,175,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSkyBlue3_1 { get; } = new Color(110, 135, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue2\" (RGB 135,175,255).\n        /// </summary>\n        public static Color SkyBlue2 { get; } = new Color(111, 135, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse2_1\" (RGB 135,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse2_1 { get; } = new Color(112, 135, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_1\" (RGB 135,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_1 { get; } = new Color(113, 135, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen3_1\" (RGB 135,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen3_1 { get; } = new Color(114, 135, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3\" (RGB 135,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen3 { get; } = new Color(115, 135, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray3\" (RGB 135,215,215).\n        /// </summary>\n        public static Color DarkSlateGray3 { get; } = new Color(116, 135, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue1\" (RGB 135,215,255).\n        /// </summary>\n        public static Color SkyBlue1 { get; } = new Color(117, 135, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse1\" (RGB 135,255,0).\n        /// </summary>\n        public static Color Chartreuse1 { get; } = new Color(118, 135, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGreen\" (RGB 135,255,95).\n        /// </summary>\n        public static Color LightGreen { get; } = new Color(119, 135, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGreen_1\" (RGB 135,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGreen_1 { get; } = new Color(120, 135, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen1\" (RGB 135,255,175).\n        /// </summary>\n        public static Color PaleGreen1 { get; } = new Color(121, 135, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine1_1\" (RGB 135,255,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Aquamarine1_1 { get; } = new Color(122, 135, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray1\" (RGB 135,255,255).\n        /// </summary>\n        public static Color DarkSlateGray1 { get; } = new Color(123, 135, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red3\" (RGB 175,0,0).\n        /// </summary>\n        public static Color Red3 { get; } = new Color(124, 175, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4_2\" (RGB 175,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_2 { get; } = new Color(125, 175, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"MediumVioletRed\" (RGB 175,0,135).\n        /// </summary>\n        public static Color MediumVioletRed { get; } = new Color(126, 175, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3\" (RGB 175,0,175).\n        /// </summary>\n        public static Color Magenta3 { get; } = new Color(127, 175, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkViolet_1\" (RGB 175,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkViolet_1 { get; } = new Color(128, 175, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Purple_2\" (RGB 175,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_2 { get; } = new Color(129, 175, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange3\" (RGB 175,95,0).\n        /// </summary>\n        public static Color DarkOrange3 { get; } = new Color(130, 175, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed\" (RGB 175,95,95).\n        /// </summary>\n        public static Color IndianRed { get; } = new Color(131, 175, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"HotPink3\" (RGB 175,95,135).\n        /// </summary>\n        public static Color HotPink3 { get; } = new Color(132, 175, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid3\" (RGB 175,95,175).\n        /// </summary>\n        public static Color MediumOrchid3 { get; } = new Color(133, 175, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid\" (RGB 175,95,215).\n        /// </summary>\n        public static Color MediumOrchid { get; } = new Color(134, 175, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple2\" (RGB 175,95,255).\n        /// </summary>\n        public static Color MediumPurple2 { get; } = new Color(135, 175, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkGoldenrod\" (RGB 175,135,0).\n        /// </summary>\n        public static Color DarkGoldenrod { get; } = new Color(136, 175, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon3\" (RGB 175,135,95).\n        /// </summary>\n        public static Color LightSalmon3 { get; } = new Color(137, 175, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"RosyBrown\" (RGB 175,135,135).\n        /// </summary>\n        public static Color RosyBrown { get; } = new Color(138, 175, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Grey63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Grey63 { get; } = new Color(139, 175, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Gray63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Gray63 { get; } = new Color(139, 175, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple2_1\" (RGB 175,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple2_1 { get; } = new Color(140, 175, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple1\" (RGB 175,135,255).\n        /// </summary>\n        public static Color MediumPurple1 { get; } = new Color(141, 175, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold3\" (RGB 175,175,0).\n        /// </summary>\n        public static Color Gold3 { get; } = new Color(142, 175, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkKhaki\" (RGB 175,175,95).\n        /// </summary>\n        public static Color DarkKhaki { get; } = new Color(143, 175, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"NavajoWhite3\" (RGB 175,175,135).\n        /// </summary>\n        public static Color NavajoWhite3 { get; } = new Color(144, 175, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"Grey69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Grey69 { get; } = new Color(145, 175, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Gray69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Gray69 { get; } = new Color(145, 175, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue3\" (RGB 175,175,215).\n        /// </summary>\n        public static Color LightSteelBlue3 { get; } = new Color(146, 175, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue\" (RGB 175,175,255).\n        /// </summary>\n        public static Color LightSteelBlue { get; } = new Color(147, 175, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow3\" (RGB 175,215,0).\n        /// </summary>\n        public static Color Yellow3 { get; } = new Color(148, 175, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_2\" (RGB 175,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_2 { get; } = new Color(149, 175, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3_1\" (RGB 175,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen3_1 { get; } = new Color(150, 175, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2\" (RGB 175,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen2 { get; } = new Color(151, 175, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightCyan3\" (RGB 175,215,215).\n        /// </summary>\n        public static Color LightCyan3 { get; } = new Color(152, 175, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue1\" (RGB 175,215,255).\n        /// </summary>\n        public static Color LightSkyBlue1 { get; } = new Color(153, 175, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"GreenYellow\" (RGB 175,255,0).\n        /// </summary>\n        public static Color GreenYellow { get; } = new Color(154, 175, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen2\" (RGB 175,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen2 { get; } = new Color(155, 175, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen1_1\" (RGB 175,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen1_1 { get; } = new Color(156, 175, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2_1\" (RGB 175,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen2_1 { get; } = new Color(157, 175, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1\" (RGB 175,255,215).\n        /// </summary>\n        public static Color DarkSeaGreen1 { get; } = new Color(158, 175, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"PaleTurquoise1\" (RGB 175,255,255).\n        /// </summary>\n        public static Color PaleTurquoise1 { get; } = new Color(159, 175, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red3_1\" (RGB 215,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Red3_1 { get; } = new Color(160, 215, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink3\" (RGB 215,0,95).\n        /// </summary>\n        public static Color DeepPink3 { get; } = new Color(161, 215, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink3_1\" (RGB 215,0,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink3_1 { get; } = new Color(162, 215, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3_1\" (RGB 215,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_1 { get; } = new Color(163, 215, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3_2\" (RGB 215,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_2 { get; } = new Color(164, 215, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Magenta2\" (RGB 215,0,255).\n        /// </summary>\n        public static Color Magenta2 { get; } = new Color(165, 215, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange3_1\" (RGB 215,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOrange3_1 { get; } = new Color(166, 215, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed_1\" (RGB 215,95,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed_1 { get; } = new Color(167, 215, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"HotPink3_1\" (RGB 215,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink3_1 { get; } = new Color(168, 215, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"HotPink2\" (RGB 215,95,175).\n        /// </summary>\n        public static Color HotPink2 { get; } = new Color(169, 215, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"Orchid\" (RGB 215,95,215).\n        /// </summary>\n        public static Color Orchid { get; } = new Color(170, 215, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid1\" (RGB 215,95,255).\n        /// </summary>\n        public static Color MediumOrchid1 { get; } = new Color(171, 215, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange3\" (RGB 215,135,0).\n        /// </summary>\n        public static Color Orange3 { get; } = new Color(172, 215, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon3_1\" (RGB 215,135,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSalmon3_1 { get; } = new Color(173, 215, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightPink3\" (RGB 215,135,135).\n        /// </summary>\n        public static Color LightPink3 { get; } = new Color(174, 215, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Pink3\" (RGB 215,135,175).\n        /// </summary>\n        public static Color Pink3 { get; } = new Color(175, 215, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Plum3\" (RGB 215,135,215).\n        /// </summary>\n        public static Color Plum3 { get; } = new Color(176, 215, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"Violet\" (RGB 215,135,255).\n        /// </summary>\n        public static Color Violet { get; } = new Color(177, 215, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold3_1\" (RGB 215,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Gold3_1 { get; } = new Color(178, 215, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod3\" (RGB 215,175,95).\n        /// </summary>\n        public static Color LightGoldenrod3 { get; } = new Color(179, 215, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"Tan\" (RGB 215,175,135).\n        /// </summary>\n        public static Color Tan { get; } = new Color(180, 215, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"MistyRose3\" (RGB 215,175,175).\n        /// </summary>\n        public static Color MistyRose3 { get; } = new Color(181, 215, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Thistle3\" (RGB 215,175,215).\n        /// </summary>\n        public static Color Thistle3 { get; } = new Color(182, 215, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"Plum2\" (RGB 215,175,255).\n        /// </summary>\n        public static Color Plum2 { get; } = new Color(183, 215, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow3_1\" (RGB 215,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow3_1 { get; } = new Color(184, 215, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"Khaki3\" (RGB 215,215,95).\n        /// </summary>\n        public static Color Khaki3 { get; } = new Color(185, 215, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2\" (RGB 215,215,135).\n        /// </summary>\n        public static Color LightGoldenrod2 { get; } = new Color(186, 215, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightYellow3\" (RGB 215,215,175).\n        /// </summary>\n        public static Color LightYellow3 { get; } = new Color(187, 215, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"Grey84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Grey84 { get; } = new Color(188, 215, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Gray84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Gray84 { get; } = new Color(188, 215, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue1\" (RGB 215,215,255).\n        /// </summary>\n        public static Color LightSteelBlue1 { get; } = new Color(189, 215, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow2\" (RGB 215,255,0).\n        /// </summary>\n        public static Color Yellow2 { get; } = new Color(190, 215, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1\" (RGB 215,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen1 { get; } = new Color(191, 215, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1_1\" (RGB 215,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen1_1 { get; } = new Color(192, 215, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1_1\" (RGB 215,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen1_1 { get; } = new Color(193, 215, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Honeydew2\" (RGB 215,255,215).\n        /// </summary>\n        public static Color Honeydew2 { get; } = new Color(194, 215, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightCyan1\" (RGB 215,255,255).\n        /// </summary>\n        public static Color LightCyan1 { get; } = new Color(195, 215, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red1\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red1 { get; } = new Color(196, 255, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink2\" (RGB 255,0,95).\n        /// </summary>\n        public static Color DeepPink2 { get; } = new Color(197, 255, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink1\" (RGB 255,0,135).\n        /// </summary>\n        public static Color DeepPink1 { get; } = new Color(198, 255, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink1_1\" (RGB 255,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink1_1 { get; } = new Color(199, 255, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Magenta2_1\" (RGB 255,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta2_1 { get; } = new Color(200, 255, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Magenta1\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta1 { get; } = new Color(201, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"OrangeRed1\" (RGB 255,95,0).\n        /// </summary>\n        public static Color OrangeRed1 { get; } = new Color(202, 255, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed1\" (RGB 255,95,95).\n        /// </summary>\n        public static Color IndianRed1 { get; } = new Color(203, 255, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed1_1\" (RGB 255,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed1_1 { get; } = new Color(204, 255, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"HotPink\" (RGB 255,95,175).\n        /// </summary>\n        public static Color HotPink { get; } = new Color(205, 255, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"HotPink_1\" (RGB 255,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink_1 { get; } = new Color(206, 255, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid1_1\" (RGB 255,95,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumOrchid1_1 { get; } = new Color(207, 255, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange\" (RGB 255,135,0).\n        /// </summary>\n        public static Color DarkOrange { get; } = new Color(208, 255, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"Salmon1\" (RGB 255,135,95).\n        /// </summary>\n        public static Color Salmon1 { get; } = new Color(209, 255, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightCoral\" (RGB 255,135,135).\n        /// </summary>\n        public static Color LightCoral { get; } = new Color(210, 255, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"PaleVioletRed1\" (RGB 255,135,175).\n        /// </summary>\n        public static Color PaleVioletRed1 { get; } = new Color(211, 255, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Orchid2\" (RGB 255,135,215).\n        /// </summary>\n        public static Color Orchid2 { get; } = new Color(212, 255, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"Orchid1\" (RGB 255,135,255).\n        /// </summary>\n        public static Color Orchid1 { get; } = new Color(213, 255, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange1\" (RGB 255,175,0).\n        /// </summary>\n        public static Color Orange1 { get; } = new Color(214, 255, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"SandyBrown\" (RGB 255,175,95).\n        /// </summary>\n        public static Color SandyBrown { get; } = new Color(215, 255, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon1\" (RGB 255,175,135).\n        /// </summary>\n        public static Color LightSalmon1 { get; } = new Color(216, 255, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightPink1\" (RGB 255,175,175).\n        /// </summary>\n        public static Color LightPink1 { get; } = new Color(217, 255, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Pink1\" (RGB 255,175,215).\n        /// </summary>\n        public static Color Pink1 { get; } = new Color(218, 255, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"Plum1\" (RGB 255,175,255).\n        /// </summary>\n        public static Color Plum1 { get; } = new Color(219, 255, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold1\" (RGB 255,215,0).\n        /// </summary>\n        public static Color Gold1 { get; } = new Color(220, 255, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_1\" (RGB 255,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_1 { get; } = new Color(221, 255, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_2\" (RGB 255,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_2 { get; } = new Color(222, 255, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"NavajoWhite1\" (RGB 255,215,175).\n        /// </summary>\n        public static Color NavajoWhite1 { get; } = new Color(223, 255, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"MistyRose1\" (RGB 255,215,215).\n        /// </summary>\n        public static Color MistyRose1 { get; } = new Color(224, 255, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Thistle1\" (RGB 255,215,255).\n        /// </summary>\n        public static Color Thistle1 { get; } = new Color(225, 255, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow1\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow1 { get; } = new Color(226, 255, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod1\" (RGB 255,255,95).\n        /// </summary>\n        public static Color LightGoldenrod1 { get; } = new Color(227, 255, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"Khaki1\" (RGB 255,255,135).\n        /// </summary>\n        public static Color Khaki1 { get; } = new Color(228, 255, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"Wheat1\" (RGB 255,255,175).\n        /// </summary>\n        public static Color Wheat1 { get; } = new Color(229, 255, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Cornsilk1\" (RGB 255,255,215).\n        /// </summary>\n        public static Color Cornsilk1 { get; } = new Color(230, 255, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"Grey100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Grey100 { get; } = new Color(231, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gray100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Gray100 { get; } = new Color(231, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Grey3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Grey3 { get; } = new Color(232, 8, 8, 8);\n        \n        /// <summary>\n        /// Gets the color \"Gray3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Gray3 { get; } = new Color(232, 8, 8, 8);\n        \n        /// <summary>\n        /// Gets the color \"Grey7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Grey7 { get; } = new Color(233, 18, 18, 18);\n        \n        /// <summary>\n        /// Gets the color \"Gray7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Gray7 { get; } = new Color(233, 18, 18, 18);\n        \n        /// <summary>\n        /// Gets the color \"Grey11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Grey11 { get; } = new Color(234, 28, 28, 28);\n        \n        /// <summary>\n        /// Gets the color \"Gray11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Gray11 { get; } = new Color(234, 28, 28, 28);\n        \n        /// <summary>\n        /// Gets the color \"Grey15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Grey15 { get; } = new Color(235, 38, 38, 38);\n        \n        /// <summary>\n        /// Gets the color \"Gray15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Gray15 { get; } = new Color(235, 38, 38, 38);\n        \n        /// <summary>\n        /// Gets the color \"Grey19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Grey19 { get; } = new Color(236, 48, 48, 48);\n        \n        /// <summary>\n        /// Gets the color \"Gray19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Gray19 { get; } = new Color(236, 48, 48, 48);\n        \n        /// <summary>\n        /// Gets the color \"Grey23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Grey23 { get; } = new Color(237, 58, 58, 58);\n        \n        /// <summary>\n        /// Gets the color \"Gray23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Gray23 { get; } = new Color(237, 58, 58, 58);\n        \n        /// <summary>\n        /// Gets the color \"Grey27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Grey27 { get; } = new Color(238, 68, 68, 68);\n        \n        /// <summary>\n        /// Gets the color \"Gray27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Gray27 { get; } = new Color(238, 68, 68, 68);\n        \n        /// <summary>\n        /// Gets the color \"Grey30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Grey30 { get; } = new Color(239, 78, 78, 78);\n        \n        /// <summary>\n        /// Gets the color \"Gray30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Gray30 { get; } = new Color(239, 78, 78, 78);\n        \n        /// <summary>\n        /// Gets the color \"Grey35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Grey35 { get; } = new Color(240, 88, 88, 88);\n        \n        /// <summary>\n        /// Gets the color \"Gray35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Gray35 { get; } = new Color(240, 88, 88, 88);\n        \n        /// <summary>\n        /// Gets the color \"Grey39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Grey39 { get; } = new Color(241, 98, 98, 98);\n        \n        /// <summary>\n        /// Gets the color \"Gray39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Gray39 { get; } = new Color(241, 98, 98, 98);\n        \n        /// <summary>\n        /// Gets the color \"Grey42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Grey42 { get; } = new Color(242, 108, 108, 108);\n        \n        /// <summary>\n        /// Gets the color \"Gray42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Gray42 { get; } = new Color(242, 108, 108, 108);\n        \n        /// <summary>\n        /// Gets the color \"Grey46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Grey46 { get; } = new Color(243, 118, 118, 118);\n        \n        /// <summary>\n        /// Gets the color \"Gray46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Gray46 { get; } = new Color(243, 118, 118, 118);\n        \n        /// <summary>\n        /// Gets the color \"Grey50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey50 { get; } = new Color(244, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Gray50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray50 { get; } = new Color(244, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Grey54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Grey54 { get; } = new Color(245, 138, 138, 138);\n        \n        /// <summary>\n        /// Gets the color \"Gray54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Gray54 { get; } = new Color(245, 138, 138, 138);\n        \n        /// <summary>\n        /// Gets the color \"Grey58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Grey58 { get; } = new Color(246, 148, 148, 148);\n        \n        /// <summary>\n        /// Gets the color \"Gray58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Gray58 { get; } = new Color(246, 148, 148, 148);\n        \n        /// <summary>\n        /// Gets the color \"Grey62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Grey62 { get; } = new Color(247, 158, 158, 158);\n        \n        /// <summary>\n        /// Gets the color \"Gray62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Gray62 { get; } = new Color(247, 158, 158, 158);\n        \n        /// <summary>\n        /// Gets the color \"Grey66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Grey66 { get; } = new Color(248, 168, 168, 168);\n        \n        /// <summary>\n        /// Gets the color \"Gray66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Gray66 { get; } = new Color(248, 168, 168, 168);\n        \n        /// <summary>\n        /// Gets the color \"Grey70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Grey70 { get; } = new Color(249, 178, 178, 178);\n        \n        /// <summary>\n        /// Gets the color \"Gray70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Gray70 { get; } = new Color(249, 178, 178, 178);\n        \n        /// <summary>\n        /// Gets the color \"Grey74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Grey74 { get; } = new Color(250, 188, 188, 188);\n        \n        /// <summary>\n        /// Gets the color \"Gray74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Gray74 { get; } = new Color(250, 188, 188, 188);\n        \n        /// <summary>\n        /// Gets the color \"Grey78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Grey78 { get; } = new Color(251, 198, 198, 198);\n        \n        /// <summary>\n        /// Gets the color \"Gray78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Gray78 { get; } = new Color(251, 198, 198, 198);\n        \n        /// <summary>\n        /// Gets the color \"Grey82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Grey82 { get; } = new Color(252, 208, 208, 208);\n        \n        /// <summary>\n        /// Gets the color \"Gray82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Gray82 { get; } = new Color(252, 208, 208, 208);\n        \n        /// <summary>\n        /// Gets the color \"Grey85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Grey85 { get; } = new Color(253, 218, 218, 218);\n        \n        /// <summary>\n        /// Gets the color \"Gray85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Gray85 { get; } = new Color(253, 218, 218, 218);\n        \n        /// <summary>\n        /// Gets the color \"Grey89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Grey89 { get; } = new Color(254, 228, 228, 228);\n        \n        /// <summary>\n        /// Gets the color \"Gray89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Gray89 { get; } = new Color(254, 228, 228, 228);\n        \n        /// <summary>\n        /// Gets the color \"Grey93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Grey93 { get; } = new Color(255, 238, 238, 238);\n        \n        /// <summary>\n        /// Gets the color \"Gray93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Gray93 { get; } = new Color(255, 238, 238, 238);\n        \n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/ColorPalette.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    internal static partial class ColorPalette\n    {\n        private static List<Color> GenerateLegacyPalette()\n        {\n            return new List<Color>\n            {\n                Color.Black,\n                Color.Maroon,\n                Color.Green,\n                Color.Olive,\n                Color.Navy,\n                Color.Purple,\n                Color.Teal,\n                Color.Silver,\n            };\n        }\n        \n        private static List<Color> GenerateStandardPalette(IReadOnlyList<Color> legacy)\n        {\n            return new List<Color>(legacy)\n            {\n                Color.Grey,\n                Color.Red,\n                Color.Lime,\n                Color.Yellow,\n                Color.Blue,\n                Color.Fuchsia,\n                Color.Aqua,\n                Color.White,\n            };\n        }\n        \n        private static List<Color> GenerateEightBitPalette(IReadOnlyList<Color> standard)\n        {\n            return new List<Color>(standard)\n            {\n                Color.Grey0,\n                Color.NavyBlue,\n                Color.DarkBlue,\n                Color.Blue3,\n                Color.Blue3_1,\n                Color.Blue1,\n                Color.DarkGreen,\n                Color.DeepSkyBlue4,\n                Color.DeepSkyBlue4_1,\n                Color.DeepSkyBlue4_2,\n                Color.DodgerBlue3,\n                Color.DodgerBlue2,\n                Color.Green4,\n                Color.SpringGreen4,\n                Color.Turquoise4,\n                Color.DeepSkyBlue3,\n                Color.DeepSkyBlue3_1,\n                Color.DodgerBlue1,\n                Color.Green3,\n                Color.SpringGreen3,\n                Color.DarkCyan,\n                Color.LightSeaGreen,\n                Color.DeepSkyBlue2,\n                Color.DeepSkyBlue1,\n                Color.Green3_1,\n                Color.SpringGreen3_1,\n                Color.SpringGreen2,\n                Color.Cyan3,\n                Color.DarkTurquoise,\n                Color.Turquoise2,\n                Color.Green1,\n                Color.SpringGreen2_1,\n                Color.SpringGreen1,\n                Color.MediumSpringGreen,\n                Color.Cyan2,\n                Color.Cyan1,\n                Color.DarkRed,\n                Color.DeepPink4,\n                Color.Purple4,\n                Color.Purple4_1,\n                Color.Purple3,\n                Color.BlueViolet,\n                Color.Orange4,\n                Color.Grey37,\n                Color.MediumPurple4,\n                Color.SlateBlue3,\n                Color.SlateBlue3_1,\n                Color.RoyalBlue1,\n                Color.Chartreuse4,\n                Color.DarkSeaGreen4,\n                Color.PaleTurquoise4,\n                Color.SteelBlue,\n                Color.SteelBlue3,\n                Color.CornflowerBlue,\n                Color.Chartreuse3,\n                Color.DarkSeaGreen4_1,\n                Color.CadetBlue,\n                Color.CadetBlue_1,\n                Color.SkyBlue3,\n                Color.SteelBlue1,\n                Color.Chartreuse3_1,\n                Color.PaleGreen3,\n                Color.SeaGreen3,\n                Color.Aquamarine3,\n                Color.MediumTurquoise,\n                Color.SteelBlue1_1,\n                Color.Chartreuse2,\n                Color.SeaGreen2,\n                Color.SeaGreen1,\n                Color.SeaGreen1_1,\n                Color.Aquamarine1,\n                Color.DarkSlateGray2,\n                Color.DarkRed_1,\n                Color.DeepPink4_1,\n                Color.DarkMagenta,\n                Color.DarkMagenta_1,\n                Color.DarkViolet,\n                Color.Purple_1,\n                Color.Orange4_1,\n                Color.LightPink4,\n                Color.Plum4,\n                Color.MediumPurple3,\n                Color.MediumPurple3_1,\n                Color.SlateBlue1,\n                Color.Yellow4,\n                Color.Wheat4,\n                Color.Grey53,\n                Color.LightSlateGrey,\n                Color.MediumPurple,\n                Color.LightSlateBlue,\n                Color.Yellow4_1,\n                Color.DarkOliveGreen3,\n                Color.DarkSeaGreen,\n                Color.LightSkyBlue3,\n                Color.LightSkyBlue3_1,\n                Color.SkyBlue2,\n                Color.Chartreuse2_1,\n                Color.DarkOliveGreen3_1,\n                Color.PaleGreen3_1,\n                Color.DarkSeaGreen3,\n                Color.DarkSlateGray3,\n                Color.SkyBlue1,\n                Color.Chartreuse1,\n                Color.LightGreen,\n                Color.LightGreen_1,\n                Color.PaleGreen1,\n                Color.Aquamarine1_1,\n                Color.DarkSlateGray1,\n                Color.Red3,\n                Color.DeepPink4_2,\n                Color.MediumVioletRed,\n                Color.Magenta3,\n                Color.DarkViolet_1,\n                Color.Purple_2,\n                Color.DarkOrange3,\n                Color.IndianRed,\n                Color.HotPink3,\n                Color.MediumOrchid3,\n                Color.MediumOrchid,\n                Color.MediumPurple2,\n                Color.DarkGoldenrod,\n                Color.LightSalmon3,\n                Color.RosyBrown,\n                Color.Grey63,\n                Color.MediumPurple2_1,\n                Color.MediumPurple1,\n                Color.Gold3,\n                Color.DarkKhaki,\n                Color.NavajoWhite3,\n                Color.Grey69,\n                Color.LightSteelBlue3,\n                Color.LightSteelBlue,\n                Color.Yellow3,\n                Color.DarkOliveGreen3_2,\n                Color.DarkSeaGreen3_1,\n                Color.DarkSeaGreen2,\n                Color.LightCyan3,\n                Color.LightSkyBlue1,\n                Color.GreenYellow,\n                Color.DarkOliveGreen2,\n                Color.PaleGreen1_1,\n                Color.DarkSeaGreen2_1,\n                Color.DarkSeaGreen1,\n                Color.PaleTurquoise1,\n                Color.Red3_1,\n                Color.DeepPink3,\n                Color.DeepPink3_1,\n                Color.Magenta3_1,\n                Color.Magenta3_2,\n                Color.Magenta2,\n                Color.DarkOrange3_1,\n                Color.IndianRed_1,\n                Color.HotPink3_1,\n                Color.HotPink2,\n                Color.Orchid,\n                Color.MediumOrchid1,\n                Color.Orange3,\n                Color.LightSalmon3_1,\n                Color.LightPink3,\n                Color.Pink3,\n                Color.Plum3,\n                Color.Violet,\n                Color.Gold3_1,\n                Color.LightGoldenrod3,\n                Color.Tan,\n                Color.MistyRose3,\n                Color.Thistle3,\n                Color.Plum2,\n                Color.Yellow3_1,\n                Color.Khaki3,\n                Color.LightGoldenrod2,\n                Color.LightYellow3,\n                Color.Grey84,\n                Color.LightSteelBlue1,\n                Color.Yellow2,\n                Color.DarkOliveGreen1,\n                Color.DarkOliveGreen1_1,\n                Color.DarkSeaGreen1_1,\n                Color.Honeydew2,\n                Color.LightCyan1,\n                Color.Red1,\n                Color.DeepPink2,\n                Color.DeepPink1,\n                Color.DeepPink1_1,\n                Color.Magenta2_1,\n                Color.Magenta1,\n                Color.OrangeRed1,\n                Color.IndianRed1,\n                Color.IndianRed1_1,\n                Color.HotPink,\n                Color.HotPink_1,\n                Color.MediumOrchid1_1,\n                Color.DarkOrange,\n                Color.Salmon1,\n                Color.LightCoral,\n                Color.PaleVioletRed1,\n                Color.Orchid2,\n                Color.Orchid1,\n                Color.Orange1,\n                Color.SandyBrown,\n                Color.LightSalmon1,\n                Color.LightPink1,\n                Color.Pink1,\n                Color.Plum1,\n                Color.Gold1,\n                Color.LightGoldenrod2_1,\n                Color.LightGoldenrod2_2,\n                Color.NavajoWhite1,\n                Color.MistyRose1,\n                Color.Thistle1,\n                Color.Yellow1,\n                Color.LightGoldenrod1,\n                Color.Khaki1,\n                Color.Wheat1,\n                Color.Cornsilk1,\n                Color.Grey100,\n                Color.Grey3,\n                Color.Grey7,\n                Color.Grey11,\n                Color.Grey15,\n                Color.Grey19,\n                Color.Grey23,\n                Color.Grey27,\n                Color.Grey30,\n                Color.Grey35,\n                Color.Grey39,\n                Color.Grey42,\n                Color.Grey46,\n                Color.Grey50,\n                Color.Grey54,\n                Color.Grey58,\n                Color.Grey62,\n                Color.Grey66,\n                Color.Grey70,\n                Color.Grey74,\n                Color.Grey78,\n                Color.Grey82,\n                Color.Grey85,\n                Color.Grey89,\n                Color.Grey93,\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/ColorTable.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    internal static partial class ColorTable\n    {\n        private static Dictionary<string, int> GenerateTable()\n        {\n            return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)\n            {\n                { \"black\", 0 },\n                { \"maroon\", 1 },\n                { \"green\", 2 },\n                { \"olive\", 3 },\n                { \"navy\", 4 },\n                { \"purple\", 5 },\n                { \"teal\", 6 },\n                { \"silver\", 7 },\n                { \"grey\", 8 },\n                { \"gray\", 8 },\n                { \"red\", 9 },\n                { \"lime\", 10 },\n                { \"yellow\", 11 },\n                { \"blue\", 12 },\n                { \"fuchsia\", 13 },\n                { \"magenta\", 13 },\n                { \"aqua\", 14 },\n                { \"cyan\", 14 },\n                { \"white\", 15 },\n                { \"grey0\", 16 },\n                { \"gray0\", 16 },\n                { \"navyblue\", 17 },\n                { \"darkblue\", 18 },\n                { \"blue3\", 19 },\n                { \"blue3_1\", 20 },\n                { \"blue1\", 21 },\n                { \"darkgreen\", 22 },\n                { \"deepskyblue4\", 23 },\n                { \"deepskyblue4_1\", 24 },\n                { \"deepskyblue4_2\", 25 },\n                { \"dodgerblue3\", 26 },\n                { \"dodgerblue2\", 27 },\n                { \"green4\", 28 },\n                { \"springgreen4\", 29 },\n                { \"turquoise4\", 30 },\n                { \"deepskyblue3\", 31 },\n                { \"deepskyblue3_1\", 32 },\n                { \"dodgerblue1\", 33 },\n                { \"green3\", 34 },\n                { \"springgreen3\", 35 },\n                { \"darkcyan\", 36 },\n                { \"lightseagreen\", 37 },\n                { \"deepskyblue2\", 38 },\n                { \"deepskyblue1\", 39 },\n                { \"green3_1\", 40 },\n                { \"springgreen3_1\", 41 },\n                { \"springgreen2\", 42 },\n                { \"cyan3\", 43 },\n                { \"darkturquoise\", 44 },\n                { \"turquoise2\", 45 },\n                { \"green1\", 46 },\n                { \"springgreen2_1\", 47 },\n                { \"springgreen1\", 48 },\n                { \"mediumspringgreen\", 49 },\n                { \"cyan2\", 50 },\n                { \"cyan1\", 51 },\n                { \"darkred\", 52 },\n                { \"deeppink4\", 53 },\n                { \"purple4\", 54 },\n                { \"purple4_1\", 55 },\n                { \"purple3\", 56 },\n                { \"blueviolet\", 57 },\n                { \"orange4\", 58 },\n                { \"grey37\", 59 },\n                { \"gray37\", 59 },\n                { \"mediumpurple4\", 60 },\n                { \"slateblue3\", 61 },\n                { \"slateblue3_1\", 62 },\n                { \"royalblue1\", 63 },\n                { \"chartreuse4\", 64 },\n                { \"darkseagreen4\", 65 },\n                { \"paleturquoise4\", 66 },\n                { \"steelblue\", 67 },\n                { \"steelblue3\", 68 },\n                { \"cornflowerblue\", 69 },\n                { \"chartreuse3\", 70 },\n                { \"darkseagreen4_1\", 71 },\n                { \"cadetblue\", 72 },\n                { \"cadetblue_1\", 73 },\n                { \"skyblue3\", 74 },\n                { \"steelblue1\", 75 },\n                { \"chartreuse3_1\", 76 },\n                { \"palegreen3\", 77 },\n                { \"seagreen3\", 78 },\n                { \"aquamarine3\", 79 },\n                { \"mediumturquoise\", 80 },\n                { \"steelblue1_1\", 81 },\n                { \"chartreuse2\", 82 },\n                { \"seagreen2\", 83 },\n                { \"seagreen1\", 84 },\n                { \"seagreen1_1\", 85 },\n                { \"aquamarine1\", 86 },\n                { \"darkslategray2\", 87 },\n                { \"darkred_1\", 88 },\n                { \"deeppink4_1\", 89 },\n                { \"darkmagenta\", 90 },\n                { \"darkmagenta_1\", 91 },\n                { \"darkviolet\", 92 },\n                { \"purple_1\", 93 },\n                { \"orange4_1\", 94 },\n                { \"lightpink4\", 95 },\n                { \"plum4\", 96 },\n                { \"mediumpurple3\", 97 },\n                { \"mediumpurple3_1\", 98 },\n                { \"slateblue1\", 99 },\n                { \"yellow4\", 100 },\n                { \"wheat4\", 101 },\n                { \"grey53\", 102 },\n                { \"gray53\", 102 },\n                { \"lightslategrey\", 103 },\n                { \"mediumpurple\", 104 },\n                { \"lightslateblue\", 105 },\n                { \"yellow4_1\", 106 },\n                { \"darkolivegreen3\", 107 },\n                { \"darkseagreen\", 108 },\n                { \"lightskyblue3\", 109 },\n                { \"lightskyblue3_1\", 110 },\n                { \"skyblue2\", 111 },\n                { \"chartreuse2_1\", 112 },\n                { \"darkolivegreen3_1\", 113 },\n                { \"palegreen3_1\", 114 },\n                { \"darkseagreen3\", 115 },\n                { \"darkslategray3\", 116 },\n                { \"skyblue1\", 117 },\n                { \"chartreuse1\", 118 },\n                { \"lightgreen\", 119 },\n                { \"lightgreen_1\", 120 },\n                { \"palegreen1\", 121 },\n                { \"aquamarine1_1\", 122 },\n                { \"darkslategray1\", 123 },\n                { \"red3\", 124 },\n                { \"deeppink4_2\", 125 },\n                { \"mediumvioletred\", 126 },\n                { \"magenta3\", 127 },\n                { \"darkviolet_1\", 128 },\n                { \"purple_2\", 129 },\n                { \"darkorange3\", 130 },\n                { \"indianred\", 131 },\n                { \"hotpink3\", 132 },\n                { \"mediumorchid3\", 133 },\n                { \"mediumorchid\", 134 },\n                { \"mediumpurple2\", 135 },\n                { \"darkgoldenrod\", 136 },\n                { \"lightsalmon3\", 137 },\n                { \"rosybrown\", 138 },\n                { \"grey63\", 139 },\n                { \"gray63\", 139 },\n                { \"mediumpurple2_1\", 140 },\n                { \"mediumpurple1\", 141 },\n                { \"gold3\", 142 },\n                { \"darkkhaki\", 143 },\n                { \"navajowhite3\", 144 },\n                { \"grey69\", 145 },\n                { \"gray69\", 145 },\n                { \"lightsteelblue3\", 146 },\n                { \"lightsteelblue\", 147 },\n                { \"yellow3\", 148 },\n                { \"darkolivegreen3_2\", 149 },\n                { \"darkseagreen3_1\", 150 },\n                { \"darkseagreen2\", 151 },\n                { \"lightcyan3\", 152 },\n                { \"lightskyblue1\", 153 },\n                { \"greenyellow\", 154 },\n                { \"darkolivegreen2\", 155 },\n                { \"palegreen1_1\", 156 },\n                { \"darkseagreen2_1\", 157 },\n                { \"darkseagreen1\", 158 },\n                { \"paleturquoise1\", 159 },\n                { \"red3_1\", 160 },\n                { \"deeppink3\", 161 },\n                { \"deeppink3_1\", 162 },\n                { \"magenta3_1\", 163 },\n                { \"magenta3_2\", 164 },\n                { \"magenta2\", 165 },\n                { \"darkorange3_1\", 166 },\n                { \"indianred_1\", 167 },\n                { \"hotpink3_1\", 168 },\n                { \"hotpink2\", 169 },\n                { \"orchid\", 170 },\n                { \"mediumorchid1\", 171 },\n                { \"orange3\", 172 },\n                { \"lightsalmon3_1\", 173 },\n                { \"lightpink3\", 174 },\n                { \"pink3\", 175 },\n                { \"plum3\", 176 },\n                { \"violet\", 177 },\n                { \"gold3_1\", 178 },\n                { \"lightgoldenrod3\", 179 },\n                { \"tan\", 180 },\n                { \"mistyrose3\", 181 },\n                { \"thistle3\", 182 },\n                { \"plum2\", 183 },\n                { \"yellow3_1\", 184 },\n                { \"khaki3\", 185 },\n                { \"lightgoldenrod2\", 186 },\n                { \"lightyellow3\", 187 },\n                { \"grey84\", 188 },\n                { \"gray84\", 188 },\n                { \"lightsteelblue1\", 189 },\n                { \"yellow2\", 190 },\n                { \"darkolivegreen1\", 191 },\n                { \"darkolivegreen1_1\", 192 },\n                { \"darkseagreen1_1\", 193 },\n                { \"honeydew2\", 194 },\n                { \"lightcyan1\", 195 },\n                { \"red1\", 196 },\n                { \"deeppink2\", 197 },\n                { \"deeppink1\", 198 },\n                { \"deeppink1_1\", 199 },\n                { \"magenta2_1\", 200 },\n                { \"magenta1\", 201 },\n                { \"orangered1\", 202 },\n                { \"indianred1\", 203 },\n                { \"indianred1_1\", 204 },\n                { \"hotpink\", 205 },\n                { \"hotpink_1\", 206 },\n                { \"mediumorchid1_1\", 207 },\n                { \"darkorange\", 208 },\n                { \"salmon1\", 209 },\n                { \"lightcoral\", 210 },\n                { \"palevioletred1\", 211 },\n                { \"orchid2\", 212 },\n                { \"orchid1\", 213 },\n                { \"orange1\", 214 },\n                { \"sandybrown\", 215 },\n                { \"lightsalmon1\", 216 },\n                { \"lightpink1\", 217 },\n                { \"pink1\", 218 },\n                { \"plum1\", 219 },\n                { \"gold1\", 220 },\n                { \"lightgoldenrod2_1\", 221 },\n                { \"lightgoldenrod2_2\", 222 },\n                { \"navajowhite1\", 223 },\n                { \"mistyrose1\", 224 },\n                { \"thistle1\", 225 },\n                { \"yellow1\", 226 },\n                { \"lightgoldenrod1\", 227 },\n                { \"khaki1\", 228 },\n                { \"wheat1\", 229 },\n                { \"cornsilk1\", 230 },\n                { \"grey100\", 231 },\n                { \"gray100\", 231 },\n                { \"grey3\", 232 },\n                { \"gray3\", 232 },\n                { \"grey7\", 233 },\n                { \"gray7\", 233 },\n                { \"grey11\", 234 },\n                { \"gray11\", 234 },\n                { \"grey15\", 235 },\n                { \"gray15\", 235 },\n                { \"grey19\", 236 },\n                { \"gray19\", 236 },\n                { \"grey23\", 237 },\n                { \"gray23\", 237 },\n                { \"grey27\", 238 },\n                { \"gray27\", 238 },\n                { \"grey30\", 239 },\n                { \"gray30\", 239 },\n                { \"grey35\", 240 },\n                { \"gray35\", 240 },\n                { \"grey39\", 241 },\n                { \"gray39\", 241 },\n                { \"grey42\", 242 },\n                { \"gray42\", 242 },\n                { \"grey46\", 243 },\n                { \"gray46\", 243 },\n                { \"grey50\", 244 },\n                { \"gray50\", 244 },\n                { \"grey54\", 245 },\n                { \"gray54\", 245 },\n                { \"grey58\", 246 },\n                { \"gray58\", 246 },\n                { \"grey62\", 247 },\n                { \"gray62\", 247 },\n                { \"grey66\", 248 },\n                { \"gray66\", 248 },\n                { \"grey70\", 249 },\n                { \"gray70\", 249 },\n                { \"grey74\", 250 },\n                { \"gray74\", 250 },\n                { \"grey78\", 251 },\n                { \"gray78\", 251 },\n                { \"grey82\", 252 },\n                { \"gray82\", 252 },\n                { \"grey85\", 253 },\n                { \"gray85\", 253 },\n                { \"grey89\", 254 },\n                { \"gray89\", 254 },\n                { \"grey93\", 255 },\n                { \"gray93\", 255 },\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Emojis.EmojiGenerator/Emoji.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    /// <summary>\n    /// Utility for working with emojis.\n    /// </summary>\n    public static partial class Emoji\n    {\n        private static readonly Dictionary<string, string> _emojis\n            = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)\n        {\n            { \"abacus\", Emoji.Known.Abacus },\n            { \"ab_button_blood_type\", Emoji.Known.AbButtonBloodType },\n            { \"a_button_blood_type\", Emoji.Known.AButtonBloodType },\n            { \"accordion\", Emoji.Known.Accordion },\n            { \"adhesive_bandage\", Emoji.Known.AdhesiveBandage },\n            { \"admission_tickets\", Emoji.Known.AdmissionTickets },\n            { \"aerial_tramway\", Emoji.Known.AerialTramway },\n            { \"airplane\", Emoji.Known.Airplane },\n            { \"airplane_arrival\", Emoji.Known.AirplaneArrival },\n            { \"airplane_departure\", Emoji.Known.AirplaneDeparture },\n            { \"alarm_clock\", Emoji.Known.AlarmClock },\n            { \"alembic\", Emoji.Known.Alembic },\n            { \"alien\", Emoji.Known.Alien },\n            { \"alien_monster\", Emoji.Known.AlienMonster },\n            { \"ambulance\", Emoji.Known.Ambulance },\n            { \"american_football\", Emoji.Known.AmericanFootball },\n            { \"amphora\", Emoji.Known.Amphora },\n            { \"anatomical_heart\", Emoji.Known.AnatomicalHeart },\n            { \"anchor\", Emoji.Known.Anchor },\n            { \"anger_symbol\", Emoji.Known.AngerSymbol },\n            { \"angry_face\", Emoji.Known.AngryFace },\n            { \"angry_face_with_horns\", Emoji.Known.AngryFaceWithHorns },\n            { \"anguished_face\", Emoji.Known.AnguishedFace },\n            { \"ant\", Emoji.Known.Ant },\n            { \"antenna_bars\", Emoji.Known.AntennaBars },\n            { \"anxious_face_with_sweat\", Emoji.Known.AnxiousFaceWithSweat },\n            { \"aquarius\", Emoji.Known.Aquarius },\n            { \"aries\", Emoji.Known.Aries },\n            { \"articulated_lorry\", Emoji.Known.ArticulatedLorry },\n            { \"artist_palette\", Emoji.Known.ArtistPalette },\n            { \"astonished_face\", Emoji.Known.AstonishedFace },\n            { \"atm_sign\", Emoji.Known.AtmSign },\n            { \"atom_symbol\", Emoji.Known.AtomSymbol },\n            { \"automobile\", Emoji.Known.Automobile },\n            { \"auto_rickshaw\", Emoji.Known.AutoRickshaw },\n            { \"avocado\", Emoji.Known.Avocado },\n            { \"axe\", Emoji.Known.Axe },\n            { \"baby\", Emoji.Known.Baby },\n            { \"baby_angel\", Emoji.Known.BabyAngel },\n            { \"baby_bottle\", Emoji.Known.BabyBottle },\n            { \"baby_chick\", Emoji.Known.BabyChick },\n            { \"baby_symbol\", Emoji.Known.BabySymbol },\n            { \"back_arrow\", Emoji.Known.BackArrow },\n            { \"backhand_index_pointing_down\", Emoji.Known.BackhandIndexPointingDown },\n            { \"backhand_index_pointing_left\", Emoji.Known.BackhandIndexPointingLeft },\n            { \"backhand_index_pointing_right\", Emoji.Known.BackhandIndexPointingRight },\n            { \"backhand_index_pointing_up\", Emoji.Known.BackhandIndexPointingUp },\n            { \"backpack\", Emoji.Known.Backpack },\n            { \"bacon\", Emoji.Known.Bacon },\n            { \"badger\", Emoji.Known.Badger },\n            { \"badminton\", Emoji.Known.Badminton },\n            { \"bagel\", Emoji.Known.Bagel },\n            { \"baggage_claim\", Emoji.Known.BaggageClaim },\n            { \"baguette_bread\", Emoji.Known.BaguetteBread },\n            { \"balance_scale\", Emoji.Known.BalanceScale },\n            { \"bald\", Emoji.Known.Bald },\n            { \"ballet_shoes\", Emoji.Known.BalletShoes },\n            { \"balloon\", Emoji.Known.Balloon },\n            { \"ballot_box_with_ballot\", Emoji.Known.BallotBoxWithBallot },\n            { \"banana\", Emoji.Known.Banana },\n            { \"banjo\", Emoji.Known.Banjo },\n            { \"bank\", Emoji.Known.Bank },\n            { \"barber_pole\", Emoji.Known.BarberPole },\n            { \"bar_chart\", Emoji.Known.BarChart },\n            { \"baseball\", Emoji.Known.Baseball },\n            { \"basket\", Emoji.Known.Basket },\n            { \"basketball\", Emoji.Known.Basketball },\n            { \"bat\", Emoji.Known.Bat },\n            { \"bathtub\", Emoji.Known.Bathtub },\n            { \"battery\", Emoji.Known.Battery },\n            { \"b_button_blood_type\", Emoji.Known.BButtonBloodType },\n            { \"beach_with_umbrella\", Emoji.Known.BeachWithUmbrella },\n            { \"beaming_face_with_smiling_eyes\", Emoji.Known.BeamingFaceWithSmilingEyes },\n            { \"beans\", Emoji.Known.Beans },\n            { \"bear\", Emoji.Known.Bear },\n            { \"beating_heart\", Emoji.Known.BeatingHeart },\n            { \"beaver\", Emoji.Known.Beaver },\n            { \"bed\", Emoji.Known.Bed },\n            { \"beer_mug\", Emoji.Known.BeerMug },\n            { \"beetle\", Emoji.Known.Beetle },\n            { \"bell\", Emoji.Known.Bell },\n            { \"bellhop_bell\", Emoji.Known.BellhopBell },\n            { \"bell_pepper\", Emoji.Known.BellPepper },\n            { \"bell_with_slash\", Emoji.Known.BellWithSlash },\n            { \"bento_box\", Emoji.Known.BentoBox },\n            { \"beverage_box\", Emoji.Known.BeverageBox },\n            { \"bicycle\", Emoji.Known.Bicycle },\n            { \"bikini\", Emoji.Known.Bikini },\n            { \"billed_cap\", Emoji.Known.BilledCap },\n            { \"biohazard\", Emoji.Known.Biohazard },\n            { \"bird\", Emoji.Known.Bird },\n            { \"birthday_cake\", Emoji.Known.BirthdayCake },\n            { \"bison\", Emoji.Known.Bison },\n            { \"biting_lip\", Emoji.Known.BitingLip },\n            { \"black_circle\", Emoji.Known.BlackCircle },\n            { \"black_flag\", Emoji.Known.BlackFlag },\n            { \"black_heart\", Emoji.Known.BlackHeart },\n            { \"black_large_square\", Emoji.Known.BlackLargeSquare },\n            { \"black_medium_small_square\", Emoji.Known.BlackMediumSmallSquare },\n            { \"black_medium_square\", Emoji.Known.BlackMediumSquare },\n            { \"black_nib\", Emoji.Known.BlackNib },\n            { \"black_small_square\", Emoji.Known.BlackSmallSquare },\n            { \"black_square_button\", Emoji.Known.BlackSquareButton },\n            { \"blossom\", Emoji.Known.Blossom },\n            { \"blowfish\", Emoji.Known.Blowfish },\n            { \"blueberries\", Emoji.Known.Blueberries },\n            { \"blue_book\", Emoji.Known.BlueBook },\n            { \"blue_circle\", Emoji.Known.BlueCircle },\n            { \"blue_heart\", Emoji.Known.BlueHeart },\n            { \"blue_square\", Emoji.Known.BlueSquare },\n            { \"boar\", Emoji.Known.Boar },\n            { \"bomb\", Emoji.Known.Bomb },\n            { \"bone\", Emoji.Known.Bone },\n            { \"bookmark\", Emoji.Known.Bookmark },\n            { \"bookmark_tabs\", Emoji.Known.BookmarkTabs },\n            { \"books\", Emoji.Known.Books },\n            { \"boomerang\", Emoji.Known.Boomerang },\n            { \"bottle_with_popping_cork\", Emoji.Known.BottleWithPoppingCork },\n            { \"bouquet\", Emoji.Known.Bouquet },\n            { \"bow_and_arrow\", Emoji.Known.BowAndArrow },\n            { \"bowling\", Emoji.Known.Bowling },\n            { \"bowl_with_spoon\", Emoji.Known.BowlWithSpoon },\n            { \"boxing_glove\", Emoji.Known.BoxingGlove },\n            { \"boy\", Emoji.Known.Boy },\n            { \"brain\", Emoji.Known.Brain },\n            { \"bread\", Emoji.Known.Bread },\n            { \"breast_feeding\", Emoji.Known.BreastFeeding },\n            { \"brick\", Emoji.Known.Brick },\n            { \"bridge_at_night\", Emoji.Known.BridgeAtNight },\n            { \"briefcase\", Emoji.Known.Briefcase },\n            { \"briefs\", Emoji.Known.Briefs },\n            { \"bright_button\", Emoji.Known.BrightButton },\n            { \"broccoli\", Emoji.Known.Broccoli },\n            { \"broken_heart\", Emoji.Known.BrokenHeart },\n            { \"broom\", Emoji.Known.Broom },\n            { \"brown_circle\", Emoji.Known.BrownCircle },\n            { \"brown_heart\", Emoji.Known.BrownHeart },\n            { \"brown_square\", Emoji.Known.BrownSquare },\n            { \"bubbles\", Emoji.Known.Bubbles },\n            { \"bubble_tea\", Emoji.Known.BubbleTea },\n            { \"bucket\", Emoji.Known.Bucket },\n            { \"bug\", Emoji.Known.Bug },\n            { \"building_construction\", Emoji.Known.BuildingConstruction },\n            { \"bullet_train\", Emoji.Known.BulletTrain },\n            { \"bullseye\", Emoji.Known.Bullseye },\n            { \"burrito\", Emoji.Known.Burrito },\n            { \"bus\", Emoji.Known.Bus },\n            { \"bus_stop\", Emoji.Known.BusStop },\n            { \"bust_in_silhouette\", Emoji.Known.BustInSilhouette },\n            { \"busts_in_silhouette\", Emoji.Known.BustsInSilhouette },\n            { \"butter\", Emoji.Known.Butter },\n            { \"butterfly\", Emoji.Known.Butterfly },\n            { \"cactus\", Emoji.Known.Cactus },\n            { \"calendar\", Emoji.Known.Calendar },\n            { \"call_me_hand\", Emoji.Known.CallMeHand },\n            { \"camel\", Emoji.Known.Camel },\n            { \"camera\", Emoji.Known.Camera },\n            { \"camera_with_flash\", Emoji.Known.CameraWithFlash },\n            { \"camping\", Emoji.Known.Camping },\n            { \"cancer\", Emoji.Known.Cancer },\n            { \"candle\", Emoji.Known.Candle },\n            { \"candy\", Emoji.Known.Candy },\n            { \"canned_food\", Emoji.Known.CannedFood },\n            { \"canoe\", Emoji.Known.Canoe },\n            { \"capricorn\", Emoji.Known.Capricorn },\n            { \"card_file_box\", Emoji.Known.CardFileBox },\n            { \"card_index\", Emoji.Known.CardIndex },\n            { \"card_index_dividers\", Emoji.Known.CardIndexDividers },\n            { \"carousel_horse\", Emoji.Known.CarouselHorse },\n            { \"carpentry_saw\", Emoji.Known.CarpentrySaw },\n            { \"carp_streamer\", Emoji.Known.CarpStreamer },\n            { \"carrot\", Emoji.Known.Carrot },\n            { \"castle\", Emoji.Known.Castle },\n            { \"cat\", Emoji.Known.Cat },\n            { \"cat_face\", Emoji.Known.CatFace },\n            { \"cat_with_tears_of_joy\", Emoji.Known.CatWithTearsOfJoy },\n            { \"cat_with_wry_smile\", Emoji.Known.CatWithWrySmile },\n            { \"chains\", Emoji.Known.Chains },\n            { \"chair\", Emoji.Known.Chair },\n            { \"chart_decreasing\", Emoji.Known.ChartDecreasing },\n            { \"chart_increasing\", Emoji.Known.ChartIncreasing },\n            { \"chart_increasing_with_yen\", Emoji.Known.ChartIncreasingWithYen },\n            { \"check_box_with_check\", Emoji.Known.CheckBoxWithCheck },\n            { \"check_mark\", Emoji.Known.CheckMark },\n            { \"check_mark_button\", Emoji.Known.CheckMarkButton },\n            { \"cheese_wedge\", Emoji.Known.CheeseWedge },\n            { \"chequered_flag\", Emoji.Known.ChequeredFlag },\n            { \"cherries\", Emoji.Known.Cherries },\n            { \"cherry_blossom\", Emoji.Known.CherryBlossom },\n            { \"chess_pawn\", Emoji.Known.ChessPawn },\n            { \"chestnut\", Emoji.Known.Chestnut },\n            { \"chicken\", Emoji.Known.Chicken },\n            { \"child\", Emoji.Known.Child },\n            { \"children_crossing\", Emoji.Known.ChildrenCrossing },\n            { \"chipmunk\", Emoji.Known.Chipmunk },\n            { \"chocolate_bar\", Emoji.Known.ChocolateBar },\n            { \"chopsticks\", Emoji.Known.Chopsticks },\n            { \"christmas_tree\", Emoji.Known.ChristmasTree },\n            { \"church\", Emoji.Known.Church },\n            { \"cigarette\", Emoji.Known.Cigarette },\n            { \"cinema\", Emoji.Known.Cinema },\n            { \"circled_m\", Emoji.Known.CircledM },\n            { \"circus_tent\", Emoji.Known.CircusTent },\n            { \"cityscape\", Emoji.Known.Cityscape },\n            { \"cityscape_at_dusk\", Emoji.Known.CityscapeAtDusk },\n            { \"clamp\", Emoji.Known.Clamp },\n            { \"clapper_board\", Emoji.Known.ClapperBoard },\n            { \"clapping_hands\", Emoji.Known.ClappingHands },\n            { \"classical_building\", Emoji.Known.ClassicalBuilding },\n            { \"cl_button\", Emoji.Known.ClButton },\n            { \"clinking_beer_mugs\", Emoji.Known.ClinkingBeerMugs },\n            { \"clinking_glasses\", Emoji.Known.ClinkingGlasses },\n            { \"clipboard\", Emoji.Known.Clipboard },\n            { \"clockwise_vertical_arrows\", Emoji.Known.ClockwiseVerticalArrows },\n            { \"closed_book\", Emoji.Known.ClosedBook },\n            { \"closed_mailbox_with_lowered_flag\", Emoji.Known.ClosedMailboxWithLoweredFlag },\n            { \"closed_mailbox_with_raised_flag\", Emoji.Known.ClosedMailboxWithRaisedFlag },\n            { \"closed_umbrella\", Emoji.Known.ClosedUmbrella },\n            { \"cloud\", Emoji.Known.Cloud },\n            { \"cloud_with_lightning\", Emoji.Known.CloudWithLightning },\n            { \"cloud_with_lightning_and_rain\", Emoji.Known.CloudWithLightningAndRain },\n            { \"cloud_with_rain\", Emoji.Known.CloudWithRain },\n            { \"cloud_with_snow\", Emoji.Known.CloudWithSnow },\n            { \"clown_face\", Emoji.Known.ClownFace },\n            { \"club_suit\", Emoji.Known.ClubSuit },\n            { \"clutch_bag\", Emoji.Known.ClutchBag },\n            { \"coat\", Emoji.Known.Coat },\n            { \"cockroach\", Emoji.Known.Cockroach },\n            { \"cocktail_glass\", Emoji.Known.CocktailGlass },\n            { \"coconut\", Emoji.Known.Coconut },\n            { \"coffin\", Emoji.Known.Coffin },\n            { \"coin\", Emoji.Known.Coin },\n            { \"cold_face\", Emoji.Known.ColdFace },\n            { \"collision\", Emoji.Known.Collision },\n            { \"comet\", Emoji.Known.Comet },\n            { \"compass\", Emoji.Known.Compass },\n            { \"computer_disk\", Emoji.Known.ComputerDisk },\n            { \"computer_mouse\", Emoji.Known.ComputerMouse },\n            { \"confetti_ball\", Emoji.Known.ConfettiBall },\n            { \"confounded_face\", Emoji.Known.ConfoundedFace },\n            { \"confused_face\", Emoji.Known.ConfusedFace },\n            { \"construction\", Emoji.Known.Construction },\n            { \"construction_worker\", Emoji.Known.ConstructionWorker },\n            { \"control_knobs\", Emoji.Known.ControlKnobs },\n            { \"convenience_store\", Emoji.Known.ConvenienceStore },\n            { \"cooked_rice\", Emoji.Known.CookedRice },\n            { \"cookie\", Emoji.Known.Cookie },\n            { \"cooking\", Emoji.Known.Cooking },\n            { \"cool_button\", Emoji.Known.CoolButton },\n            { \"copyright\", Emoji.Known.Copyright },\n            { \"coral\", Emoji.Known.Coral },\n            { \"couch_and_lamp\", Emoji.Known.CouchAndLamp },\n            { \"counterclockwise_arrows_button\", Emoji.Known.CounterclockwiseArrowsButton },\n            { \"couple_with_heart\", Emoji.Known.CoupleWithHeart },\n            { \"cow\", Emoji.Known.Cow },\n            { \"cowboy_hat_face\", Emoji.Known.CowboyHatFace },\n            { \"cow_face\", Emoji.Known.CowFace },\n            { \"crab\", Emoji.Known.Crab },\n            { \"crayon\", Emoji.Known.Crayon },\n            { \"credit_card\", Emoji.Known.CreditCard },\n            { \"crescent_moon\", Emoji.Known.CrescentMoon },\n            { \"cricket\", Emoji.Known.Cricket },\n            { \"cricket_game\", Emoji.Known.CricketGame },\n            { \"crocodile\", Emoji.Known.Crocodile },\n            { \"croissant\", Emoji.Known.Croissant },\n            { \"crossed_fingers\", Emoji.Known.CrossedFingers },\n            { \"crossed_flags\", Emoji.Known.CrossedFlags },\n            { \"crossed_swords\", Emoji.Known.CrossedSwords },\n            { \"cross_mark\", Emoji.Known.CrossMark },\n            { \"cross_mark_button\", Emoji.Known.CrossMarkButton },\n            { \"crown\", Emoji.Known.Crown },\n            { \"crutch\", Emoji.Known.Crutch },\n            { \"crying_cat\", Emoji.Known.CryingCat },\n            { \"crying_face\", Emoji.Known.CryingFace },\n            { \"crystal_ball\", Emoji.Known.CrystalBall },\n            { \"cucumber\", Emoji.Known.Cucumber },\n            { \"cupcake\", Emoji.Known.Cupcake },\n            { \"cup_with_straw\", Emoji.Known.CupWithStraw },\n            { \"curling_stone\", Emoji.Known.CurlingStone },\n            { \"curly_hair\", Emoji.Known.CurlyHair },\n            { \"curly_loop\", Emoji.Known.CurlyLoop },\n            { \"currency_exchange\", Emoji.Known.CurrencyExchange },\n            { \"curry_rice\", Emoji.Known.CurryRice },\n            { \"custard\", Emoji.Known.Custard },\n            { \"customs\", Emoji.Known.Customs },\n            { \"cut_of_meat\", Emoji.Known.CutOfMeat },\n            { \"cyclone\", Emoji.Known.Cyclone },\n            { \"dagger\", Emoji.Known.Dagger },\n            { \"dango\", Emoji.Known.Dango },\n            { \"dark_skin_tone\", Emoji.Known.DarkSkinTone },\n            { \"dashing_away\", Emoji.Known.DashingAway },\n            { \"deaf_person\", Emoji.Known.DeafPerson },\n            { \"deciduous_tree\", Emoji.Known.DeciduousTree },\n            { \"deer\", Emoji.Known.Deer },\n            { \"delivery_truck\", Emoji.Known.DeliveryTruck },\n            { \"department_store\", Emoji.Known.DepartmentStore },\n            { \"derelict_house\", Emoji.Known.DerelictHouse },\n            { \"desert\", Emoji.Known.Desert },\n            { \"desert_island\", Emoji.Known.DesertIsland },\n            { \"desktop_computer\", Emoji.Known.DesktopComputer },\n            { \"detective\", Emoji.Known.Detective },\n            { \"diamond_suit\", Emoji.Known.DiamondSuit },\n            { \"diamond_with_a_dot\", Emoji.Known.DiamondWithADot },\n            { \"dim_button\", Emoji.Known.DimButton },\n            { \"disappointed_face\", Emoji.Known.DisappointedFace },\n            { \"disguised_face\", Emoji.Known.DisguisedFace },\n            { \"distorted_face\", Emoji.Known.DistortedFace },\n            { \"divide\", Emoji.Known.Divide },\n            { \"diving_mask\", Emoji.Known.DivingMask },\n            { \"diya_lamp\", Emoji.Known.DiyaLamp },\n            { \"dizzy\", Emoji.Known.Dizzy },\n            { \"dna\", Emoji.Known.Dna },\n            { \"dodo\", Emoji.Known.Dodo },\n            { \"dog\", Emoji.Known.Dog },\n            { \"dog_face\", Emoji.Known.DogFace },\n            { \"dollar_banknote\", Emoji.Known.DollarBanknote },\n            { \"dolphin\", Emoji.Known.Dolphin },\n            { \"donkey\", Emoji.Known.Donkey },\n            { \"door\", Emoji.Known.Door },\n            { \"dotted_line_face\", Emoji.Known.DottedLineFace },\n            { \"dotted_six_pointed_star\", Emoji.Known.DottedSixPointedStar },\n            { \"double_curly_loop\", Emoji.Known.DoubleCurlyLoop },\n            { \"double_exclamation_mark\", Emoji.Known.DoubleExclamationMark },\n            { \"doughnut\", Emoji.Known.Doughnut },\n            { \"dove\", Emoji.Known.Dove },\n            { \"down_arrow\", Emoji.Known.DownArrow },\n            { \"downcast_face_with_sweat\", Emoji.Known.DowncastFaceWithSweat },\n            { \"down_left_arrow\", Emoji.Known.DownLeftArrow },\n            { \"down_right_arrow\", Emoji.Known.DownRightArrow },\n            { \"downwards_button\", Emoji.Known.DownwardsButton },\n            { \"dragon\", Emoji.Known.Dragon },\n            { \"dragon_face\", Emoji.Known.DragonFace },\n            { \"dress\", Emoji.Known.Dress },\n            { \"drooling_face\", Emoji.Known.DroolingFace },\n            { \"droplet\", Emoji.Known.Droplet },\n            { \"drop_of_blood\", Emoji.Known.DropOfBlood },\n            { \"drum\", Emoji.Known.Drum },\n            { \"duck\", Emoji.Known.Duck },\n            { \"dumpling\", Emoji.Known.Dumpling },\n            { \"dvd\", Emoji.Known.Dvd },\n            { \"eagle\", Emoji.Known.Eagle },\n            { \"ear\", Emoji.Known.Ear },\n            { \"ear_of_corn\", Emoji.Known.EarOfCorn },\n            { \"ear_with_hearing_aid\", Emoji.Known.EarWithHearingAid },\n            { \"egg\", Emoji.Known.Egg },\n            { \"eggplant\", Emoji.Known.Eggplant },\n            { \"eight_o_clock\", Emoji.Known.EightOClock },\n            { \"eight_pointed_star\", Emoji.Known.EightPointedStar },\n            { \"eight_spoked_asterisk\", Emoji.Known.EightSpokedAsterisk },\n            { \"eight_thirty\", Emoji.Known.EightThirty },\n            { \"eject_button\", Emoji.Known.EjectButton },\n            { \"electric_plug\", Emoji.Known.ElectricPlug },\n            { \"elephant\", Emoji.Known.Elephant },\n            { \"elevator\", Emoji.Known.Elevator },\n            { \"eleven_o_clock\", Emoji.Known.ElevenOClock },\n            { \"eleven_thirty\", Emoji.Known.ElevenThirty },\n            { \"elf\", Emoji.Known.Elf },\n            { \"e_mail\", Emoji.Known.EMail },\n            { \"empty_nest\", Emoji.Known.EmptyNest },\n            { \"end_arrow\", Emoji.Known.EndArrow },\n            { \"enraged_face\", Emoji.Known.EnragedFace },\n            { \"envelope\", Emoji.Known.Envelope },\n            { \"envelope_with_arrow\", Emoji.Known.EnvelopeWithArrow },\n            { \"euro_banknote\", Emoji.Known.EuroBanknote },\n            { \"evergreen_tree\", Emoji.Known.EvergreenTree },\n            { \"ewe\", Emoji.Known.Ewe },\n            { \"exclamation_question_mark\", Emoji.Known.ExclamationQuestionMark },\n            { \"exploding_head\", Emoji.Known.ExplodingHead },\n            { \"expressionless_face\", Emoji.Known.ExpressionlessFace },\n            { \"eye\", Emoji.Known.Eye },\n            { \"eyes\", Emoji.Known.Eyes },\n            { \"face_blowing_a_kiss\", Emoji.Known.FaceBlowingAKiss },\n            { \"face_holding_back_tears\", Emoji.Known.FaceHoldingBackTears },\n            { \"face_savoring_food\", Emoji.Known.FaceSavoringFood },\n            { \"face_screaming_in_fear\", Emoji.Known.FaceScreamingInFear },\n            { \"face_vomiting\", Emoji.Known.FaceVomiting },\n            { \"face_with_bags_under_eyes\", Emoji.Known.FaceWithBagsUnderEyes },\n            { \"face_with_crossed_out_eyes\", Emoji.Known.FaceWithCrossedOutEyes },\n            { \"face_with_diagonal_mouth\", Emoji.Known.FaceWithDiagonalMouth },\n            { \"face_with_hand_over_mouth\", Emoji.Known.FaceWithHandOverMouth },\n            { \"face_with_head_bandage\", Emoji.Known.FaceWithHeadBandage },\n            { \"face_with_medical_mask\", Emoji.Known.FaceWithMedicalMask },\n            { \"face_with_monocle\", Emoji.Known.FaceWithMonocle },\n            { \"face_with_open_eyes_and_hand_over_mouth\", Emoji.Known.FaceWithOpenEyesAndHandOverMouth },\n            { \"face_with_open_mouth\", Emoji.Known.FaceWithOpenMouth },\n            { \"face_without_mouth\", Emoji.Known.FaceWithoutMouth },\n            { \"face_with_peeking_eye\", Emoji.Known.FaceWithPeekingEye },\n            { \"face_with_raised_eyebrow\", Emoji.Known.FaceWithRaisedEyebrow },\n            { \"face_with_rolling_eyes\", Emoji.Known.FaceWithRollingEyes },\n            { \"face_with_steam_from_nose\", Emoji.Known.FaceWithSteamFromNose },\n            { \"face_with_symbols_on_mouth\", Emoji.Known.FaceWithSymbolsOnMouth },\n            { \"face_with_tears_of_joy\", Emoji.Known.FaceWithTearsOfJoy },\n            { \"face_with_thermometer\", Emoji.Known.FaceWithThermometer },\n            { \"face_with_tongue\", Emoji.Known.FaceWithTongue },\n            { \"factory\", Emoji.Known.Factory },\n            { \"fairy\", Emoji.Known.Fairy },\n            { \"falafel\", Emoji.Known.Falafel },\n            { \"fallen_leaf\", Emoji.Known.FallenLeaf },\n            { \"family\", Emoji.Known.Family },\n            { \"fast_down_button\", Emoji.Known.FastDownButton },\n            { \"fast_forward_button\", Emoji.Known.FastForwardButton },\n            { \"fast_reverse_button\", Emoji.Known.FastReverseButton },\n            { \"fast_up_button\", Emoji.Known.FastUpButton },\n            { \"fax_machine\", Emoji.Known.FaxMachine },\n            { \"fearful_face\", Emoji.Known.FearfulFace },\n            { \"feather\", Emoji.Known.Feather },\n            { \"female_sign\", Emoji.Known.FemaleSign },\n            { \"ferris_wheel\", Emoji.Known.FerrisWheel },\n            { \"ferry\", Emoji.Known.Ferry },\n            { \"field_hockey\", Emoji.Known.FieldHockey },\n            { \"fight_cloud\", Emoji.Known.FightCloud },\n            { \"file_cabinet\", Emoji.Known.FileCabinet },\n            { \"file_folder\", Emoji.Known.FileFolder },\n            { \"film_frames\", Emoji.Known.FilmFrames },\n            { \"film_projector\", Emoji.Known.FilmProjector },\n            { \"fingerprint\", Emoji.Known.Fingerprint },\n            { \"fire\", Emoji.Known.Fire },\n            { \"firecracker\", Emoji.Known.Firecracker },\n            { \"fire_engine\", Emoji.Known.FireEngine },\n            { \"fire_extinguisher\", Emoji.Known.FireExtinguisher },\n            { \"fireworks\", Emoji.Known.Fireworks },\n            { \"1st_place_medal\", Emoji.Known.FirstPlaceMedal },\n            { \"first_quarter_moon\", Emoji.Known.FirstQuarterMoon },\n            { \"first_quarter_moon_face\", Emoji.Known.FirstQuarterMoonFace },\n            { \"fish\", Emoji.Known.Fish },\n            { \"fish_cake_with_swirl\", Emoji.Known.FishCakeWithSwirl },\n            { \"fishing_pole\", Emoji.Known.FishingPole },\n            { \"five_o_clock\", Emoji.Known.FiveOClock },\n            { \"five_thirty\", Emoji.Known.FiveThirty },\n            { \"flag_in_hole\", Emoji.Known.FlagInHole },\n            { \"flamingo\", Emoji.Known.Flamingo },\n            { \"flashlight\", Emoji.Known.Flashlight },\n            { \"flatbread\", Emoji.Known.Flatbread },\n            { \"flat_shoe\", Emoji.Known.FlatShoe },\n            { \"fleur_de_lis\", Emoji.Known.FleurDeLis },\n            { \"flexed_biceps\", Emoji.Known.FlexedBiceps },\n            { \"floppy_disk\", Emoji.Known.FloppyDisk },\n            { \"flower_playing_cards\", Emoji.Known.FlowerPlayingCards },\n            { \"flushed_face\", Emoji.Known.FlushedFace },\n            { \"flute\", Emoji.Known.Flute },\n            { \"fly\", Emoji.Known.Fly },\n            { \"flying_disc\", Emoji.Known.FlyingDisc },\n            { \"flying_saucer\", Emoji.Known.FlyingSaucer },\n            { \"fog\", Emoji.Known.Fog },\n            { \"foggy\", Emoji.Known.Foggy },\n            { \"folded_hands\", Emoji.Known.FoldedHands },\n            { \"folding_hand_fan\", Emoji.Known.FoldingHandFan },\n            { \"fondue\", Emoji.Known.Fondue },\n            { \"foot\", Emoji.Known.Foot },\n            { \"footprints\", Emoji.Known.Footprints },\n            { \"fork_and_knife\", Emoji.Known.ForkAndKnife },\n            { \"fork_and_knife_with_plate\", Emoji.Known.ForkAndKnifeWithPlate },\n            { \"fortune_cookie\", Emoji.Known.FortuneCookie },\n            { \"fountain\", Emoji.Known.Fountain },\n            { \"fountain_pen\", Emoji.Known.FountainPen },\n            { \"four_leaf_clover\", Emoji.Known.FourLeafClover },\n            { \"four_o_clock\", Emoji.Known.FourOClock },\n            { \"four_thirty\", Emoji.Known.FourThirty },\n            { \"fox\", Emoji.Known.Fox },\n            { \"framed_picture\", Emoji.Known.FramedPicture },\n            { \"free_button\", Emoji.Known.FreeButton },\n            { \"french_fries\", Emoji.Known.FrenchFries },\n            { \"fried_shrimp\", Emoji.Known.FriedShrimp },\n            { \"frog\", Emoji.Known.Frog },\n            { \"front_facing_baby_chick\", Emoji.Known.FrontFacingBabyChick },\n            { \"frowning_face\", Emoji.Known.FrowningFace },\n            { \"frowning_face_with_open_mouth\", Emoji.Known.FrowningFaceWithOpenMouth },\n            { \"fuel_pump\", Emoji.Known.FuelPump },\n            { \"full_moon\", Emoji.Known.FullMoon },\n            { \"full_moon_face\", Emoji.Known.FullMoonFace },\n            { \"funeral_urn\", Emoji.Known.FuneralUrn },\n            { \"game_die\", Emoji.Known.GameDie },\n            { \"garlic\", Emoji.Known.Garlic },\n            { \"gear\", Emoji.Known.Gear },\n            { \"gemini\", Emoji.Known.Gemini },\n            { \"gem_stone\", Emoji.Known.GemStone },\n            { \"genie\", Emoji.Known.Genie },\n            { \"ghost\", Emoji.Known.Ghost },\n            { \"ginger_root\", Emoji.Known.GingerRoot },\n            { \"giraffe\", Emoji.Known.Giraffe },\n            { \"girl\", Emoji.Known.Girl },\n            { \"glasses\", Emoji.Known.Glasses },\n            { \"glass_of_milk\", Emoji.Known.GlassOfMilk },\n            { \"globe_showing_americas\", Emoji.Known.GlobeShowingAmericas },\n            { \"globe_showing_asia_australia\", Emoji.Known.GlobeShowingAsiaAustralia },\n            { \"globe_showing_europe_africa\", Emoji.Known.GlobeShowingEuropeAfrica },\n            { \"globe_with_meridians\", Emoji.Known.GlobeWithMeridians },\n            { \"gloves\", Emoji.Known.Gloves },\n            { \"glowing_star\", Emoji.Known.GlowingStar },\n            { \"goal_net\", Emoji.Known.GoalNet },\n            { \"goat\", Emoji.Known.Goat },\n            { \"goblin\", Emoji.Known.Goblin },\n            { \"goggles\", Emoji.Known.Goggles },\n            { \"goose\", Emoji.Known.Goose },\n            { \"gorilla\", Emoji.Known.Gorilla },\n            { \"graduation_cap\", Emoji.Known.GraduationCap },\n            { \"grapes\", Emoji.Known.Grapes },\n            { \"green_apple\", Emoji.Known.GreenApple },\n            { \"green_book\", Emoji.Known.GreenBook },\n            { \"green_circle\", Emoji.Known.GreenCircle },\n            { \"green_heart\", Emoji.Known.GreenHeart },\n            { \"green_salad\", Emoji.Known.GreenSalad },\n            { \"green_square\", Emoji.Known.GreenSquare },\n            { \"grey_heart\", Emoji.Known.GreyHeart },\n            { \"grimacing_face\", Emoji.Known.GrimacingFace },\n            { \"grinning_cat\", Emoji.Known.GrinningCat },\n            { \"grinning_cat_with_smiling_eyes\", Emoji.Known.GrinningCatWithSmilingEyes },\n            { \"grinning_face\", Emoji.Known.GrinningFace },\n            { \"grinning_face_with_big_eyes\", Emoji.Known.GrinningFaceWithBigEyes },\n            { \"grinning_face_with_smiling_eyes\", Emoji.Known.GrinningFaceWithSmilingEyes },\n            { \"grinning_face_with_sweat\", Emoji.Known.GrinningFaceWithSweat },\n            { \"grinning_squinting_face\", Emoji.Known.GrinningSquintingFace },\n            { \"growing_heart\", Emoji.Known.GrowingHeart },\n            { \"guard\", Emoji.Known.Guard },\n            { \"guide_dog\", Emoji.Known.GuideDog },\n            { \"guitar\", Emoji.Known.Guitar },\n            { \"hair_pick\", Emoji.Known.HairPick },\n            { \"hairy_creature\", Emoji.Known.HairyCreature },\n            { \"hamburger\", Emoji.Known.Hamburger },\n            { \"hammer\", Emoji.Known.Hammer },\n            { \"hammer_and_pick\", Emoji.Known.HammerAndPick },\n            { \"hammer_and_wrench\", Emoji.Known.HammerAndWrench },\n            { \"hamsa\", Emoji.Known.Hamsa },\n            { \"hamster\", Emoji.Known.Hamster },\n            { \"handbag\", Emoji.Known.Handbag },\n            { \"handshake\", Emoji.Known.Handshake },\n            { \"hand_with_fingers_splayed\", Emoji.Known.HandWithFingersSplayed },\n            { \"hand_with_index_finger_and_thumb_crossed\", Emoji.Known.HandWithIndexFingerAndThumbCrossed },\n            { \"harp\", Emoji.Known.Harp },\n            { \"hatching_chick\", Emoji.Known.HatchingChick },\n            { \"headphone\", Emoji.Known.Headphone },\n            { \"headstone\", Emoji.Known.Headstone },\n            { \"hear_no_evil_monkey\", Emoji.Known.HearNoEvilMonkey },\n            { \"heart_decoration\", Emoji.Known.HeartDecoration },\n            { \"heart_exclamation\", Emoji.Known.HeartExclamation },\n            { \"heart_hands\", Emoji.Known.HeartHands },\n            { \"heart_suit\", Emoji.Known.HeartSuit },\n            { \"heart_with_arrow\", Emoji.Known.HeartWithArrow },\n            { \"heart_with_ribbon\", Emoji.Known.HeartWithRibbon },\n            { \"heavy_dollar_sign\", Emoji.Known.HeavyDollarSign },\n            { \"heavy_equals_sign\", Emoji.Known.HeavyEqualsSign },\n            { \"hedgehog\", Emoji.Known.Hedgehog },\n            { \"helicopter\", Emoji.Known.Helicopter },\n            { \"herb\", Emoji.Known.Herb },\n            { \"hibiscus\", Emoji.Known.Hibiscus },\n            { \"high_heeled_shoe\", Emoji.Known.HighHeeledShoe },\n            { \"high_speed_train\", Emoji.Known.HighSpeedTrain },\n            { \"high_voltage\", Emoji.Known.HighVoltage },\n            { \"hiking_boot\", Emoji.Known.HikingBoot },\n            { \"hindu_temple\", Emoji.Known.HinduTemple },\n            { \"hippopotamus\", Emoji.Known.Hippopotamus },\n            { \"hole\", Emoji.Known.Hole },\n            { \"hollow_red_circle\", Emoji.Known.HollowRedCircle },\n            { \"honeybee\", Emoji.Known.Honeybee },\n            { \"honey_pot\", Emoji.Known.HoneyPot },\n            { \"hook\", Emoji.Known.Hook },\n            { \"horizontal_traffic_light\", Emoji.Known.HorizontalTrafficLight },\n            { \"horse\", Emoji.Known.Horse },\n            { \"horse_face\", Emoji.Known.HorseFace },\n            { \"horse_racing\", Emoji.Known.HorseRacing },\n            { \"hospital\", Emoji.Known.Hospital },\n            { \"hot_beverage\", Emoji.Known.HotBeverage },\n            { \"hot_dog\", Emoji.Known.HotDog },\n            { \"hotel\", Emoji.Known.Hotel },\n            { \"hot_face\", Emoji.Known.HotFace },\n            { \"hot_pepper\", Emoji.Known.HotPepper },\n            { \"hot_springs\", Emoji.Known.HotSprings },\n            { \"hourglass_done\", Emoji.Known.HourglassDone },\n            { \"hourglass_not_done\", Emoji.Known.HourglassNotDone },\n            { \"house\", Emoji.Known.House },\n            { \"houses\", Emoji.Known.Houses },\n            { \"house_with_garden\", Emoji.Known.HouseWithGarden },\n            { \"hundred_points\", Emoji.Known.HundredPoints },\n            { \"hushed_face\", Emoji.Known.HushedFace },\n            { \"hut\", Emoji.Known.Hut },\n            { \"hyacinth\", Emoji.Known.Hyacinth },\n            { \"ice\", Emoji.Known.Ice },\n            { \"ice_cream\", Emoji.Known.IceCream },\n            { \"ice_hockey\", Emoji.Known.IceHockey },\n            { \"ice_skate\", Emoji.Known.IceSkate },\n            { \"id_button\", Emoji.Known.IdButton },\n            { \"identification_card\", Emoji.Known.IdentificationCard },\n            { \"inbox_tray\", Emoji.Known.InboxTray },\n            { \"incoming_envelope\", Emoji.Known.IncomingEnvelope },\n            { \"index_pointing_at_the_viewer\", Emoji.Known.IndexPointingAtTheViewer },\n            { \"index_pointing_up\", Emoji.Known.IndexPointingUp },\n            { \"infinity\", Emoji.Known.Infinity },\n            { \"information\", Emoji.Known.Information },\n            { \"input_latin_letters\", Emoji.Known.InputLatinLetters },\n            { \"input_latin_lowercase\", Emoji.Known.InputLatinLowercase },\n            { \"input_latin_uppercase\", Emoji.Known.InputLatinUppercase },\n            { \"input_numbers\", Emoji.Known.InputNumbers },\n            { \"input_symbols\", Emoji.Known.InputSymbols },\n            { \"jack_o_lantern\", Emoji.Known.JackOLantern },\n            { \"japanese_acceptable_button\", Emoji.Known.JapaneseAcceptableButton },\n            { \"japanese_application_button\", Emoji.Known.JapaneseApplicationButton },\n            { \"japanese_bargain_button\", Emoji.Known.JapaneseBargainButton },\n            { \"japanese_castle\", Emoji.Known.JapaneseCastle },\n            { \"japanese_congratulations_button\", Emoji.Known.JapaneseCongratulationsButton },\n            { \"japanese_discount_button\", Emoji.Known.JapaneseDiscountButton },\n            { \"japanese_dolls\", Emoji.Known.JapaneseDolls },\n            { \"japanese_free_of_charge_button\", Emoji.Known.JapaneseFreeOfChargeButton },\n            { \"japanese_here_button\", Emoji.Known.JapaneseHereButton },\n            { \"japanese_monthly_amount_button\", Emoji.Known.JapaneseMonthlyAmountButton },\n            { \"japanese_not_free_of_charge_button\", Emoji.Known.JapaneseNotFreeOfChargeButton },\n            { \"japanese_no_vacancy_button\", Emoji.Known.JapaneseNoVacancyButton },\n            { \"japanese_open_for_business_button\", Emoji.Known.JapaneseOpenForBusinessButton },\n            { \"japanese_passing_grade_button\", Emoji.Known.JapanesePassingGradeButton },\n            { \"japanese_post_office\", Emoji.Known.JapanesePostOffice },\n            { \"japanese_prohibited_button\", Emoji.Known.JapaneseProhibitedButton },\n            { \"japanese_reserved_button\", Emoji.Known.JapaneseReservedButton },\n            { \"japanese_secret_button\", Emoji.Known.JapaneseSecretButton },\n            { \"japanese_service_charge_button\", Emoji.Known.JapaneseServiceChargeButton },\n            { \"japanese_symbol_for_beginner\", Emoji.Known.JapaneseSymbolForBeginner },\n            { \"japanese_vacancy_button\", Emoji.Known.JapaneseVacancyButton },\n            { \"jar\", Emoji.Known.Jar },\n            { \"jeans\", Emoji.Known.Jeans },\n            { \"jellyfish\", Emoji.Known.Jellyfish },\n            { \"joker\", Emoji.Known.Joker },\n            { \"joystick\", Emoji.Known.Joystick },\n            { \"kaaba\", Emoji.Known.Kaaba },\n            { \"kangaroo\", Emoji.Known.Kangaroo },\n            { \"key\", Emoji.Known.Key },\n            { \"keyboard\", Emoji.Known.Keyboard },\n            { \"keycap_10\", Emoji.Known.Keycap10 },\n            { \"khanda\", Emoji.Known.Khanda },\n            { \"kick_scooter\", Emoji.Known.KickScooter },\n            { \"kimono\", Emoji.Known.Kimono },\n            { \"kiss\", Emoji.Known.Kiss },\n            { \"kissing_cat\", Emoji.Known.KissingCat },\n            { \"kissing_face\", Emoji.Known.KissingFace },\n            { \"kissing_face_with_closed_eyes\", Emoji.Known.KissingFaceWithClosedEyes },\n            { \"kissing_face_with_smiling_eyes\", Emoji.Known.KissingFaceWithSmilingEyes },\n            { \"kiss_mark\", Emoji.Known.KissMark },\n            { \"kitchen_knife\", Emoji.Known.KitchenKnife },\n            { \"kite\", Emoji.Known.Kite },\n            { \"kiwi_fruit\", Emoji.Known.KiwiFruit },\n            { \"knot\", Emoji.Known.Knot },\n            { \"koala\", Emoji.Known.Koala },\n            { \"lab_coat\", Emoji.Known.LabCoat },\n            { \"label\", Emoji.Known.Label },\n            { \"lacrosse\", Emoji.Known.Lacrosse },\n            { \"ladder\", Emoji.Known.Ladder },\n            { \"lady_beetle\", Emoji.Known.LadyBeetle },\n            { \"landslide\", Emoji.Known.Landslide },\n            { \"laptop\", Emoji.Known.Laptop },\n            { \"large_blue_diamond\", Emoji.Known.LargeBlueDiamond },\n            { \"large_orange_diamond\", Emoji.Known.LargeOrangeDiamond },\n            { \"last_quarter_moon\", Emoji.Known.LastQuarterMoon },\n            { \"last_quarter_moon_face\", Emoji.Known.LastQuarterMoonFace },\n            { \"last_track_button\", Emoji.Known.LastTrackButton },\n            { \"latin_cross\", Emoji.Known.LatinCross },\n            { \"leaf_fluttering_in_wind\", Emoji.Known.LeafFlutteringInWind },\n            { \"leafless_tree\", Emoji.Known.LeaflessTree },\n            { \"leafy_green\", Emoji.Known.LeafyGreen },\n            { \"ledger\", Emoji.Known.Ledger },\n            { \"left_arrow\", Emoji.Known.LeftArrow },\n            { \"left_arrow_curving_right\", Emoji.Known.LeftArrowCurvingRight },\n            { \"left_facing_fist\", Emoji.Known.LeftFacingFist },\n            { \"left_luggage\", Emoji.Known.LeftLuggage },\n            { \"left_right_arrow\", Emoji.Known.LeftRightArrow },\n            { \"left_speech_bubble\", Emoji.Known.LeftSpeechBubble },\n            { \"leftwards_hand\", Emoji.Known.LeftwardsHand },\n            { \"leftwards_pushing_hand\", Emoji.Known.LeftwardsPushingHand },\n            { \"leg\", Emoji.Known.Leg },\n            { \"lemon\", Emoji.Known.Lemon },\n            { \"leo\", Emoji.Known.Leo },\n            { \"leopard\", Emoji.Known.Leopard },\n            { \"level_slider\", Emoji.Known.LevelSlider },\n            { \"libra\", Emoji.Known.Libra },\n            { \"light_blue_heart\", Emoji.Known.LightBlueHeart },\n            { \"light_bulb\", Emoji.Known.LightBulb },\n            { \"light_rail\", Emoji.Known.LightRail },\n            { \"light_skin_tone\", Emoji.Known.LightSkinTone },\n            { \"link\", Emoji.Known.Link },\n            { \"linked_paperclips\", Emoji.Known.LinkedPaperclips },\n            { \"lion\", Emoji.Known.Lion },\n            { \"lipstick\", Emoji.Known.Lipstick },\n            { \"litter_in_bin_sign\", Emoji.Known.LitterInBinSign },\n            { \"lizard\", Emoji.Known.Lizard },\n            { \"llama\", Emoji.Known.Llama },\n            { \"lobster\", Emoji.Known.Lobster },\n            { \"locked\", Emoji.Known.Locked },\n            { \"locked_with_key\", Emoji.Known.LockedWithKey },\n            { \"locked_with_pen\", Emoji.Known.LockedWithPen },\n            { \"locomotive\", Emoji.Known.Locomotive },\n            { \"lollipop\", Emoji.Known.Lollipop },\n            { \"long_drum\", Emoji.Known.LongDrum },\n            { \"lotion_bottle\", Emoji.Known.LotionBottle },\n            { \"lotus\", Emoji.Known.Lotus },\n            { \"loudly_crying_face\", Emoji.Known.LoudlyCryingFace },\n            { \"loudspeaker\", Emoji.Known.Loudspeaker },\n            { \"love_hotel\", Emoji.Known.LoveHotel },\n            { \"love_letter\", Emoji.Known.LoveLetter },\n            { \"love_you_gesture\", Emoji.Known.LoveYouGesture },\n            { \"low_battery\", Emoji.Known.LowBattery },\n            { \"luggage\", Emoji.Known.Luggage },\n            { \"lungs\", Emoji.Known.Lungs },\n            { \"lying_face\", Emoji.Known.LyingFace },\n            { \"mage\", Emoji.Known.Mage },\n            { \"magic_wand\", Emoji.Known.MagicWand },\n            { \"magnet\", Emoji.Known.Magnet },\n            { \"magnifying_glass_tilted_left\", Emoji.Known.MagnifyingGlassTiltedLeft },\n            { \"magnifying_glass_tilted_right\", Emoji.Known.MagnifyingGlassTiltedRight },\n            { \"mahjong_red_dragon\", Emoji.Known.MahjongRedDragon },\n            { \"male_sign\", Emoji.Known.MaleSign },\n            { \"mammoth\", Emoji.Known.Mammoth },\n            { \"man\", Emoji.Known.Man },\n            { \"man_dancing\", Emoji.Known.ManDancing },\n            { \"mango\", Emoji.Known.Mango },\n            { \"mans_shoe\", Emoji.Known.MansShoe },\n            { \"mantelpiece_clock\", Emoji.Known.MantelpieceClock },\n            { \"manual_wheelchair\", Emoji.Known.ManualWheelchair },\n            { \"maple_leaf\", Emoji.Known.MapleLeaf },\n            { \"map_of_japan\", Emoji.Known.MapOfJapan },\n            { \"maracas\", Emoji.Known.Maracas },\n            { \"martial_arts_uniform\", Emoji.Known.MartialArtsUniform },\n            { \"mate\", Emoji.Known.Mate },\n            { \"meat_on_bone\", Emoji.Known.MeatOnBone },\n            { \"mechanical_arm\", Emoji.Known.MechanicalArm },\n            { \"mechanical_leg\", Emoji.Known.MechanicalLeg },\n            { \"medical_symbol\", Emoji.Known.MedicalSymbol },\n            { \"medium_dark_skin_tone\", Emoji.Known.MediumDarkSkinTone },\n            { \"medium_light_skin_tone\", Emoji.Known.MediumLightSkinTone },\n            { \"medium_skin_tone\", Emoji.Known.MediumSkinTone },\n            { \"megaphone\", Emoji.Known.Megaphone },\n            { \"melon\", Emoji.Known.Melon },\n            { \"melting_face\", Emoji.Known.MeltingFace },\n            { \"memo\", Emoji.Known.Memo },\n            { \"men_holding_hands\", Emoji.Known.MenHoldingHands },\n            { \"menorah\", Emoji.Known.Menorah },\n            { \"mens_room\", Emoji.Known.MensRoom },\n            { \"merperson\", Emoji.Known.Merperson },\n            { \"metro\", Emoji.Known.Metro },\n            { \"microbe\", Emoji.Known.Microbe },\n            { \"microphone\", Emoji.Known.Microphone },\n            { \"microscope\", Emoji.Known.Microscope },\n            { \"middle_finger\", Emoji.Known.MiddleFinger },\n            { \"military_helmet\", Emoji.Known.MilitaryHelmet },\n            { \"military_medal\", Emoji.Known.MilitaryMedal },\n            { \"milky_way\", Emoji.Known.MilkyWay },\n            { \"minibus\", Emoji.Known.Minibus },\n            { \"minus\", Emoji.Known.Minus },\n            { \"mirror\", Emoji.Known.Mirror },\n            { \"mirror_ball\", Emoji.Known.MirrorBall },\n            { \"moai\", Emoji.Known.Moai },\n            { \"mobile_phone\", Emoji.Known.MobilePhone },\n            { \"mobile_phone_off\", Emoji.Known.MobilePhoneOff },\n            { \"mobile_phone_with_arrow\", Emoji.Known.MobilePhoneWithArrow },\n            { \"money_bag\", Emoji.Known.MoneyBag },\n            { \"money_mouth_face\", Emoji.Known.MoneyMouthFace },\n            { \"money_with_wings\", Emoji.Known.MoneyWithWings },\n            { \"monkey\", Emoji.Known.Monkey },\n            { \"monkey_face\", Emoji.Known.MonkeyFace },\n            { \"monorail\", Emoji.Known.Monorail },\n            { \"moon_cake\", Emoji.Known.MoonCake },\n            { \"moon_viewing_ceremony\", Emoji.Known.MoonViewingCeremony },\n            { \"moose\", Emoji.Known.Moose },\n            { \"mosque\", Emoji.Known.Mosque },\n            { \"mosquito\", Emoji.Known.Mosquito },\n            { \"motor_boat\", Emoji.Known.MotorBoat },\n            { \"motorcycle\", Emoji.Known.Motorcycle },\n            { \"motorized_wheelchair\", Emoji.Known.MotorizedWheelchair },\n            { \"motor_scooter\", Emoji.Known.MotorScooter },\n            { \"motorway\", Emoji.Known.Motorway },\n            { \"mountain\", Emoji.Known.Mountain },\n            { \"mountain_cableway\", Emoji.Known.MountainCableway },\n            { \"mountain_railway\", Emoji.Known.MountainRailway },\n            { \"mount_fuji\", Emoji.Known.MountFuji },\n            { \"mouse\", Emoji.Known.Mouse },\n            { \"mouse_face\", Emoji.Known.MouseFace },\n            { \"mouse_trap\", Emoji.Known.MouseTrap },\n            { \"mouth\", Emoji.Known.Mouth },\n            { \"movie_camera\", Emoji.Known.MovieCamera },\n            { \"mrs_claus\", Emoji.Known.MrsClaus },\n            { \"multiply\", Emoji.Known.Multiply },\n            { \"mushroom\", Emoji.Known.Mushroom },\n            { \"musical_keyboard\", Emoji.Known.MusicalKeyboard },\n            { \"musical_note\", Emoji.Known.MusicalNote },\n            { \"musical_notes\", Emoji.Known.MusicalNotes },\n            { \"musical_score\", Emoji.Known.MusicalScore },\n            { \"muted_speaker\", Emoji.Known.MutedSpeaker },\n            { \"nail_polish\", Emoji.Known.NailPolish },\n            { \"name_badge\", Emoji.Known.NameBadge },\n            { \"national_park\", Emoji.Known.NationalPark },\n            { \"nauseated_face\", Emoji.Known.NauseatedFace },\n            { \"nazar_amulet\", Emoji.Known.NazarAmulet },\n            { \"necktie\", Emoji.Known.Necktie },\n            { \"nerd_face\", Emoji.Known.NerdFace },\n            { \"nesting_dolls\", Emoji.Known.NestingDolls },\n            { \"nest_with_eggs\", Emoji.Known.NestWithEggs },\n            { \"neutral_face\", Emoji.Known.NeutralFace },\n            { \"new_button\", Emoji.Known.NewButton },\n            { \"new_moon\", Emoji.Known.NewMoon },\n            { \"new_moon_face\", Emoji.Known.NewMoonFace },\n            { \"newspaper\", Emoji.Known.Newspaper },\n            { \"next_track_button\", Emoji.Known.NextTrackButton },\n            { \"ng_button\", Emoji.Known.NgButton },\n            { \"night_with_stars\", Emoji.Known.NightWithStars },\n            { \"nine_o_clock\", Emoji.Known.NineOClock },\n            { \"nine_thirty\", Emoji.Known.NineThirty },\n            { \"ninja\", Emoji.Known.Ninja },\n            { \"no_bicycles\", Emoji.Known.NoBicycles },\n            { \"no_entry\", Emoji.Known.NoEntry },\n            { \"no_littering\", Emoji.Known.NoLittering },\n            { \"no_mobile_phones\", Emoji.Known.NoMobilePhones },\n            { \"non_potable_water\", Emoji.Known.NonPotableWater },\n            { \"no_one_under_eighteen\", Emoji.Known.NoOneUnderEighteen },\n            { \"no_pedestrians\", Emoji.Known.NoPedestrians },\n            { \"nose\", Emoji.Known.Nose },\n            { \"no_smoking\", Emoji.Known.NoSmoking },\n            { \"notebook\", Emoji.Known.Notebook },\n            { \"notebook_with_decorative_cover\", Emoji.Known.NotebookWithDecorativeCover },\n            { \"nut_and_bolt\", Emoji.Known.NutAndBolt },\n            { \"o_button_blood_type\", Emoji.Known.OButtonBloodType },\n            { \"octopus\", Emoji.Known.Octopus },\n            { \"oden\", Emoji.Known.Oden },\n            { \"office_building\", Emoji.Known.OfficeBuilding },\n            { \"ogre\", Emoji.Known.Ogre },\n            { \"oil_drum\", Emoji.Known.OilDrum },\n            { \"ok_button\", Emoji.Known.OkButton },\n            { \"ok_hand\", Emoji.Known.OkHand },\n            { \"older_person\", Emoji.Known.OlderPerson },\n            { \"old_key\", Emoji.Known.OldKey },\n            { \"old_man\", Emoji.Known.OldMan },\n            { \"old_woman\", Emoji.Known.OldWoman },\n            { \"olive\", Emoji.Known.Olive },\n            { \"om\", Emoji.Known.Om },\n            { \"on_arrow\", Emoji.Known.OnArrow },\n            { \"oncoming_automobile\", Emoji.Known.OncomingAutomobile },\n            { \"oncoming_bus\", Emoji.Known.OncomingBus },\n            { \"oncoming_fist\", Emoji.Known.OncomingFist },\n            { \"oncoming_police_car\", Emoji.Known.OncomingPoliceCar },\n            { \"oncoming_taxi\", Emoji.Known.OncomingTaxi },\n            { \"one_o_clock\", Emoji.Known.OneOClock },\n            { \"one_piece_swimsuit\", Emoji.Known.OnePieceSwimsuit },\n            { \"one_thirty\", Emoji.Known.OneThirty },\n            { \"onion\", Emoji.Known.Onion },\n            { \"open_book\", Emoji.Known.OpenBook },\n            { \"open_file_folder\", Emoji.Known.OpenFileFolder },\n            { \"open_hands\", Emoji.Known.OpenHands },\n            { \"open_mailbox_with_lowered_flag\", Emoji.Known.OpenMailboxWithLoweredFlag },\n            { \"open_mailbox_with_raised_flag\", Emoji.Known.OpenMailboxWithRaisedFlag },\n            { \"ophiuchus\", Emoji.Known.Ophiuchus },\n            { \"optical_disk\", Emoji.Known.OpticalDisk },\n            { \"orange_book\", Emoji.Known.OrangeBook },\n            { \"orange_circle\", Emoji.Known.OrangeCircle },\n            { \"orange_heart\", Emoji.Known.OrangeHeart },\n            { \"orange_square\", Emoji.Known.OrangeSquare },\n            { \"orangutan\", Emoji.Known.Orangutan },\n            { \"orca\", Emoji.Known.Orca },\n            { \"orthodox_cross\", Emoji.Known.OrthodoxCross },\n            { \"otter\", Emoji.Known.Otter },\n            { \"outbox_tray\", Emoji.Known.OutboxTray },\n            { \"owl\", Emoji.Known.Owl },\n            { \"ox\", Emoji.Known.Ox },\n            { \"oyster\", Emoji.Known.Oyster },\n            { \"package\", Emoji.Known.Package },\n            { \"page_facing_up\", Emoji.Known.PageFacingUp },\n            { \"pager\", Emoji.Known.Pager },\n            { \"page_with_curl\", Emoji.Known.PageWithCurl },\n            { \"paintbrush\", Emoji.Known.Paintbrush },\n            { \"palm_down_hand\", Emoji.Known.PalmDownHand },\n            { \"palms_up_together\", Emoji.Known.PalmsUpTogether },\n            { \"palm_tree\", Emoji.Known.PalmTree },\n            { \"palm_up_hand\", Emoji.Known.PalmUpHand },\n            { \"pancakes\", Emoji.Known.Pancakes },\n            { \"panda\", Emoji.Known.Panda },\n            { \"paperclip\", Emoji.Known.Paperclip },\n            { \"parachute\", Emoji.Known.Parachute },\n            { \"parrot\", Emoji.Known.Parrot },\n            { \"part_alternation_mark\", Emoji.Known.PartAlternationMark },\n            { \"partying_face\", Emoji.Known.PartyingFace },\n            { \"party_popper\", Emoji.Known.PartyPopper },\n            { \"passenger_ship\", Emoji.Known.PassengerShip },\n            { \"passport_control\", Emoji.Known.PassportControl },\n            { \"pause_button\", Emoji.Known.PauseButton },\n            { \"paw_prints\", Emoji.Known.PawPrints },\n            { \"p_button\", Emoji.Known.PButton },\n            { \"peace_symbol\", Emoji.Known.PeaceSymbol },\n            { \"peach\", Emoji.Known.Peach },\n            { \"peacock\", Emoji.Known.Peacock },\n            { \"peanuts\", Emoji.Known.Peanuts },\n            { \"pea_pod\", Emoji.Known.PeaPod },\n            { \"pear\", Emoji.Known.Pear },\n            { \"pen\", Emoji.Known.Pen },\n            { \"pencil\", Emoji.Known.Pencil },\n            { \"penguin\", Emoji.Known.Penguin },\n            { \"pensive_face\", Emoji.Known.PensiveFace },\n            { \"people_hugging\", Emoji.Known.PeopleHugging },\n            { \"people_with_bunny_ears\", Emoji.Known.PeopleWithBunnyEars },\n            { \"people_wrestling\", Emoji.Known.PeopleWrestling },\n            { \"performing_arts\", Emoji.Known.PerformingArts },\n            { \"persevering_face\", Emoji.Known.PerseveringFace },\n            { \"person\", Emoji.Known.Person },\n            { \"person_beard\", Emoji.Known.PersonBeard },\n            { \"person_biking\", Emoji.Known.PersonBiking },\n            { \"person_blond_hair\", Emoji.Known.PersonBlondHair },\n            { \"person_bouncing_ball\", Emoji.Known.PersonBouncingBall },\n            { \"person_bowing\", Emoji.Known.PersonBowing },\n            { \"person_cartwheeling\", Emoji.Known.PersonCartwheeling },\n            { \"person_climbing\", Emoji.Known.PersonClimbing },\n            { \"person_facepalming\", Emoji.Known.PersonFacepalming },\n            { \"person_fencing\", Emoji.Known.PersonFencing },\n            { \"person_frowning\", Emoji.Known.PersonFrowning },\n            { \"person_gesturing_no\", Emoji.Known.PersonGesturingNo },\n            { \"person_gesturing_ok\", Emoji.Known.PersonGesturingOk },\n            { \"person_getting_haircut\", Emoji.Known.PersonGettingHaircut },\n            { \"person_getting_massage\", Emoji.Known.PersonGettingMassage },\n            { \"person_golfing\", Emoji.Known.PersonGolfing },\n            { \"person_in_bed\", Emoji.Known.PersonInBed },\n            { \"person_in_lotus_position\", Emoji.Known.PersonInLotusPosition },\n            { \"person_in_steamy_room\", Emoji.Known.PersonInSteamyRoom },\n            { \"person_in_suit_levitating\", Emoji.Known.PersonInSuitLevitating },\n            { \"person_in_tuxedo\", Emoji.Known.PersonInTuxedo },\n            { \"person_juggling\", Emoji.Known.PersonJuggling },\n            { \"person_kneeling\", Emoji.Known.PersonKneeling },\n            { \"person_lifting_weights\", Emoji.Known.PersonLiftingWeights },\n            { \"person_mountain_biking\", Emoji.Known.PersonMountainBiking },\n            { \"person_playing_handball\", Emoji.Known.PersonPlayingHandball },\n            { \"person_playing_water_polo\", Emoji.Known.PersonPlayingWaterPolo },\n            { \"person_pouting\", Emoji.Known.PersonPouting },\n            { \"person_raising_hand\", Emoji.Known.PersonRaisingHand },\n            { \"person_rowing_boat\", Emoji.Known.PersonRowingBoat },\n            { \"person_running\", Emoji.Known.PersonRunning },\n            { \"person_shrugging\", Emoji.Known.PersonShrugging },\n            { \"person_standing\", Emoji.Known.PersonStanding },\n            { \"person_surfing\", Emoji.Known.PersonSurfing },\n            { \"person_swimming\", Emoji.Known.PersonSwimming },\n            { \"person_taking_bath\", Emoji.Known.PersonTakingBath },\n            { \"person_tipping_hand\", Emoji.Known.PersonTippingHand },\n            { \"person_walking\", Emoji.Known.PersonWalking },\n            { \"person_wearing_turban\", Emoji.Known.PersonWearingTurban },\n            { \"person_with_crown\", Emoji.Known.PersonWithCrown },\n            { \"person_with_skullcap\", Emoji.Known.PersonWithSkullcap },\n            { \"person_with_veil\", Emoji.Known.PersonWithVeil },\n            { \"petri_dish\", Emoji.Known.PetriDish },\n            { \"pick\", Emoji.Known.Pick },\n            { \"pickup_truck\", Emoji.Known.PickupTruck },\n            { \"pie\", Emoji.Known.Pie },\n            { \"pig\", Emoji.Known.Pig },\n            { \"pig_face\", Emoji.Known.PigFace },\n            { \"pig_nose\", Emoji.Known.PigNose },\n            { \"pile_of_poo\", Emoji.Known.PileOfPoo },\n            { \"pill\", Emoji.Known.Pill },\n            { \"piñata\", Emoji.Known.Piñata },\n            { \"pinched_fingers\", Emoji.Known.PinchedFingers },\n            { \"pinching_hand\", Emoji.Known.PinchingHand },\n            { \"pineapple\", Emoji.Known.Pineapple },\n            { \"pine_decoration\", Emoji.Known.PineDecoration },\n            { \"ping_pong\", Emoji.Known.PingPong },\n            { \"pink_heart\", Emoji.Known.PinkHeart },\n            { \"pisces\", Emoji.Known.Pisces },\n            { \"pizza\", Emoji.Known.Pizza },\n            { \"placard\", Emoji.Known.Placard },\n            { \"place_of_worship\", Emoji.Known.PlaceOfWorship },\n            { \"play_button\", Emoji.Known.PlayButton },\n            { \"playground_slide\", Emoji.Known.PlaygroundSlide },\n            { \"play_or_pause_button\", Emoji.Known.PlayOrPauseButton },\n            { \"pleading_face\", Emoji.Known.PleadingFace },\n            { \"plunger\", Emoji.Known.Plunger },\n            { \"plus\", Emoji.Known.Plus },\n            { \"police_car\", Emoji.Known.PoliceCar },\n            { \"police_car_light\", Emoji.Known.PoliceCarLight },\n            { \"police_officer\", Emoji.Known.PoliceOfficer },\n            { \"poodle\", Emoji.Known.Poodle },\n            { \"pool_8_ball\", Emoji.Known.Pool8Ball },\n            { \"popcorn\", Emoji.Known.Popcorn },\n            { \"postal_horn\", Emoji.Known.PostalHorn },\n            { \"postbox\", Emoji.Known.Postbox },\n            { \"post_office\", Emoji.Known.PostOffice },\n            { \"potable_water\", Emoji.Known.PotableWater },\n            { \"potato\", Emoji.Known.Potato },\n            { \"pot_of_food\", Emoji.Known.PotOfFood },\n            { \"potted_plant\", Emoji.Known.PottedPlant },\n            { \"poultry_leg\", Emoji.Known.PoultryLeg },\n            { \"pound_banknote\", Emoji.Known.PoundBanknote },\n            { \"pouring_liquid\", Emoji.Known.PouringLiquid },\n            { \"pouting_cat\", Emoji.Known.PoutingCat },\n            { \"prayer_beads\", Emoji.Known.PrayerBeads },\n            { \"pregnant_man\", Emoji.Known.PregnantMan },\n            { \"pregnant_person\", Emoji.Known.PregnantPerson },\n            { \"pregnant_woman\", Emoji.Known.PregnantWoman },\n            { \"pretzel\", Emoji.Known.Pretzel },\n            { \"prince\", Emoji.Known.Prince },\n            { \"princess\", Emoji.Known.Princess },\n            { \"printer\", Emoji.Known.Printer },\n            { \"prohibited\", Emoji.Known.Prohibited },\n            { \"purple_circle\", Emoji.Known.PurpleCircle },\n            { \"purple_heart\", Emoji.Known.PurpleHeart },\n            { \"purple_square\", Emoji.Known.PurpleSquare },\n            { \"purse\", Emoji.Known.Purse },\n            { \"pushpin\", Emoji.Known.Pushpin },\n            { \"puzzle_piece\", Emoji.Known.PuzzlePiece },\n            { \"rabbit\", Emoji.Known.Rabbit },\n            { \"rabbit_face\", Emoji.Known.RabbitFace },\n            { \"raccoon\", Emoji.Known.Raccoon },\n            { \"racing_car\", Emoji.Known.RacingCar },\n            { \"radio\", Emoji.Known.Radio },\n            { \"radioactive\", Emoji.Known.Radioactive },\n            { \"radio_button\", Emoji.Known.RadioButton },\n            { \"railway_car\", Emoji.Known.RailwayCar },\n            { \"railway_track\", Emoji.Known.RailwayTrack },\n            { \"rainbow\", Emoji.Known.Rainbow },\n            { \"raised_back_of_hand\", Emoji.Known.RaisedBackOfHand },\n            { \"raised_fist\", Emoji.Known.RaisedFist },\n            { \"raised_hand\", Emoji.Known.RaisedHand },\n            { \"raising_hands\", Emoji.Known.RaisingHands },\n            { \"ram\", Emoji.Known.Ram },\n            { \"rat\", Emoji.Known.Rat },\n            { \"razor\", Emoji.Known.Razor },\n            { \"receipt\", Emoji.Known.Receipt },\n            { \"record_button\", Emoji.Known.RecordButton },\n            { \"recycling_symbol\", Emoji.Known.RecyclingSymbol },\n            { \"red_apple\", Emoji.Known.RedApple },\n            { \"red_circle\", Emoji.Known.RedCircle },\n            { \"red_envelope\", Emoji.Known.RedEnvelope },\n            { \"red_exclamation_mark\", Emoji.Known.RedExclamationMark },\n            { \"red_hair\", Emoji.Known.RedHair },\n            { \"red_heart\", Emoji.Known.RedHeart },\n            { \"red_paper_lantern\", Emoji.Known.RedPaperLantern },\n            { \"red_question_mark\", Emoji.Known.RedQuestionMark },\n            { \"red_square\", Emoji.Known.RedSquare },\n            { \"red_triangle_pointed_down\", Emoji.Known.RedTrianglePointedDown },\n            { \"red_triangle_pointed_up\", Emoji.Known.RedTrianglePointedUp },\n            { \"regional_indicator_a\", Emoji.Known.RegionalIndicatorA },\n            { \"regional_indicator_b\", Emoji.Known.RegionalIndicatorB },\n            { \"regional_indicator_c\", Emoji.Known.RegionalIndicatorC },\n            { \"regional_indicator_d\", Emoji.Known.RegionalIndicatorD },\n            { \"regional_indicator_e\", Emoji.Known.RegionalIndicatorE },\n            { \"regional_indicator_f\", Emoji.Known.RegionalIndicatorF },\n            { \"regional_indicator_g\", Emoji.Known.RegionalIndicatorG },\n            { \"regional_indicator_h\", Emoji.Known.RegionalIndicatorH },\n            { \"regional_indicator_i\", Emoji.Known.RegionalIndicatorI },\n            { \"regional_indicator_j\", Emoji.Known.RegionalIndicatorJ },\n            { \"regional_indicator_k\", Emoji.Known.RegionalIndicatorK },\n            { \"regional_indicator_l\", Emoji.Known.RegionalIndicatorL },\n            { \"regional_indicator_m\", Emoji.Known.RegionalIndicatorM },\n            { \"regional_indicator_n\", Emoji.Known.RegionalIndicatorN },\n            { \"regional_indicator_o\", Emoji.Known.RegionalIndicatorO },\n            { \"regional_indicator_p\", Emoji.Known.RegionalIndicatorP },\n            { \"regional_indicator_q\", Emoji.Known.RegionalIndicatorQ },\n            { \"regional_indicator_r\", Emoji.Known.RegionalIndicatorR },\n            { \"regional_indicator_s\", Emoji.Known.RegionalIndicatorS },\n            { \"regional_indicator_t\", Emoji.Known.RegionalIndicatorT },\n            { \"regional_indicator_u\", Emoji.Known.RegionalIndicatorU },\n            { \"regional_indicator_v\", Emoji.Known.RegionalIndicatorV },\n            { \"regional_indicator_w\", Emoji.Known.RegionalIndicatorW },\n            { \"regional_indicator_x\", Emoji.Known.RegionalIndicatorX },\n            { \"regional_indicator_y\", Emoji.Known.RegionalIndicatorY },\n            { \"regional_indicator_z\", Emoji.Known.RegionalIndicatorZ },\n            { \"registered\", Emoji.Known.Registered },\n            { \"relieved_face\", Emoji.Known.RelievedFace },\n            { \"reminder_ribbon\", Emoji.Known.ReminderRibbon },\n            { \"repeat_button\", Emoji.Known.RepeatButton },\n            { \"repeat_single_button\", Emoji.Known.RepeatSingleButton },\n            { \"rescue_workers_helmet\", Emoji.Known.RescueWorkersHelmet },\n            { \"restroom\", Emoji.Known.Restroom },\n            { \"reverse_button\", Emoji.Known.ReverseButton },\n            { \"revolving_hearts\", Emoji.Known.RevolvingHearts },\n            { \"rhinoceros\", Emoji.Known.Rhinoceros },\n            { \"ribbon\", Emoji.Known.Ribbon },\n            { \"rice_ball\", Emoji.Known.RiceBall },\n            { \"rice_cracker\", Emoji.Known.RiceCracker },\n            { \"right_anger_bubble\", Emoji.Known.RightAngerBubble },\n            { \"right_arrow\", Emoji.Known.RightArrow },\n            { \"right_arrow_curving_down\", Emoji.Known.RightArrowCurvingDown },\n            { \"right_arrow_curving_left\", Emoji.Known.RightArrowCurvingLeft },\n            { \"right_arrow_curving_up\", Emoji.Known.RightArrowCurvingUp },\n            { \"right_facing_fist\", Emoji.Known.RightFacingFist },\n            { \"rightwards_hand\", Emoji.Known.RightwardsHand },\n            { \"rightwards_pushing_hand\", Emoji.Known.RightwardsPushingHand },\n            { \"ring\", Emoji.Known.Ring },\n            { \"ring_buoy\", Emoji.Known.RingBuoy },\n            { \"ringed_planet\", Emoji.Known.RingedPlanet },\n            { \"roasted_sweet_potato\", Emoji.Known.RoastedSweetPotato },\n            { \"robot\", Emoji.Known.Robot },\n            { \"rock\", Emoji.Known.Rock },\n            { \"rocket\", Emoji.Known.Rocket },\n            { \"rolled_up_newspaper\", Emoji.Known.RolledUpNewspaper },\n            { \"roller_coaster\", Emoji.Known.RollerCoaster },\n            { \"roller_skate\", Emoji.Known.RollerSkate },\n            { \"rolling_on_the_floor_laughing\", Emoji.Known.RollingOnTheFloorLaughing },\n            { \"roll_of_paper\", Emoji.Known.RollOfPaper },\n            { \"rooster\", Emoji.Known.Rooster },\n            { \"root_vegetable\", Emoji.Known.RootVegetable },\n            { \"rose\", Emoji.Known.Rose },\n            { \"rosette\", Emoji.Known.Rosette },\n            { \"round_pushpin\", Emoji.Known.RoundPushpin },\n            { \"rugby_football\", Emoji.Known.RugbyFootball },\n            { \"running_shirt\", Emoji.Known.RunningShirt },\n            { \"running_shoe\", Emoji.Known.RunningShoe },\n            { \"sad_but_relieved_face\", Emoji.Known.SadButRelievedFace },\n            { \"safety_pin\", Emoji.Known.SafetyPin },\n            { \"safety_vest\", Emoji.Known.SafetyVest },\n            { \"sagittarius\", Emoji.Known.Sagittarius },\n            { \"sailboat\", Emoji.Known.Sailboat },\n            { \"sake\", Emoji.Known.Sake },\n            { \"salt\", Emoji.Known.Salt },\n            { \"saluting_face\", Emoji.Known.SalutingFace },\n            { \"sandwich\", Emoji.Known.Sandwich },\n            { \"santa_claus\", Emoji.Known.SantaClaus },\n            { \"sari\", Emoji.Known.Sari },\n            { \"satellite\", Emoji.Known.Satellite },\n            { \"satellite_antenna\", Emoji.Known.SatelliteAntenna },\n            { \"sauropod\", Emoji.Known.Sauropod },\n            { \"saxophone\", Emoji.Known.Saxophone },\n            { \"scarf\", Emoji.Known.Scarf },\n            { \"school\", Emoji.Known.School },\n            { \"scissors\", Emoji.Known.Scissors },\n            { \"scorpio\", Emoji.Known.Scorpio },\n            { \"scorpion\", Emoji.Known.Scorpion },\n            { \"screwdriver\", Emoji.Known.Screwdriver },\n            { \"scroll\", Emoji.Known.Scroll },\n            { \"seal\", Emoji.Known.Seal },\n            { \"seat\", Emoji.Known.Seat },\n            { \"2nd_place_medal\", Emoji.Known.SecondPlaceMedal },\n            { \"seedling\", Emoji.Known.Seedling },\n            { \"see_no_evil_monkey\", Emoji.Known.SeeNoEvilMonkey },\n            { \"selfie\", Emoji.Known.Selfie },\n            { \"seven_o_clock\", Emoji.Known.SevenOClock },\n            { \"seven_thirty\", Emoji.Known.SevenThirty },\n            { \"sewing_needle\", Emoji.Known.SewingNeedle },\n            { \"shaking_face\", Emoji.Known.ShakingFace },\n            { \"shallow_pan_of_food\", Emoji.Known.ShallowPanOfFood },\n            { \"shamrock\", Emoji.Known.Shamrock },\n            { \"shark\", Emoji.Known.Shark },\n            { \"shaved_ice\", Emoji.Known.ShavedIce },\n            { \"sheaf_of_rice\", Emoji.Known.SheafOfRice },\n            { \"shield\", Emoji.Known.Shield },\n            { \"shinto_shrine\", Emoji.Known.ShintoShrine },\n            { \"ship\", Emoji.Known.Ship },\n            { \"shooting_star\", Emoji.Known.ShootingStar },\n            { \"shopping_bags\", Emoji.Known.ShoppingBags },\n            { \"shopping_cart\", Emoji.Known.ShoppingCart },\n            { \"shortcake\", Emoji.Known.Shortcake },\n            { \"shorts\", Emoji.Known.Shorts },\n            { \"shovel\", Emoji.Known.Shovel },\n            { \"shower\", Emoji.Known.Shower },\n            { \"shrimp\", Emoji.Known.Shrimp },\n            { \"shuffle_tracks_button\", Emoji.Known.ShuffleTracksButton },\n            { \"shushing_face\", Emoji.Known.ShushingFace },\n            { \"sign_of_the_horns\", Emoji.Known.SignOfTheHorns },\n            { \"six_o_clock\", Emoji.Known.SixOClock },\n            { \"six_thirty\", Emoji.Known.SixThirty },\n            { \"skateboard\", Emoji.Known.Skateboard },\n            { \"skier\", Emoji.Known.Skier },\n            { \"skis\", Emoji.Known.Skis },\n            { \"skull\", Emoji.Known.Skull },\n            { \"skull_and_crossbones\", Emoji.Known.SkullAndCrossbones },\n            { \"skunk\", Emoji.Known.Skunk },\n            { \"sled\", Emoji.Known.Sled },\n            { \"sleeping_face\", Emoji.Known.SleepingFace },\n            { \"sleepy_face\", Emoji.Known.SleepyFace },\n            { \"slightly_frowning_face\", Emoji.Known.SlightlyFrowningFace },\n            { \"slightly_smiling_face\", Emoji.Known.SlightlySmilingFace },\n            { \"sloth\", Emoji.Known.Sloth },\n            { \"slot_machine\", Emoji.Known.SlotMachine },\n            { \"small_airplane\", Emoji.Known.SmallAirplane },\n            { \"small_blue_diamond\", Emoji.Known.SmallBlueDiamond },\n            { \"small_orange_diamond\", Emoji.Known.SmallOrangeDiamond },\n            { \"smiling_cat_with_heart_eyes\", Emoji.Known.SmilingCatWithHeartEyes },\n            { \"smiling_face\", Emoji.Known.SmilingFace },\n            { \"smiling_face_with_halo\", Emoji.Known.SmilingFaceWithHalo },\n            { \"smiling_face_with_heart_eyes\", Emoji.Known.SmilingFaceWithHeartEyes },\n            { \"smiling_face_with_hearts\", Emoji.Known.SmilingFaceWithHearts },\n            { \"smiling_face_with_horns\", Emoji.Known.SmilingFaceWithHorns },\n            { \"smiling_face_with_open_hands\", Emoji.Known.SmilingFaceWithOpenHands },\n            { \"smiling_face_with_smiling_eyes\", Emoji.Known.SmilingFaceWithSmilingEyes },\n            { \"smiling_face_with_sunglasses\", Emoji.Known.SmilingFaceWithSunglasses },\n            { \"smiling_face_with_tear\", Emoji.Known.SmilingFaceWithTear },\n            { \"smirking_face\", Emoji.Known.SmirkingFace },\n            { \"snail\", Emoji.Known.Snail },\n            { \"snake\", Emoji.Known.Snake },\n            { \"sneezing_face\", Emoji.Known.SneezingFace },\n            { \"snowboarder\", Emoji.Known.Snowboarder },\n            { \"snow_capped_mountain\", Emoji.Known.SnowCappedMountain },\n            { \"snowflake\", Emoji.Known.Snowflake },\n            { \"snowman\", Emoji.Known.Snowman },\n            { \"snowman_without_snow\", Emoji.Known.SnowmanWithoutSnow },\n            { \"soap\", Emoji.Known.Soap },\n            { \"soccer_ball\", Emoji.Known.SoccerBall },\n            { \"socks\", Emoji.Known.Socks },\n            { \"softball\", Emoji.Known.Softball },\n            { \"soft_ice_cream\", Emoji.Known.SoftIceCream },\n            { \"soon_arrow\", Emoji.Known.SoonArrow },\n            { \"sos_button\", Emoji.Known.SosButton },\n            { \"spade_suit\", Emoji.Known.SpadeSuit },\n            { \"spaghetti\", Emoji.Known.Spaghetti },\n            { \"sparkle\", Emoji.Known.Sparkle },\n            { \"sparkler\", Emoji.Known.Sparkler },\n            { \"sparkles\", Emoji.Known.Sparkles },\n            { \"sparkling_heart\", Emoji.Known.SparklingHeart },\n            { \"speaker_high_volume\", Emoji.Known.SpeakerHighVolume },\n            { \"speaker_low_volume\", Emoji.Known.SpeakerLowVolume },\n            { \"speaker_medium_volume\", Emoji.Known.SpeakerMediumVolume },\n            { \"speaking_head\", Emoji.Known.SpeakingHead },\n            { \"speak_no_evil_monkey\", Emoji.Known.SpeakNoEvilMonkey },\n            { \"speech_balloon\", Emoji.Known.SpeechBalloon },\n            { \"speedboat\", Emoji.Known.Speedboat },\n            { \"spider\", Emoji.Known.Spider },\n            { \"spider_web\", Emoji.Known.SpiderWeb },\n            { \"spiral_calendar\", Emoji.Known.SpiralCalendar },\n            { \"spiral_notepad\", Emoji.Known.SpiralNotepad },\n            { \"spiral_shell\", Emoji.Known.SpiralShell },\n            { \"splatter\", Emoji.Known.Splatter },\n            { \"sponge\", Emoji.Known.Sponge },\n            { \"spoon\", Emoji.Known.Spoon },\n            { \"sports_medal\", Emoji.Known.SportsMedal },\n            { \"sport_utility_vehicle\", Emoji.Known.SportUtilityVehicle },\n            { \"spouting_whale\", Emoji.Known.SpoutingWhale },\n            { \"squid\", Emoji.Known.Squid },\n            { \"squinting_face_with_tongue\", Emoji.Known.SquintingFaceWithTongue },\n            { \"stadium\", Emoji.Known.Stadium },\n            { \"star\", Emoji.Known.Star },\n            { \"star_and_crescent\", Emoji.Known.StarAndCrescent },\n            { \"star_of_david\", Emoji.Known.StarOfDavid },\n            { \"star_struck\", Emoji.Known.StarStruck },\n            { \"station\", Emoji.Known.Station },\n            { \"statue_of_liberty\", Emoji.Known.StatueOfLiberty },\n            { \"steaming_bowl\", Emoji.Known.SteamingBowl },\n            { \"stethoscope\", Emoji.Known.Stethoscope },\n            { \"stop_button\", Emoji.Known.StopButton },\n            { \"stop_sign\", Emoji.Known.StopSign },\n            { \"stopwatch\", Emoji.Known.Stopwatch },\n            { \"straight_ruler\", Emoji.Known.StraightRuler },\n            { \"strawberry\", Emoji.Known.Strawberry },\n            { \"studio_microphone\", Emoji.Known.StudioMicrophone },\n            { \"stuffed_flatbread\", Emoji.Known.StuffedFlatbread },\n            { \"sun\", Emoji.Known.Sun },\n            { \"sun_behind_cloud\", Emoji.Known.SunBehindCloud },\n            { \"sun_behind_large_cloud\", Emoji.Known.SunBehindLargeCloud },\n            { \"sun_behind_rain_cloud\", Emoji.Known.SunBehindRainCloud },\n            { \"sun_behind_small_cloud\", Emoji.Known.SunBehindSmallCloud },\n            { \"sunflower\", Emoji.Known.Sunflower },\n            { \"sunglasses\", Emoji.Known.Sunglasses },\n            { \"sunrise\", Emoji.Known.Sunrise },\n            { \"sunrise_over_mountains\", Emoji.Known.SunriseOverMountains },\n            { \"sunset\", Emoji.Known.Sunset },\n            { \"sun_with_face\", Emoji.Known.SunWithFace },\n            { \"superhero\", Emoji.Known.Superhero },\n            { \"supervillain\", Emoji.Known.Supervillain },\n            { \"sushi\", Emoji.Known.Sushi },\n            { \"suspension_railway\", Emoji.Known.SuspensionRailway },\n            { \"swan\", Emoji.Known.Swan },\n            { \"sweat_droplets\", Emoji.Known.SweatDroplets },\n            { \"synagogue\", Emoji.Known.Synagogue },\n            { \"syringe\", Emoji.Known.Syringe },\n            { \"taco\", Emoji.Known.Taco },\n            { \"takeout_box\", Emoji.Known.TakeoutBox },\n            { \"tamale\", Emoji.Known.Tamale },\n            { \"tanabata_tree\", Emoji.Known.TanabataTree },\n            { \"tangerine\", Emoji.Known.Tangerine },\n            { \"taurus\", Emoji.Known.Taurus },\n            { \"taxi\", Emoji.Known.Taxi },\n            { \"teacup_without_handle\", Emoji.Known.TeacupWithoutHandle },\n            { \"teapot\", Emoji.Known.Teapot },\n            { \"tear_off_calendar\", Emoji.Known.TearOffCalendar },\n            { \"teddy_bear\", Emoji.Known.TeddyBear },\n            { \"telephone\", Emoji.Known.Telephone },\n            { \"telephone_receiver\", Emoji.Known.TelephoneReceiver },\n            { \"telescope\", Emoji.Known.Telescope },\n            { \"television\", Emoji.Known.Television },\n            { \"tennis\", Emoji.Known.Tennis },\n            { \"ten_o_clock\", Emoji.Known.TenOClock },\n            { \"tent\", Emoji.Known.Tent },\n            { \"ten_thirty\", Emoji.Known.TenThirty },\n            { \"test_tube\", Emoji.Known.TestTube },\n            { \"thermometer\", Emoji.Known.Thermometer },\n            { \"thinking_face\", Emoji.Known.ThinkingFace },\n            { \"3rd_place_medal\", Emoji.Known.ThirdPlaceMedal },\n            { \"thong_sandal\", Emoji.Known.ThongSandal },\n            { \"thought_balloon\", Emoji.Known.ThoughtBalloon },\n            { \"thread\", Emoji.Known.Thread },\n            { \"three_o_clock\", Emoji.Known.ThreeOClock },\n            { \"three_thirty\", Emoji.Known.ThreeThirty },\n            { \"thumbs_down\", Emoji.Known.ThumbsDown },\n            { \"thumbs_up\", Emoji.Known.ThumbsUp },\n            { \"ticket\", Emoji.Known.Ticket },\n            { \"tiger\", Emoji.Known.Tiger },\n            { \"tiger_face\", Emoji.Known.TigerFace },\n            { \"timer_clock\", Emoji.Known.TimerClock },\n            { \"tired_face\", Emoji.Known.TiredFace },\n            { \"toilet\", Emoji.Known.Toilet },\n            { \"tokyo_tower\", Emoji.Known.TokyoTower },\n            { \"tomato\", Emoji.Known.Tomato },\n            { \"tongue\", Emoji.Known.Tongue },\n            { \"toolbox\", Emoji.Known.Toolbox },\n            { \"tooth\", Emoji.Known.Tooth },\n            { \"toothbrush\", Emoji.Known.Toothbrush },\n            { \"top_arrow\", Emoji.Known.TopArrow },\n            { \"top_hat\", Emoji.Known.TopHat },\n            { \"tornado\", Emoji.Known.Tornado },\n            { \"trackball\", Emoji.Known.Trackball },\n            { \"tractor\", Emoji.Known.Tractor },\n            { \"trade_mark\", Emoji.Known.TradeMark },\n            { \"train\", Emoji.Known.Train },\n            { \"tram\", Emoji.Known.Tram },\n            { \"tram_car\", Emoji.Known.TramCar },\n            { \"transgender_symbol\", Emoji.Known.TransgenderSymbol },\n            { \"treasure_chest\", Emoji.Known.TreasureChest },\n            { \"t_rex\", Emoji.Known.TRex },\n            { \"triangular_flag\", Emoji.Known.TriangularFlag },\n            { \"triangular_ruler\", Emoji.Known.TriangularRuler },\n            { \"trident_emblem\", Emoji.Known.TridentEmblem },\n            { \"troll\", Emoji.Known.Troll },\n            { \"trolleybus\", Emoji.Known.Trolleybus },\n            { \"trombone\", Emoji.Known.Trombone },\n            { \"trophy\", Emoji.Known.Trophy },\n            { \"tropical_drink\", Emoji.Known.TropicalDrink },\n            { \"tropical_fish\", Emoji.Known.TropicalFish },\n            { \"trumpet\", Emoji.Known.Trumpet },\n            { \"t_shirt\", Emoji.Known.TShirt },\n            { \"tulip\", Emoji.Known.Tulip },\n            { \"tumbler_glass\", Emoji.Known.TumblerGlass },\n            { \"turkey\", Emoji.Known.Turkey },\n            { \"turtle\", Emoji.Known.Turtle },\n            { \"twelve_o_clock\", Emoji.Known.TwelveOClock },\n            { \"twelve_thirty\", Emoji.Known.TwelveThirty },\n            { \"two_hearts\", Emoji.Known.TwoHearts },\n            { \"two_hump_camel\", Emoji.Known.TwoHumpCamel },\n            { \"two_o_clock\", Emoji.Known.TwoOClock },\n            { \"two_thirty\", Emoji.Known.TwoThirty },\n            { \"umbrella\", Emoji.Known.Umbrella },\n            { \"umbrella_on_ground\", Emoji.Known.UmbrellaOnGround },\n            { \"umbrella_with_rain_drops\", Emoji.Known.UmbrellaWithRainDrops },\n            { \"unamused_face\", Emoji.Known.UnamusedFace },\n            { \"unicorn\", Emoji.Known.Unicorn },\n            { \"unlocked\", Emoji.Known.Unlocked },\n            { \"up_arrow\", Emoji.Known.UpArrow },\n            { \"up_button\", Emoji.Known.UpButton },\n            { \"up_down_arrow\", Emoji.Known.UpDownArrow },\n            { \"up_left_arrow\", Emoji.Known.UpLeftArrow },\n            { \"up_right_arrow\", Emoji.Known.UpRightArrow },\n            { \"upside_down_face\", Emoji.Known.UpsideDownFace },\n            { \"upwards_button\", Emoji.Known.UpwardsButton },\n            { \"vampire\", Emoji.Known.Vampire },\n            { \"vertical_traffic_light\", Emoji.Known.VerticalTrafficLight },\n            { \"vibration_mode\", Emoji.Known.VibrationMode },\n            { \"victory_hand\", Emoji.Known.VictoryHand },\n            { \"video_camera\", Emoji.Known.VideoCamera },\n            { \"videocassette\", Emoji.Known.Videocassette },\n            { \"video_game\", Emoji.Known.VideoGame },\n            { \"violin\", Emoji.Known.Violin },\n            { \"virgo\", Emoji.Known.Virgo },\n            { \"volcano\", Emoji.Known.Volcano },\n            { \"volleyball\", Emoji.Known.Volleyball },\n            { \"vs_button\", Emoji.Known.VsButton },\n            { \"vulcan_salute\", Emoji.Known.VulcanSalute },\n            { \"waffle\", Emoji.Known.Waffle },\n            { \"waning_crescent_moon\", Emoji.Known.WaningCrescentMoon },\n            { \"waning_gibbous_moon\", Emoji.Known.WaningGibbousMoon },\n            { \"warning\", Emoji.Known.Warning },\n            { \"wastebasket\", Emoji.Known.Wastebasket },\n            { \"watch\", Emoji.Known.Watch },\n            { \"water_buffalo\", Emoji.Known.WaterBuffalo },\n            { \"water_closet\", Emoji.Known.WaterCloset },\n            { \"watermelon\", Emoji.Known.Watermelon },\n            { \"water_pistol\", Emoji.Known.WaterPistol },\n            { \"water_wave\", Emoji.Known.WaterWave },\n            { \"waving_hand\", Emoji.Known.WavingHand },\n            { \"wavy_dash\", Emoji.Known.WavyDash },\n            { \"waxing_crescent_moon\", Emoji.Known.WaxingCrescentMoon },\n            { \"waxing_gibbous_moon\", Emoji.Known.WaxingGibbousMoon },\n            { \"weary_cat\", Emoji.Known.WearyCat },\n            { \"weary_face\", Emoji.Known.WearyFace },\n            { \"wedding\", Emoji.Known.Wedding },\n            { \"whale\", Emoji.Known.Whale },\n            { \"wheel\", Emoji.Known.Wheel },\n            { \"wheelchair_symbol\", Emoji.Known.WheelchairSymbol },\n            { \"wheel_of_dharma\", Emoji.Known.WheelOfDharma },\n            { \"white_cane\", Emoji.Known.WhiteCane },\n            { \"white_circle\", Emoji.Known.WhiteCircle },\n            { \"white_exclamation_mark\", Emoji.Known.WhiteExclamationMark },\n            { \"white_flag\", Emoji.Known.WhiteFlag },\n            { \"white_flower\", Emoji.Known.WhiteFlower },\n            { \"white_hair\", Emoji.Known.WhiteHair },\n            { \"white_heart\", Emoji.Known.WhiteHeart },\n            { \"white_large_square\", Emoji.Known.WhiteLargeSquare },\n            { \"white_medium_small_square\", Emoji.Known.WhiteMediumSmallSquare },\n            { \"white_medium_square\", Emoji.Known.WhiteMediumSquare },\n            { \"white_question_mark\", Emoji.Known.WhiteQuestionMark },\n            { \"white_small_square\", Emoji.Known.WhiteSmallSquare },\n            { \"white_square_button\", Emoji.Known.WhiteSquareButton },\n            { \"wilted_flower\", Emoji.Known.WiltedFlower },\n            { \"wind_chime\", Emoji.Known.WindChime },\n            { \"wind_face\", Emoji.Known.WindFace },\n            { \"window\", Emoji.Known.Window },\n            { \"wine_glass\", Emoji.Known.WineGlass },\n            { \"wing\", Emoji.Known.Wing },\n            { \"winking_face\", Emoji.Known.WinkingFace },\n            { \"winking_face_with_tongue\", Emoji.Known.WinkingFaceWithTongue },\n            { \"wireless\", Emoji.Known.Wireless },\n            { \"wolf\", Emoji.Known.Wolf },\n            { \"woman\", Emoji.Known.Woman },\n            { \"woman_and_man_holding_hands\", Emoji.Known.WomanAndManHoldingHands },\n            { \"woman_dancing\", Emoji.Known.WomanDancing },\n            { \"womans_boot\", Emoji.Known.WomansBoot },\n            { \"womans_clothes\", Emoji.Known.WomansClothes },\n            { \"womans_hat\", Emoji.Known.WomansHat },\n            { \"womans_sandal\", Emoji.Known.WomansSandal },\n            { \"woman_with_headscarf\", Emoji.Known.WomanWithHeadscarf },\n            { \"women_holding_hands\", Emoji.Known.WomenHoldingHands },\n            { \"womens_room\", Emoji.Known.WomensRoom },\n            { \"wood\", Emoji.Known.Wood },\n            { \"woozy_face\", Emoji.Known.WoozyFace },\n            { \"world_map\", Emoji.Known.WorldMap },\n            { \"worm\", Emoji.Known.Worm },\n            { \"worried_face\", Emoji.Known.WorriedFace },\n            { \"wrapped_gift\", Emoji.Known.WrappedGift },\n            { \"wrench\", Emoji.Known.Wrench },\n            { \"writing_hand\", Emoji.Known.WritingHand },\n            { \"x_ray\", Emoji.Known.XRay },\n            { \"yarn\", Emoji.Known.Yarn },\n            { \"yawning_face\", Emoji.Known.YawningFace },\n            { \"yellow_circle\", Emoji.Known.YellowCircle },\n            { \"yellow_heart\", Emoji.Known.YellowHeart },\n            { \"yellow_square\", Emoji.Known.YellowSquare },\n            { \"yen_banknote\", Emoji.Known.YenBanknote },\n            { \"yin_yang\", Emoji.Known.YinYang },\n            { \"yo_yo\", Emoji.Known.YoYo },\n            { \"zany_face\", Emoji.Known.ZanyFace },\n            { \"zebra\", Emoji.Known.Zebra },\n            { \"zipper_mouth_face\", Emoji.Known.ZipperMouthFace },\n            { \"zombie\", Emoji.Known.Zombie },\n            { \"zzz\", Emoji.Known.Zzz },\n            { \"hugging_face\", Emoji.Known.SmilingFaceWithOpenHands },\n            { \"knocked_out_face\", Emoji.Known.FaceWithCrossedOutEyes },\n            { \"pouting_face\", Emoji.Known.EnragedFace },\n        };\n        \n        /// <summary>\n        /// Contains well-known emojis.\n        /// </summary>\n        public static class Known\n        {\n            /// <summary>\n            /// Gets the \"Abacus\" emoji. 🧮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>abacus</c>\n            /// </remarks>\n            public const string Abacus = \"\\U0001F9EE\";\n            \n            /// <summary>\n            /// Gets the \"AB button (blood type)\" emoji. 🆎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ab_button_blood_type</c>\n            /// </remarks>\n            public const string AbButtonBloodType = \"\\U0001F18E\";\n            \n            /// <summary>\n            /// Gets the \"A button (blood type)\" emoji. 🅰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>a_button_blood_type</c>\n            /// </remarks>\n            public const string AButtonBloodType = \"\\U0001F170\";\n            \n            /// <summary>\n            /// Gets the \"Accordion\" emoji. 🪗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>accordion</c>\n            /// </remarks>\n            public const string Accordion = \"\\U0001FA97\";\n            \n            /// <summary>\n            /// Gets the \"Adhesive bandage\" emoji. 🩹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>adhesive_bandage</c>\n            /// </remarks>\n            public const string AdhesiveBandage = \"\\U0001FA79\";\n            \n            /// <summary>\n            /// Gets the \"Admission tickets\" emoji. 🎟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>admission_tickets</c>\n            /// </remarks>\n            public const string AdmissionTickets = \"\\U0001F39F\";\n            \n            /// <summary>\n            /// Gets the \"Aerial tramway\" emoji. 🚡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>aerial_tramway</c>\n            /// </remarks>\n            public const string AerialTramway = \"\\U0001F6A1\";\n            \n            /// <summary>\n            /// Gets the \"Airplane\" emoji. ✈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>airplane</c>\n            /// </remarks>\n            public const string Airplane = \"\\U00002708\";\n            \n            /// <summary>\n            /// Gets the \"Airplane arrival\" emoji. 🛬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>airplane_arrival</c>\n            /// </remarks>\n            public const string AirplaneArrival = \"\\U0001F6EC\";\n            \n            /// <summary>\n            /// Gets the \"Airplane departure\" emoji. 🛫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>airplane_departure</c>\n            /// </remarks>\n            public const string AirplaneDeparture = \"\\U0001F6EB\";\n            \n            /// <summary>\n            /// Gets the \"Alarm clock\" emoji. ⏰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>alarm_clock</c>\n            /// </remarks>\n            public const string AlarmClock = \"\\U000023F0\";\n            \n            /// <summary>\n            /// Gets the \"Alembic\" emoji. ⚗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>alembic</c>\n            /// </remarks>\n            public const string Alembic = \"\\U00002697\";\n            \n            /// <summary>\n            /// Gets the \"Alien\" emoji. 👽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>alien</c>\n            /// </remarks>\n            public const string Alien = \"\\U0001F47D\";\n            \n            /// <summary>\n            /// Gets the \"Alien monster\" emoji. 👾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>alien_monster</c>\n            /// </remarks>\n            public const string AlienMonster = \"\\U0001F47E\";\n            \n            /// <summary>\n            /// Gets the \"Ambulance\" emoji. 🚑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ambulance</c>\n            /// </remarks>\n            public const string Ambulance = \"\\U0001F691\";\n            \n            /// <summary>\n            /// Gets the \"American football\" emoji. 🏈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>american_football</c>\n            /// </remarks>\n            public const string AmericanFootball = \"\\U0001F3C8\";\n            \n            /// <summary>\n            /// Gets the \"Amphora\" emoji. 🏺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>amphora</c>\n            /// </remarks>\n            public const string Amphora = \"\\U0001F3FA\";\n            \n            /// <summary>\n            /// Gets the \"Anatomical heart\" emoji. 🫀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>anatomical_heart</c>\n            /// </remarks>\n            public const string AnatomicalHeart = \"\\U0001FAC0\";\n            \n            /// <summary>\n            /// Gets the \"Anchor\" emoji. ⚓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>anchor</c>\n            /// </remarks>\n            public const string Anchor = \"\\U00002693\";\n            \n            /// <summary>\n            /// Gets the \"Anger symbol\" emoji. 💢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>anger_symbol</c>\n            /// </remarks>\n            public const string AngerSymbol = \"\\U0001F4A2\";\n            \n            /// <summary>\n            /// Gets the \"Angry face\" emoji. 😠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>angry_face</c>\n            /// </remarks>\n            public const string AngryFace = \"\\U0001F620\";\n            \n            /// <summary>\n            /// Gets the \"Angry face with horns\" emoji. 👿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>angry_face_with_horns</c>\n            /// </remarks>\n            public const string AngryFaceWithHorns = \"\\U0001F47F\";\n            \n            /// <summary>\n            /// Gets the \"Anguished face\" emoji. 😧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>anguished_face</c>\n            /// </remarks>\n            public const string AnguishedFace = \"\\U0001F627\";\n            \n            /// <summary>\n            /// Gets the \"Ant\" emoji. 🐜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ant</c>\n            /// </remarks>\n            public const string Ant = \"\\U0001F41C\";\n            \n            /// <summary>\n            /// Gets the \"Antenna bars\" emoji. 📶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>antenna_bars</c>\n            /// </remarks>\n            public const string AntennaBars = \"\\U0001F4F6\";\n            \n            /// <summary>\n            /// Gets the \"Anxious face with sweat\" emoji. 😰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>anxious_face_with_sweat</c>\n            /// </remarks>\n            public const string AnxiousFaceWithSweat = \"\\U0001F630\";\n            \n            /// <summary>\n            /// Gets the \"Aquarius\" emoji. ♒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>aquarius</c>\n            /// </remarks>\n            public const string Aquarius = \"\\U00002652\";\n            \n            /// <summary>\n            /// Gets the \"Aries\" emoji. ♈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>aries</c>\n            /// </remarks>\n            public const string Aries = \"\\U00002648\";\n            \n            /// <summary>\n            /// Gets the \"Articulated lorry\" emoji. 🚛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>articulated_lorry</c>\n            /// </remarks>\n            public const string ArticulatedLorry = \"\\U0001F69B\";\n            \n            /// <summary>\n            /// Gets the \"Artist palette\" emoji. 🎨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>artist_palette</c>\n            /// </remarks>\n            public const string ArtistPalette = \"\\U0001F3A8\";\n            \n            /// <summary>\n            /// Gets the \"Astonished face\" emoji. 😲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>astonished_face</c>\n            /// </remarks>\n            public const string AstonishedFace = \"\\U0001F632\";\n            \n            /// <summary>\n            /// Gets the \"ATM sign\" emoji. 🏧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>atm_sign</c>\n            /// </remarks>\n            public const string AtmSign = \"\\U0001F3E7\";\n            \n            /// <summary>\n            /// Gets the \"Atom symbol\" emoji. ⚛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>atom_symbol</c>\n            /// </remarks>\n            public const string AtomSymbol = \"\\U0000269B\";\n            \n            /// <summary>\n            /// Gets the \"Automobile\" emoji. 🚗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>automobile</c>\n            /// </remarks>\n            public const string Automobile = \"\\U0001F697\";\n            \n            /// <summary>\n            /// Gets the \"Auto rickshaw\" emoji. 🛺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>auto_rickshaw</c>\n            /// </remarks>\n            public const string AutoRickshaw = \"\\U0001F6FA\";\n            \n            /// <summary>\n            /// Gets the \"Avocado\" emoji. 🥑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>avocado</c>\n            /// </remarks>\n            public const string Avocado = \"\\U0001F951\";\n            \n            /// <summary>\n            /// Gets the \"Axe\" emoji. 🪓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>axe</c>\n            /// </remarks>\n            public const string Axe = \"\\U0001FA93\";\n            \n            /// <summary>\n            /// Gets the \"Baby\" emoji. 👶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baby</c>\n            /// </remarks>\n            public const string Baby = \"\\U0001F476\";\n            \n            /// <summary>\n            /// Gets the \"Baby angel\" emoji. 👼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baby_angel</c>\n            /// </remarks>\n            public const string BabyAngel = \"\\U0001F47C\";\n            \n            /// <summary>\n            /// Gets the \"Baby bottle\" emoji. 🍼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baby_bottle</c>\n            /// </remarks>\n            public const string BabyBottle = \"\\U0001F37C\";\n            \n            /// <summary>\n            /// Gets the \"Baby chick\" emoji. 🐤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baby_chick</c>\n            /// </remarks>\n            public const string BabyChick = \"\\U0001F424\";\n            \n            /// <summary>\n            /// Gets the \"Baby symbol\" emoji. 🚼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baby_symbol</c>\n            /// </remarks>\n            public const string BabySymbol = \"\\U0001F6BC\";\n            \n            /// <summary>\n            /// Gets the \"BACK arrow\" emoji. 🔙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>back_arrow</c>\n            /// </remarks>\n            public const string BackArrow = \"\\U0001F519\";\n            \n            /// <summary>\n            /// Gets the \"Backhand index pointing down\" emoji. 👇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>backhand_index_pointing_down</c>\n            /// </remarks>\n            public const string BackhandIndexPointingDown = \"\\U0001F447\";\n            \n            /// <summary>\n            /// Gets the \"Backhand index pointing left\" emoji. 👈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>backhand_index_pointing_left</c>\n            /// </remarks>\n            public const string BackhandIndexPointingLeft = \"\\U0001F448\";\n            \n            /// <summary>\n            /// Gets the \"Backhand index pointing right\" emoji. 👉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>backhand_index_pointing_right</c>\n            /// </remarks>\n            public const string BackhandIndexPointingRight = \"\\U0001F449\";\n            \n            /// <summary>\n            /// Gets the \"Backhand index pointing up\" emoji. 👆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>backhand_index_pointing_up</c>\n            /// </remarks>\n            public const string BackhandIndexPointingUp = \"\\U0001F446\";\n            \n            /// <summary>\n            /// Gets the \"Backpack\" emoji. 🎒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>backpack</c>\n            /// </remarks>\n            public const string Backpack = \"\\U0001F392\";\n            \n            /// <summary>\n            /// Gets the \"Bacon\" emoji. 🥓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bacon</c>\n            /// </remarks>\n            public const string Bacon = \"\\U0001F953\";\n            \n            /// <summary>\n            /// Gets the \"Badger\" emoji. 🦡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>badger</c>\n            /// </remarks>\n            public const string Badger = \"\\U0001F9A1\";\n            \n            /// <summary>\n            /// Gets the \"Badminton\" emoji. 🏸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>badminton</c>\n            /// </remarks>\n            public const string Badminton = \"\\U0001F3F8\";\n            \n            /// <summary>\n            /// Gets the \"Bagel\" emoji. 🥯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bagel</c>\n            /// </remarks>\n            public const string Bagel = \"\\U0001F96F\";\n            \n            /// <summary>\n            /// Gets the \"Baggage claim\" emoji. 🛄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baggage_claim</c>\n            /// </remarks>\n            public const string BaggageClaim = \"\\U0001F6C4\";\n            \n            /// <summary>\n            /// Gets the \"Baguette bread\" emoji. 🥖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baguette_bread</c>\n            /// </remarks>\n            public const string BaguetteBread = \"\\U0001F956\";\n            \n            /// <summary>\n            /// Gets the \"Balance scale\" emoji. ⚖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>balance_scale</c>\n            /// </remarks>\n            public const string BalanceScale = \"\\U00002696\";\n            \n            /// <summary>\n            /// Gets the \"Bald\" emoji. 🦲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bald</c>\n            /// </remarks>\n            public const string Bald = \"\\U0001F9B2\";\n            \n            /// <summary>\n            /// Gets the \"Ballet shoes\" emoji. 🩰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ballet_shoes</c>\n            /// </remarks>\n            public const string BalletShoes = \"\\U0001FA70\";\n            \n            /// <summary>\n            /// Gets the \"Balloon\" emoji. 🎈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>balloon</c>\n            /// </remarks>\n            public const string Balloon = \"\\U0001F388\";\n            \n            /// <summary>\n            /// Gets the \"Ballot box with ballot\" emoji. 🗳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ballot_box_with_ballot</c>\n            /// </remarks>\n            public const string BallotBoxWithBallot = \"\\U0001F5F3\";\n            \n            /// <summary>\n            /// Gets the \"Banana\" emoji. 🍌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>banana</c>\n            /// </remarks>\n            public const string Banana = \"\\U0001F34C\";\n            \n            /// <summary>\n            /// Gets the \"Banjo\" emoji. 🪕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>banjo</c>\n            /// </remarks>\n            public const string Banjo = \"\\U0001FA95\";\n            \n            /// <summary>\n            /// Gets the \"Bank\" emoji. 🏦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bank</c>\n            /// </remarks>\n            public const string Bank = \"\\U0001F3E6\";\n            \n            /// <summary>\n            /// Gets the \"Barber pole\" emoji. 💈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>barber_pole</c>\n            /// </remarks>\n            public const string BarberPole = \"\\U0001F488\";\n            \n            /// <summary>\n            /// Gets the \"Bar chart\" emoji. 📊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bar_chart</c>\n            /// </remarks>\n            public const string BarChart = \"\\U0001F4CA\";\n            \n            /// <summary>\n            /// Gets the \"Baseball\" emoji. ⚾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>baseball</c>\n            /// </remarks>\n            public const string Baseball = \"\\U000026BE\";\n            \n            /// <summary>\n            /// Gets the \"Basket\" emoji. 🧺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>basket</c>\n            /// </remarks>\n            public const string Basket = \"\\U0001F9FA\";\n            \n            /// <summary>\n            /// Gets the \"Basketball\" emoji. 🏀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>basketball</c>\n            /// </remarks>\n            public const string Basketball = \"\\U0001F3C0\";\n            \n            /// <summary>\n            /// Gets the \"Bat\" emoji. 🦇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bat</c>\n            /// </remarks>\n            public const string Bat = \"\\U0001F987\";\n            \n            /// <summary>\n            /// Gets the \"Bathtub\" emoji. 🛁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bathtub</c>\n            /// </remarks>\n            public const string Bathtub = \"\\U0001F6C1\";\n            \n            /// <summary>\n            /// Gets the \"Battery\" emoji. 🔋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>battery</c>\n            /// </remarks>\n            public const string Battery = \"\\U0001F50B\";\n            \n            /// <summary>\n            /// Gets the \"B button (blood type)\" emoji. 🅱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>b_button_blood_type</c>\n            /// </remarks>\n            public const string BButtonBloodType = \"\\U0001F171\";\n            \n            /// <summary>\n            /// Gets the \"Beach with umbrella\" emoji. 🏖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beach_with_umbrella</c>\n            /// </remarks>\n            public const string BeachWithUmbrella = \"\\U0001F3D6\";\n            \n            /// <summary>\n            /// Gets the \"Beaming face with smiling eyes\" emoji. 😁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beaming_face_with_smiling_eyes</c>\n            /// </remarks>\n            public const string BeamingFaceWithSmilingEyes = \"\\U0001F601\";\n            \n            /// <summary>\n            /// Gets the \"Beans\" emoji. 🫘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beans</c>\n            /// </remarks>\n            public const string Beans = \"\\U0001FAD8\";\n            \n            /// <summary>\n            /// Gets the \"Bear\" emoji. 🐻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bear</c>\n            /// </remarks>\n            public const string Bear = \"\\U0001F43B\";\n            \n            /// <summary>\n            /// Gets the \"Beating heart\" emoji. 💓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beating_heart</c>\n            /// </remarks>\n            public const string BeatingHeart = \"\\U0001F493\";\n            \n            /// <summary>\n            /// Gets the \"Beaver\" emoji. 🦫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beaver</c>\n            /// </remarks>\n            public const string Beaver = \"\\U0001F9AB\";\n            \n            /// <summary>\n            /// Gets the \"Bed\" emoji. 🛏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bed</c>\n            /// </remarks>\n            public const string Bed = \"\\U0001F6CF\";\n            \n            /// <summary>\n            /// Gets the \"Beer mug\" emoji. 🍺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beer_mug</c>\n            /// </remarks>\n            public const string BeerMug = \"\\U0001F37A\";\n            \n            /// <summary>\n            /// Gets the \"Beetle\" emoji. 🪲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beetle</c>\n            /// </remarks>\n            public const string Beetle = \"\\U0001FAB2\";\n            \n            /// <summary>\n            /// Gets the \"Bell\" emoji. 🔔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bell</c>\n            /// </remarks>\n            public const string Bell = \"\\U0001F514\";\n            \n            /// <summary>\n            /// Gets the \"Bellhop bell\" emoji. 🛎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bellhop_bell</c>\n            /// </remarks>\n            public const string BellhopBell = \"\\U0001F6CE\";\n            \n            /// <summary>\n            /// Gets the \"Bell pepper\" emoji. 🫑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bell_pepper</c>\n            /// </remarks>\n            public const string BellPepper = \"\\U0001FAD1\";\n            \n            /// <summary>\n            /// Gets the \"Bell with slash\" emoji. 🔕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bell_with_slash</c>\n            /// </remarks>\n            public const string BellWithSlash = \"\\U0001F515\";\n            \n            /// <summary>\n            /// Gets the \"Bento box\" emoji. 🍱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bento_box</c>\n            /// </remarks>\n            public const string BentoBox = \"\\U0001F371\";\n            \n            /// <summary>\n            /// Gets the \"Beverage box\" emoji. 🧃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>beverage_box</c>\n            /// </remarks>\n            public const string BeverageBox = \"\\U0001F9C3\";\n            \n            /// <summary>\n            /// Gets the \"Bicycle\" emoji. 🚲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bicycle</c>\n            /// </remarks>\n            public const string Bicycle = \"\\U0001F6B2\";\n            \n            /// <summary>\n            /// Gets the \"Bikini\" emoji. 👙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bikini</c>\n            /// </remarks>\n            public const string Bikini = \"\\U0001F459\";\n            \n            /// <summary>\n            /// Gets the \"Billed cap\" emoji. 🧢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>billed_cap</c>\n            /// </remarks>\n            public const string BilledCap = \"\\U0001F9E2\";\n            \n            /// <summary>\n            /// Gets the \"Biohazard\" emoji. ☣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>biohazard</c>\n            /// </remarks>\n            public const string Biohazard = \"\\U00002623\";\n            \n            /// <summary>\n            /// Gets the \"Bird\" emoji. 🐦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bird</c>\n            /// </remarks>\n            public const string Bird = \"\\U0001F426\";\n            \n            /// <summary>\n            /// Gets the \"Birthday cake\" emoji. 🎂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>birthday_cake</c>\n            /// </remarks>\n            public const string BirthdayCake = \"\\U0001F382\";\n            \n            /// <summary>\n            /// Gets the \"Bison\" emoji. 🦬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bison</c>\n            /// </remarks>\n            public const string Bison = \"\\U0001F9AC\";\n            \n            /// <summary>\n            /// Gets the \"Biting lip\" emoji. 🫦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>biting_lip</c>\n            /// </remarks>\n            public const string BitingLip = \"\\U0001FAE6\";\n            \n            /// <summary>\n            /// Gets the \"Black circle\" emoji. ⚫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_circle</c>\n            /// </remarks>\n            public const string BlackCircle = \"\\U000026AB\";\n            \n            /// <summary>\n            /// Gets the \"Black flag\" emoji. 🏴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_flag</c>\n            /// </remarks>\n            public const string BlackFlag = \"\\U0001F3F4\";\n            \n            /// <summary>\n            /// Gets the \"Black heart\" emoji. 🖤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_heart</c>\n            /// </remarks>\n            public const string BlackHeart = \"\\U0001F5A4\";\n            \n            /// <summary>\n            /// Gets the \"Black large square\" emoji. ⬛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_large_square</c>\n            /// </remarks>\n            public const string BlackLargeSquare = \"\\U00002B1B\";\n            \n            /// <summary>\n            /// Gets the \"Black medium-small square\" emoji. ◾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_medium_small_square</c>\n            /// </remarks>\n            public const string BlackMediumSmallSquare = \"\\U000025FE\";\n            \n            /// <summary>\n            /// Gets the \"Black medium square\" emoji. ◼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_medium_square</c>\n            /// </remarks>\n            public const string BlackMediumSquare = \"\\U000025FC\";\n            \n            /// <summary>\n            /// Gets the \"Black nib\" emoji. ✒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_nib</c>\n            /// </remarks>\n            public const string BlackNib = \"\\U00002712\";\n            \n            /// <summary>\n            /// Gets the \"Black small square\" emoji. ▪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_small_square</c>\n            /// </remarks>\n            public const string BlackSmallSquare = \"\\U000025AA\";\n            \n            /// <summary>\n            /// Gets the \"Black square button\" emoji. 🔲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>black_square_button</c>\n            /// </remarks>\n            public const string BlackSquareButton = \"\\U0001F532\";\n            \n            /// <summary>\n            /// Gets the \"Blossom\" emoji. 🌼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blossom</c>\n            /// </remarks>\n            public const string Blossom = \"\\U0001F33C\";\n            \n            /// <summary>\n            /// Gets the \"Blowfish\" emoji. 🐡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blowfish</c>\n            /// </remarks>\n            public const string Blowfish = \"\\U0001F421\";\n            \n            /// <summary>\n            /// Gets the \"Blueberries\" emoji. 🫐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blueberries</c>\n            /// </remarks>\n            public const string Blueberries = \"\\U0001FAD0\";\n            \n            /// <summary>\n            /// Gets the \"Blue book\" emoji. 📘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blue_book</c>\n            /// </remarks>\n            public const string BlueBook = \"\\U0001F4D8\";\n            \n            /// <summary>\n            /// Gets the \"Blue circle\" emoji. 🔵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blue_circle</c>\n            /// </remarks>\n            public const string BlueCircle = \"\\U0001F535\";\n            \n            /// <summary>\n            /// Gets the \"Blue heart\" emoji. 💙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blue_heart</c>\n            /// </remarks>\n            public const string BlueHeart = \"\\U0001F499\";\n            \n            /// <summary>\n            /// Gets the \"Blue square\" emoji. 🟦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>blue_square</c>\n            /// </remarks>\n            public const string BlueSquare = \"\\U0001F7E6\";\n            \n            /// <summary>\n            /// Gets the \"Boar\" emoji. 🐗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>boar</c>\n            /// </remarks>\n            public const string Boar = \"\\U0001F417\";\n            \n            /// <summary>\n            /// Gets the \"Bomb\" emoji. 💣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bomb</c>\n            /// </remarks>\n            public const string Bomb = \"\\U0001F4A3\";\n            \n            /// <summary>\n            /// Gets the \"Bone\" emoji. 🦴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bone</c>\n            /// </remarks>\n            public const string Bone = \"\\U0001F9B4\";\n            \n            /// <summary>\n            /// Gets the \"Bookmark\" emoji. 🔖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bookmark</c>\n            /// </remarks>\n            public const string Bookmark = \"\\U0001F516\";\n            \n            /// <summary>\n            /// Gets the \"Bookmark tabs\" emoji. 📑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bookmark_tabs</c>\n            /// </remarks>\n            public const string BookmarkTabs = \"\\U0001F4D1\";\n            \n            /// <summary>\n            /// Gets the \"Books\" emoji. 📚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>books</c>\n            /// </remarks>\n            public const string Books = \"\\U0001F4DA\";\n            \n            /// <summary>\n            /// Gets the \"Boomerang\" emoji. 🪃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>boomerang</c>\n            /// </remarks>\n            public const string Boomerang = \"\\U0001FA83\";\n            \n            /// <summary>\n            /// Gets the \"Bottle with popping cork\" emoji. 🍾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bottle_with_popping_cork</c>\n            /// </remarks>\n            public const string BottleWithPoppingCork = \"\\U0001F37E\";\n            \n            /// <summary>\n            /// Gets the \"Bouquet\" emoji. 💐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bouquet</c>\n            /// </remarks>\n            public const string Bouquet = \"\\U0001F490\";\n            \n            /// <summary>\n            /// Gets the \"Bow and arrow\" emoji. 🏹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bow_and_arrow</c>\n            /// </remarks>\n            public const string BowAndArrow = \"\\U0001F3F9\";\n            \n            /// <summary>\n            /// Gets the \"Bowling\" emoji. 🎳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bowling</c>\n            /// </remarks>\n            public const string Bowling = \"\\U0001F3B3\";\n            \n            /// <summary>\n            /// Gets the \"Bowl with spoon\" emoji. 🥣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bowl_with_spoon</c>\n            /// </remarks>\n            public const string BowlWithSpoon = \"\\U0001F963\";\n            \n            /// <summary>\n            /// Gets the \"Boxing glove\" emoji. 🥊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>boxing_glove</c>\n            /// </remarks>\n            public const string BoxingGlove = \"\\U0001F94A\";\n            \n            /// <summary>\n            /// Gets the \"Boy\" emoji. 👦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>boy</c>\n            /// </remarks>\n            public const string Boy = \"\\U0001F466\";\n            \n            /// <summary>\n            /// Gets the \"Brain\" emoji. 🧠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>brain</c>\n            /// </remarks>\n            public const string Brain = \"\\U0001F9E0\";\n            \n            /// <summary>\n            /// Gets the \"Bread\" emoji. 🍞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bread</c>\n            /// </remarks>\n            public const string Bread = \"\\U0001F35E\";\n            \n            /// <summary>\n            /// Gets the \"Breast-feeding\" emoji. 🤱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>breast_feeding</c>\n            /// </remarks>\n            public const string BreastFeeding = \"\\U0001F931\";\n            \n            /// <summary>\n            /// Gets the \"Brick\" emoji. 🧱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>brick</c>\n            /// </remarks>\n            public const string Brick = \"\\U0001F9F1\";\n            \n            /// <summary>\n            /// Gets the \"Bridge at night\" emoji. 🌉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bridge_at_night</c>\n            /// </remarks>\n            public const string BridgeAtNight = \"\\U0001F309\";\n            \n            /// <summary>\n            /// Gets the \"Briefcase\" emoji. 💼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>briefcase</c>\n            /// </remarks>\n            public const string Briefcase = \"\\U0001F4BC\";\n            \n            /// <summary>\n            /// Gets the \"Briefs\" emoji. 🩲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>briefs</c>\n            /// </remarks>\n            public const string Briefs = \"\\U0001FA72\";\n            \n            /// <summary>\n            /// Gets the \"Bright button\" emoji. 🔆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bright_button</c>\n            /// </remarks>\n            public const string BrightButton = \"\\U0001F506\";\n            \n            /// <summary>\n            /// Gets the \"Broccoli\" emoji. 🥦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>broccoli</c>\n            /// </remarks>\n            public const string Broccoli = \"\\U0001F966\";\n            \n            /// <summary>\n            /// Gets the \"Broken heart\" emoji. 💔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>broken_heart</c>\n            /// </remarks>\n            public const string BrokenHeart = \"\\U0001F494\";\n            \n            /// <summary>\n            /// Gets the \"Broom\" emoji. 🧹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>broom</c>\n            /// </remarks>\n            public const string Broom = \"\\U0001F9F9\";\n            \n            /// <summary>\n            /// Gets the \"Brown circle\" emoji. 🟤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>brown_circle</c>\n            /// </remarks>\n            public const string BrownCircle = \"\\U0001F7E4\";\n            \n            /// <summary>\n            /// Gets the \"Brown heart\" emoji. 🤎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>brown_heart</c>\n            /// </remarks>\n            public const string BrownHeart = \"\\U0001F90E\";\n            \n            /// <summary>\n            /// Gets the \"Brown square\" emoji. 🟫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>brown_square</c>\n            /// </remarks>\n            public const string BrownSquare = \"\\U0001F7EB\";\n            \n            /// <summary>\n            /// Gets the \"Bubbles\" emoji. 🫧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bubbles</c>\n            /// </remarks>\n            public const string Bubbles = \"\\U0001FAE7\";\n            \n            /// <summary>\n            /// Gets the \"Bubble tea\" emoji. 🧋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bubble_tea</c>\n            /// </remarks>\n            public const string BubbleTea = \"\\U0001F9CB\";\n            \n            /// <summary>\n            /// Gets the \"Bucket\" emoji. 🪣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bucket</c>\n            /// </remarks>\n            public const string Bucket = \"\\U0001FAA3\";\n            \n            /// <summary>\n            /// Gets the \"Bug\" emoji. 🐛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bug</c>\n            /// </remarks>\n            public const string Bug = \"\\U0001F41B\";\n            \n            /// <summary>\n            /// Gets the \"Building construction\" emoji. 🏗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>building_construction</c>\n            /// </remarks>\n            public const string BuildingConstruction = \"\\U0001F3D7\";\n            \n            /// <summary>\n            /// Gets the \"Bullet train\" emoji. 🚅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bullet_train</c>\n            /// </remarks>\n            public const string BulletTrain = \"\\U0001F685\";\n            \n            /// <summary>\n            /// Gets the \"Bullseye\" emoji. 🎯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bullseye</c>\n            /// </remarks>\n            public const string Bullseye = \"\\U0001F3AF\";\n            \n            /// <summary>\n            /// Gets the \"Burrito\" emoji. 🌯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>burrito</c>\n            /// </remarks>\n            public const string Burrito = \"\\U0001F32F\";\n            \n            /// <summary>\n            /// Gets the \"Bus\" emoji. 🚌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bus</c>\n            /// </remarks>\n            public const string Bus = \"\\U0001F68C\";\n            \n            /// <summary>\n            /// Gets the \"Bus stop\" emoji. 🚏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bus_stop</c>\n            /// </remarks>\n            public const string BusStop = \"\\U0001F68F\";\n            \n            /// <summary>\n            /// Gets the \"Bust in silhouette\" emoji. 👤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>bust_in_silhouette</c>\n            /// </remarks>\n            public const string BustInSilhouette = \"\\U0001F464\";\n            \n            /// <summary>\n            /// Gets the \"Busts in silhouette\" emoji. 👥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>busts_in_silhouette</c>\n            /// </remarks>\n            public const string BustsInSilhouette = \"\\U0001F465\";\n            \n            /// <summary>\n            /// Gets the \"Butter\" emoji. 🧈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>butter</c>\n            /// </remarks>\n            public const string Butter = \"\\U0001F9C8\";\n            \n            /// <summary>\n            /// Gets the \"Butterfly\" emoji. 🦋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>butterfly</c>\n            /// </remarks>\n            public const string Butterfly = \"\\U0001F98B\";\n            \n            /// <summary>\n            /// Gets the \"Cactus\" emoji. 🌵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cactus</c>\n            /// </remarks>\n            public const string Cactus = \"\\U0001F335\";\n            \n            /// <summary>\n            /// Gets the \"Calendar\" emoji. 📅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>calendar</c>\n            /// </remarks>\n            public const string Calendar = \"\\U0001F4C5\";\n            \n            /// <summary>\n            /// Gets the \"Call me hand\" emoji. 🤙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>call_me_hand</c>\n            /// </remarks>\n            public const string CallMeHand = \"\\U0001F919\";\n            \n            /// <summary>\n            /// Gets the \"Camel\" emoji. 🐪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>camel</c>\n            /// </remarks>\n            public const string Camel = \"\\U0001F42A\";\n            \n            /// <summary>\n            /// Gets the \"Camera\" emoji. 📷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>camera</c>\n            /// </remarks>\n            public const string Camera = \"\\U0001F4F7\";\n            \n            /// <summary>\n            /// Gets the \"Camera with flash\" emoji. 📸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>camera_with_flash</c>\n            /// </remarks>\n            public const string CameraWithFlash = \"\\U0001F4F8\";\n            \n            /// <summary>\n            /// Gets the \"Camping\" emoji. 🏕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>camping</c>\n            /// </remarks>\n            public const string Camping = \"\\U0001F3D5\";\n            \n            /// <summary>\n            /// Gets the \"Cancer\" emoji. ♋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cancer</c>\n            /// </remarks>\n            public const string Cancer = \"\\U0000264B\";\n            \n            /// <summary>\n            /// Gets the \"Candle\" emoji. 🕯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>candle</c>\n            /// </remarks>\n            public const string Candle = \"\\U0001F56F\";\n            \n            /// <summary>\n            /// Gets the \"Candy\" emoji. 🍬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>candy</c>\n            /// </remarks>\n            public const string Candy = \"\\U0001F36C\";\n            \n            /// <summary>\n            /// Gets the \"Canned food\" emoji. 🥫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>canned_food</c>\n            /// </remarks>\n            public const string CannedFood = \"\\U0001F96B\";\n            \n            /// <summary>\n            /// Gets the \"Canoe\" emoji. 🛶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>canoe</c>\n            /// </remarks>\n            public const string Canoe = \"\\U0001F6F6\";\n            \n            /// <summary>\n            /// Gets the \"Capricorn\" emoji. ♑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>capricorn</c>\n            /// </remarks>\n            public const string Capricorn = \"\\U00002651\";\n            \n            /// <summary>\n            /// Gets the \"Card file box\" emoji. 🗃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>card_file_box</c>\n            /// </remarks>\n            public const string CardFileBox = \"\\U0001F5C3\";\n            \n            /// <summary>\n            /// Gets the \"Card index\" emoji. 📇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>card_index</c>\n            /// </remarks>\n            public const string CardIndex = \"\\U0001F4C7\";\n            \n            /// <summary>\n            /// Gets the \"Card index dividers\" emoji. 🗂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>card_index_dividers</c>\n            /// </remarks>\n            public const string CardIndexDividers = \"\\U0001F5C2\";\n            \n            /// <summary>\n            /// Gets the \"Carousel horse\" emoji. 🎠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>carousel_horse</c>\n            /// </remarks>\n            public const string CarouselHorse = \"\\U0001F3A0\";\n            \n            /// <summary>\n            /// Gets the \"Carpentry saw\" emoji. 🪚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>carpentry_saw</c>\n            /// </remarks>\n            public const string CarpentrySaw = \"\\U0001FA9A\";\n            \n            /// <summary>\n            /// Gets the \"Carp streamer\" emoji. 🎏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>carp_streamer</c>\n            /// </remarks>\n            public const string CarpStreamer = \"\\U0001F38F\";\n            \n            /// <summary>\n            /// Gets the \"Carrot\" emoji. 🥕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>carrot</c>\n            /// </remarks>\n            public const string Carrot = \"\\U0001F955\";\n            \n            /// <summary>\n            /// Gets the \"Castle\" emoji. 🏰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>castle</c>\n            /// </remarks>\n            public const string Castle = \"\\U0001F3F0\";\n            \n            /// <summary>\n            /// Gets the \"Cat\" emoji. 🐈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cat</c>\n            /// </remarks>\n            public const string Cat = \"\\U0001F408\";\n            \n            /// <summary>\n            /// Gets the \"Cat face\" emoji. 🐱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cat_face</c>\n            /// </remarks>\n            public const string CatFace = \"\\U0001F431\";\n            \n            /// <summary>\n            /// Gets the \"Cat with tears of joy\" emoji. 😹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cat_with_tears_of_joy</c>\n            /// </remarks>\n            public const string CatWithTearsOfJoy = \"\\U0001F639\";\n            \n            /// <summary>\n            /// Gets the \"Cat with wry smile\" emoji. 😼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cat_with_wry_smile</c>\n            /// </remarks>\n            public const string CatWithWrySmile = \"\\U0001F63C\";\n            \n            /// <summary>\n            /// Gets the \"Chains\" emoji. ⛓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chains</c>\n            /// </remarks>\n            public const string Chains = \"\\U000026D3\";\n            \n            /// <summary>\n            /// Gets the \"Chair\" emoji. 🪑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chair</c>\n            /// </remarks>\n            public const string Chair = \"\\U0001FA91\";\n            \n            /// <summary>\n            /// Gets the \"Chart decreasing\" emoji. 📉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chart_decreasing</c>\n            /// </remarks>\n            public const string ChartDecreasing = \"\\U0001F4C9\";\n            \n            /// <summary>\n            /// Gets the \"Chart increasing\" emoji. 📈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chart_increasing</c>\n            /// </remarks>\n            public const string ChartIncreasing = \"\\U0001F4C8\";\n            \n            /// <summary>\n            /// Gets the \"Chart increasing with yen\" emoji. 💹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chart_increasing_with_yen</c>\n            /// </remarks>\n            public const string ChartIncreasingWithYen = \"\\U0001F4B9\";\n            \n            /// <summary>\n            /// Gets the \"Check box with check\" emoji. ☑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>check_box_with_check</c>\n            /// </remarks>\n            public const string CheckBoxWithCheck = \"\\U00002611\";\n            \n            /// <summary>\n            /// Gets the \"Check mark\" emoji. ✔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>check_mark</c>\n            /// </remarks>\n            public const string CheckMark = \"\\U00002714\";\n            \n            /// <summary>\n            /// Gets the \"Check mark button\" emoji. ✅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>check_mark_button</c>\n            /// </remarks>\n            public const string CheckMarkButton = \"\\U00002705\";\n            \n            /// <summary>\n            /// Gets the \"Cheese wedge\" emoji. 🧀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cheese_wedge</c>\n            /// </remarks>\n            public const string CheeseWedge = \"\\U0001F9C0\";\n            \n            /// <summary>\n            /// Gets the \"Chequered flag\" emoji. 🏁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chequered_flag</c>\n            /// </remarks>\n            public const string ChequeredFlag = \"\\U0001F3C1\";\n            \n            /// <summary>\n            /// Gets the \"Cherries\" emoji. 🍒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cherries</c>\n            /// </remarks>\n            public const string Cherries = \"\\U0001F352\";\n            \n            /// <summary>\n            /// Gets the \"Cherry blossom\" emoji. 🌸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cherry_blossom</c>\n            /// </remarks>\n            public const string CherryBlossom = \"\\U0001F338\";\n            \n            /// <summary>\n            /// Gets the \"Chess pawn\" emoji. ♟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chess_pawn</c>\n            /// </remarks>\n            public const string ChessPawn = \"\\U0000265F\";\n            \n            /// <summary>\n            /// Gets the \"Chestnut\" emoji. 🌰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chestnut</c>\n            /// </remarks>\n            public const string Chestnut = \"\\U0001F330\";\n            \n            /// <summary>\n            /// Gets the \"Chicken\" emoji. 🐔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chicken</c>\n            /// </remarks>\n            public const string Chicken = \"\\U0001F414\";\n            \n            /// <summary>\n            /// Gets the \"Child\" emoji. 🧒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>child</c>\n            /// </remarks>\n            public const string Child = \"\\U0001F9D2\";\n            \n            /// <summary>\n            /// Gets the \"Children crossing\" emoji. 🚸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>children_crossing</c>\n            /// </remarks>\n            public const string ChildrenCrossing = \"\\U0001F6B8\";\n            \n            /// <summary>\n            /// Gets the \"Chipmunk\" emoji. 🐿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chipmunk</c>\n            /// </remarks>\n            public const string Chipmunk = \"\\U0001F43F\";\n            \n            /// <summary>\n            /// Gets the \"Chocolate bar\" emoji. 🍫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chocolate_bar</c>\n            /// </remarks>\n            public const string ChocolateBar = \"\\U0001F36B\";\n            \n            /// <summary>\n            /// Gets the \"Chopsticks\" emoji. 🥢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>chopsticks</c>\n            /// </remarks>\n            public const string Chopsticks = \"\\U0001F962\";\n            \n            /// <summary>\n            /// Gets the \"Christmas tree\" emoji. 🎄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>christmas_tree</c>\n            /// </remarks>\n            public const string ChristmasTree = \"\\U0001F384\";\n            \n            /// <summary>\n            /// Gets the \"Church\" emoji. ⛪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>church</c>\n            /// </remarks>\n            public const string Church = \"\\U000026EA\";\n            \n            /// <summary>\n            /// Gets the \"Cigarette\" emoji. 🚬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cigarette</c>\n            /// </remarks>\n            public const string Cigarette = \"\\U0001F6AC\";\n            \n            /// <summary>\n            /// Gets the \"Cinema\" emoji. 🎦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cinema</c>\n            /// </remarks>\n            public const string Cinema = \"\\U0001F3A6\";\n            \n            /// <summary>\n            /// Gets the \"Circled M\" emoji. Ⓜ\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>circled_m</c>\n            /// </remarks>\n            public const string CircledM = \"\\U000024C2\";\n            \n            /// <summary>\n            /// Gets the \"Circus tent\" emoji. 🎪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>circus_tent</c>\n            /// </remarks>\n            public const string CircusTent = \"\\U0001F3AA\";\n            \n            /// <summary>\n            /// Gets the \"Cityscape\" emoji. 🏙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cityscape</c>\n            /// </remarks>\n            public const string Cityscape = \"\\U0001F3D9\";\n            \n            /// <summary>\n            /// Gets the \"Cityscape at dusk\" emoji. 🌆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cityscape_at_dusk</c>\n            /// </remarks>\n            public const string CityscapeAtDusk = \"\\U0001F306\";\n            \n            /// <summary>\n            /// Gets the \"Clamp\" emoji. 🗜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clamp</c>\n            /// </remarks>\n            public const string Clamp = \"\\U0001F5DC\";\n            \n            /// <summary>\n            /// Gets the \"Clapper board\" emoji. 🎬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clapper_board</c>\n            /// </remarks>\n            public const string ClapperBoard = \"\\U0001F3AC\";\n            \n            /// <summary>\n            /// Gets the \"Clapping hands\" emoji. 👏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clapping_hands</c>\n            /// </remarks>\n            public const string ClappingHands = \"\\U0001F44F\";\n            \n            /// <summary>\n            /// Gets the \"Classical building\" emoji. 🏛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>classical_building</c>\n            /// </remarks>\n            public const string ClassicalBuilding = \"\\U0001F3DB\";\n            \n            /// <summary>\n            /// Gets the \"CL button\" emoji. 🆑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cl_button</c>\n            /// </remarks>\n            public const string ClButton = \"\\U0001F191\";\n            \n            /// <summary>\n            /// Gets the \"Clinking beer mugs\" emoji. 🍻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clinking_beer_mugs</c>\n            /// </remarks>\n            public const string ClinkingBeerMugs = \"\\U0001F37B\";\n            \n            /// <summary>\n            /// Gets the \"Clinking glasses\" emoji. 🥂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clinking_glasses</c>\n            /// </remarks>\n            public const string ClinkingGlasses = \"\\U0001F942\";\n            \n            /// <summary>\n            /// Gets the \"Clipboard\" emoji. 📋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clipboard</c>\n            /// </remarks>\n            public const string Clipboard = \"\\U0001F4CB\";\n            \n            /// <summary>\n            /// Gets the \"Clockwise vertical arrows\" emoji. 🔃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clockwise_vertical_arrows</c>\n            /// </remarks>\n            public const string ClockwiseVerticalArrows = \"\\U0001F503\";\n            \n            /// <summary>\n            /// Gets the \"Closed book\" emoji. 📕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>closed_book</c>\n            /// </remarks>\n            public const string ClosedBook = \"\\U0001F4D5\";\n            \n            /// <summary>\n            /// Gets the \"Closed mailbox with lowered flag\" emoji. 📪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>closed_mailbox_with_lowered_flag</c>\n            /// </remarks>\n            public const string ClosedMailboxWithLoweredFlag = \"\\U0001F4EA\";\n            \n            /// <summary>\n            /// Gets the \"Closed mailbox with raised flag\" emoji. 📫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>closed_mailbox_with_raised_flag</c>\n            /// </remarks>\n            public const string ClosedMailboxWithRaisedFlag = \"\\U0001F4EB\";\n            \n            /// <summary>\n            /// Gets the \"Closed umbrella\" emoji. 🌂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>closed_umbrella</c>\n            /// </remarks>\n            public const string ClosedUmbrella = \"\\U0001F302\";\n            \n            /// <summary>\n            /// Gets the \"Cloud\" emoji. ☁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cloud</c>\n            /// </remarks>\n            public const string Cloud = \"\\U00002601\";\n            \n            /// <summary>\n            /// Gets the \"Cloud with lightning\" emoji. 🌩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cloud_with_lightning</c>\n            /// </remarks>\n            public const string CloudWithLightning = \"\\U0001F329\";\n            \n            /// <summary>\n            /// Gets the \"Cloud with lightning and rain\" emoji. ⛈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cloud_with_lightning_and_rain</c>\n            /// </remarks>\n            public const string CloudWithLightningAndRain = \"\\U000026C8\";\n            \n            /// <summary>\n            /// Gets the \"Cloud with rain\" emoji. 🌧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cloud_with_rain</c>\n            /// </remarks>\n            public const string CloudWithRain = \"\\U0001F327\";\n            \n            /// <summary>\n            /// Gets the \"Cloud with snow\" emoji. 🌨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cloud_with_snow</c>\n            /// </remarks>\n            public const string CloudWithSnow = \"\\U0001F328\";\n            \n            /// <summary>\n            /// Gets the \"Clown face\" emoji. 🤡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clown_face</c>\n            /// </remarks>\n            public const string ClownFace = \"\\U0001F921\";\n            \n            /// <summary>\n            /// Gets the \"Club suit\" emoji. ♣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>club_suit</c>\n            /// </remarks>\n            public const string ClubSuit = \"\\U00002663\";\n            \n            /// <summary>\n            /// Gets the \"Clutch bag\" emoji. 👝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>clutch_bag</c>\n            /// </remarks>\n            public const string ClutchBag = \"\\U0001F45D\";\n            \n            /// <summary>\n            /// Gets the \"Coat\" emoji. 🧥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>coat</c>\n            /// </remarks>\n            public const string Coat = \"\\U0001F9E5\";\n            \n            /// <summary>\n            /// Gets the \"Cockroach\" emoji. 🪳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cockroach</c>\n            /// </remarks>\n            public const string Cockroach = \"\\U0001FAB3\";\n            \n            /// <summary>\n            /// Gets the \"Cocktail glass\" emoji. 🍸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cocktail_glass</c>\n            /// </remarks>\n            public const string CocktailGlass = \"\\U0001F378\";\n            \n            /// <summary>\n            /// Gets the \"Coconut\" emoji. 🥥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>coconut</c>\n            /// </remarks>\n            public const string Coconut = \"\\U0001F965\";\n            \n            /// <summary>\n            /// Gets the \"Coffin\" emoji. ⚰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>coffin</c>\n            /// </remarks>\n            public const string Coffin = \"\\U000026B0\";\n            \n            /// <summary>\n            /// Gets the \"Coin\" emoji. 🪙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>coin</c>\n            /// </remarks>\n            public const string Coin = \"\\U0001FA99\";\n            \n            /// <summary>\n            /// Gets the \"Cold face\" emoji. 🥶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cold_face</c>\n            /// </remarks>\n            public const string ColdFace = \"\\U0001F976\";\n            \n            /// <summary>\n            /// Gets the \"Collision\" emoji. 💥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>collision</c>\n            /// </remarks>\n            public const string Collision = \"\\U0001F4A5\";\n            \n            /// <summary>\n            /// Gets the \"Comet\" emoji. ☄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>comet</c>\n            /// </remarks>\n            public const string Comet = \"\\U00002604\";\n            \n            /// <summary>\n            /// Gets the \"Compass\" emoji. 🧭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>compass</c>\n            /// </remarks>\n            public const string Compass = \"\\U0001F9ED\";\n            \n            /// <summary>\n            /// Gets the \"Computer disk\" emoji. 💽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>computer_disk</c>\n            /// </remarks>\n            public const string ComputerDisk = \"\\U0001F4BD\";\n            \n            /// <summary>\n            /// Gets the \"Computer mouse\" emoji. 🖱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>computer_mouse</c>\n            /// </remarks>\n            public const string ComputerMouse = \"\\U0001F5B1\";\n            \n            /// <summary>\n            /// Gets the \"Confetti ball\" emoji. 🎊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>confetti_ball</c>\n            /// </remarks>\n            public const string ConfettiBall = \"\\U0001F38A\";\n            \n            /// <summary>\n            /// Gets the \"Confounded face\" emoji. 😖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>confounded_face</c>\n            /// </remarks>\n            public const string ConfoundedFace = \"\\U0001F616\";\n            \n            /// <summary>\n            /// Gets the \"Confused face\" emoji. 😕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>confused_face</c>\n            /// </remarks>\n            public const string ConfusedFace = \"\\U0001F615\";\n            \n            /// <summary>\n            /// Gets the \"Construction\" emoji. 🚧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>construction</c>\n            /// </remarks>\n            public const string Construction = \"\\U0001F6A7\";\n            \n            /// <summary>\n            /// Gets the \"Construction worker\" emoji. 👷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>construction_worker</c>\n            /// </remarks>\n            public const string ConstructionWorker = \"\\U0001F477\";\n            \n            /// <summary>\n            /// Gets the \"Control knobs\" emoji. 🎛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>control_knobs</c>\n            /// </remarks>\n            public const string ControlKnobs = \"\\U0001F39B\";\n            \n            /// <summary>\n            /// Gets the \"Convenience store\" emoji. 🏪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>convenience_store</c>\n            /// </remarks>\n            public const string ConvenienceStore = \"\\U0001F3EA\";\n            \n            /// <summary>\n            /// Gets the \"Cooked rice\" emoji. 🍚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cooked_rice</c>\n            /// </remarks>\n            public const string CookedRice = \"\\U0001F35A\";\n            \n            /// <summary>\n            /// Gets the \"Cookie\" emoji. 🍪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cookie</c>\n            /// </remarks>\n            public const string Cookie = \"\\U0001F36A\";\n            \n            /// <summary>\n            /// Gets the \"Cooking\" emoji. 🍳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cooking</c>\n            /// </remarks>\n            public const string Cooking = \"\\U0001F373\";\n            \n            /// <summary>\n            /// Gets the \"COOL button\" emoji. 🆒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cool_button</c>\n            /// </remarks>\n            public const string CoolButton = \"\\U0001F192\";\n            \n            /// <summary>\n            /// Gets the \"Copyright\" emoji. ©\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>copyright</c>\n            /// </remarks>\n            public const string Copyright = \"\\U000000A9\";\n            \n            /// <summary>\n            /// Gets the \"Coral\" emoji. 🪸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>coral</c>\n            /// </remarks>\n            public const string Coral = \"\\U0001FAB8\";\n            \n            /// <summary>\n            /// Gets the \"Couch and lamp\" emoji. 🛋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>couch_and_lamp</c>\n            /// </remarks>\n            public const string CouchAndLamp = \"\\U0001F6CB\";\n            \n            /// <summary>\n            /// Gets the \"Counterclockwise arrows button\" emoji. 🔄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>counterclockwise_arrows_button</c>\n            /// </remarks>\n            public const string CounterclockwiseArrowsButton = \"\\U0001F504\";\n            \n            /// <summary>\n            /// Gets the \"Couple with heart\" emoji. 💑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>couple_with_heart</c>\n            /// </remarks>\n            public const string CoupleWithHeart = \"\\U0001F491\";\n            \n            /// <summary>\n            /// Gets the \"Cow\" emoji. 🐄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cow</c>\n            /// </remarks>\n            public const string Cow = \"\\U0001F404\";\n            \n            /// <summary>\n            /// Gets the \"Cowboy hat face\" emoji. 🤠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cowboy_hat_face</c>\n            /// </remarks>\n            public const string CowboyHatFace = \"\\U0001F920\";\n            \n            /// <summary>\n            /// Gets the \"Cow face\" emoji. 🐮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cow_face</c>\n            /// </remarks>\n            public const string CowFace = \"\\U0001F42E\";\n            \n            /// <summary>\n            /// Gets the \"Crab\" emoji. 🦀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crab</c>\n            /// </remarks>\n            public const string Crab = \"\\U0001F980\";\n            \n            /// <summary>\n            /// Gets the \"Crayon\" emoji. 🖍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crayon</c>\n            /// </remarks>\n            public const string Crayon = \"\\U0001F58D\";\n            \n            /// <summary>\n            /// Gets the \"Credit card\" emoji. 💳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>credit_card</c>\n            /// </remarks>\n            public const string CreditCard = \"\\U0001F4B3\";\n            \n            /// <summary>\n            /// Gets the \"Crescent moon\" emoji. 🌙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crescent_moon</c>\n            /// </remarks>\n            public const string CrescentMoon = \"\\U0001F319\";\n            \n            /// <summary>\n            /// Gets the \"Cricket\" emoji. 🦗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cricket</c>\n            /// </remarks>\n            public const string Cricket = \"\\U0001F997\";\n            \n            /// <summary>\n            /// Gets the \"Cricket game\" emoji. 🏏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cricket_game</c>\n            /// </remarks>\n            public const string CricketGame = \"\\U0001F3CF\";\n            \n            /// <summary>\n            /// Gets the \"Crocodile\" emoji. 🐊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crocodile</c>\n            /// </remarks>\n            public const string Crocodile = \"\\U0001F40A\";\n            \n            /// <summary>\n            /// Gets the \"Croissant\" emoji. 🥐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>croissant</c>\n            /// </remarks>\n            public const string Croissant = \"\\U0001F950\";\n            \n            /// <summary>\n            /// Gets the \"Crossed fingers\" emoji. 🤞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crossed_fingers</c>\n            /// </remarks>\n            public const string CrossedFingers = \"\\U0001F91E\";\n            \n            /// <summary>\n            /// Gets the \"Crossed flags\" emoji. 🎌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crossed_flags</c>\n            /// </remarks>\n            public const string CrossedFlags = \"\\U0001F38C\";\n            \n            /// <summary>\n            /// Gets the \"Crossed swords\" emoji. ⚔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crossed_swords</c>\n            /// </remarks>\n            public const string CrossedSwords = \"\\U00002694\";\n            \n            /// <summary>\n            /// Gets the \"Cross mark\" emoji. ❌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cross_mark</c>\n            /// </remarks>\n            public const string CrossMark = \"\\U0000274C\";\n            \n            /// <summary>\n            /// Gets the \"Cross mark button\" emoji. ❎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cross_mark_button</c>\n            /// </remarks>\n            public const string CrossMarkButton = \"\\U0000274E\";\n            \n            /// <summary>\n            /// Gets the \"Crown\" emoji. 👑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crown</c>\n            /// </remarks>\n            public const string Crown = \"\\U0001F451\";\n            \n            /// <summary>\n            /// Gets the \"Crutch\" emoji. 🩼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crutch</c>\n            /// </remarks>\n            public const string Crutch = \"\\U0001FA7C\";\n            \n            /// <summary>\n            /// Gets the \"Crying cat\" emoji. 😿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crying_cat</c>\n            /// </remarks>\n            public const string CryingCat = \"\\U0001F63F\";\n            \n            /// <summary>\n            /// Gets the \"Crying face\" emoji. 😢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crying_face</c>\n            /// </remarks>\n            public const string CryingFace = \"\\U0001F622\";\n            \n            /// <summary>\n            /// Gets the \"Crystal ball\" emoji. 🔮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>crystal_ball</c>\n            /// </remarks>\n            public const string CrystalBall = \"\\U0001F52E\";\n            \n            /// <summary>\n            /// Gets the \"Cucumber\" emoji. 🥒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cucumber</c>\n            /// </remarks>\n            public const string Cucumber = \"\\U0001F952\";\n            \n            /// <summary>\n            /// Gets the \"Cupcake\" emoji. 🧁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cupcake</c>\n            /// </remarks>\n            public const string Cupcake = \"\\U0001F9C1\";\n            \n            /// <summary>\n            /// Gets the \"Cup with straw\" emoji. 🥤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cup_with_straw</c>\n            /// </remarks>\n            public const string CupWithStraw = \"\\U0001F964\";\n            \n            /// <summary>\n            /// Gets the \"Curling stone\" emoji. 🥌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>curling_stone</c>\n            /// </remarks>\n            public const string CurlingStone = \"\\U0001F94C\";\n            \n            /// <summary>\n            /// Gets the \"Curly hair\" emoji. 🦱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>curly_hair</c>\n            /// </remarks>\n            public const string CurlyHair = \"\\U0001F9B1\";\n            \n            /// <summary>\n            /// Gets the \"Curly loop\" emoji. ➰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>curly_loop</c>\n            /// </remarks>\n            public const string CurlyLoop = \"\\U000027B0\";\n            \n            /// <summary>\n            /// Gets the \"Currency exchange\" emoji. 💱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>currency_exchange</c>\n            /// </remarks>\n            public const string CurrencyExchange = \"\\U0001F4B1\";\n            \n            /// <summary>\n            /// Gets the \"Curry rice\" emoji. 🍛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>curry_rice</c>\n            /// </remarks>\n            public const string CurryRice = \"\\U0001F35B\";\n            \n            /// <summary>\n            /// Gets the \"Custard\" emoji. 🍮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>custard</c>\n            /// </remarks>\n            public const string Custard = \"\\U0001F36E\";\n            \n            /// <summary>\n            /// Gets the \"Customs\" emoji. 🛃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>customs</c>\n            /// </remarks>\n            public const string Customs = \"\\U0001F6C3\";\n            \n            /// <summary>\n            /// Gets the \"Cut of meat\" emoji. 🥩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cut_of_meat</c>\n            /// </remarks>\n            public const string CutOfMeat = \"\\U0001F969\";\n            \n            /// <summary>\n            /// Gets the \"Cyclone\" emoji. 🌀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>cyclone</c>\n            /// </remarks>\n            public const string Cyclone = \"\\U0001F300\";\n            \n            /// <summary>\n            /// Gets the \"Dagger\" emoji. 🗡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dagger</c>\n            /// </remarks>\n            public const string Dagger = \"\\U0001F5E1\";\n            \n            /// <summary>\n            /// Gets the \"Dango\" emoji. 🍡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dango</c>\n            /// </remarks>\n            public const string Dango = \"\\U0001F361\";\n            \n            /// <summary>\n            /// Gets the \"Dark skin tone\" emoji. 🏿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dark_skin_tone</c>\n            /// </remarks>\n            public const string DarkSkinTone = \"\\U0001F3FF\";\n            \n            /// <summary>\n            /// Gets the \"Dashing away\" emoji. 💨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dashing_away</c>\n            /// </remarks>\n            public const string DashingAway = \"\\U0001F4A8\";\n            \n            /// <summary>\n            /// Gets the \"Deaf person\" emoji. 🧏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>deaf_person</c>\n            /// </remarks>\n            public const string DeafPerson = \"\\U0001F9CF\";\n            \n            /// <summary>\n            /// Gets the \"Deciduous tree\" emoji. 🌳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>deciduous_tree</c>\n            /// </remarks>\n            public const string DeciduousTree = \"\\U0001F333\";\n            \n            /// <summary>\n            /// Gets the \"Deer\" emoji. 🦌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>deer</c>\n            /// </remarks>\n            public const string Deer = \"\\U0001F98C\";\n            \n            /// <summary>\n            /// Gets the \"Delivery truck\" emoji. 🚚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>delivery_truck</c>\n            /// </remarks>\n            public const string DeliveryTruck = \"\\U0001F69A\";\n            \n            /// <summary>\n            /// Gets the \"Department store\" emoji. 🏬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>department_store</c>\n            /// </remarks>\n            public const string DepartmentStore = \"\\U0001F3EC\";\n            \n            /// <summary>\n            /// Gets the \"Derelict house\" emoji. 🏚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>derelict_house</c>\n            /// </remarks>\n            public const string DerelictHouse = \"\\U0001F3DA\";\n            \n            /// <summary>\n            /// Gets the \"Desert\" emoji. 🏜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>desert</c>\n            /// </remarks>\n            public const string Desert = \"\\U0001F3DC\";\n            \n            /// <summary>\n            /// Gets the \"Desert island\" emoji. 🏝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>desert_island</c>\n            /// </remarks>\n            public const string DesertIsland = \"\\U0001F3DD\";\n            \n            /// <summary>\n            /// Gets the \"Desktop computer\" emoji. 🖥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>desktop_computer</c>\n            /// </remarks>\n            public const string DesktopComputer = \"\\U0001F5A5\";\n            \n            /// <summary>\n            /// Gets the \"Detective\" emoji. 🕵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>detective</c>\n            /// </remarks>\n            public const string Detective = \"\\U0001F575\";\n            \n            /// <summary>\n            /// Gets the \"Diamond suit\" emoji. ♦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>diamond_suit</c>\n            /// </remarks>\n            public const string DiamondSuit = \"\\U00002666\";\n            \n            /// <summary>\n            /// Gets the \"Diamond with a dot\" emoji. 💠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>diamond_with_a_dot</c>\n            /// </remarks>\n            public const string DiamondWithADot = \"\\U0001F4A0\";\n            \n            /// <summary>\n            /// Gets the \"Dim button\" emoji. 🔅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dim_button</c>\n            /// </remarks>\n            public const string DimButton = \"\\U0001F505\";\n            \n            /// <summary>\n            /// Gets the \"Disappointed face\" emoji. 😞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>disappointed_face</c>\n            /// </remarks>\n            public const string DisappointedFace = \"\\U0001F61E\";\n            \n            /// <summary>\n            /// Gets the \"Disguised face\" emoji. 🥸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>disguised_face</c>\n            /// </remarks>\n            public const string DisguisedFace = \"\\U0001F978\";\n            \n            /// <summary>\n            /// Gets the \"Distorted face\" emoji. 🫪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>distorted_face</c>\n            /// </remarks>\n            public const string DistortedFace = \"\\U0001FAEA\";\n            \n            /// <summary>\n            /// Gets the \"Divide\" emoji. ➗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>divide</c>\n            /// </remarks>\n            public const string Divide = \"\\U00002797\";\n            \n            /// <summary>\n            /// Gets the \"Diving mask\" emoji. 🤿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>diving_mask</c>\n            /// </remarks>\n            public const string DivingMask = \"\\U0001F93F\";\n            \n            /// <summary>\n            /// Gets the \"Diya lamp\" emoji. 🪔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>diya_lamp</c>\n            /// </remarks>\n            public const string DiyaLamp = \"\\U0001FA94\";\n            \n            /// <summary>\n            /// Gets the \"Dizzy\" emoji. 💫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dizzy</c>\n            /// </remarks>\n            public const string Dizzy = \"\\U0001F4AB\";\n            \n            /// <summary>\n            /// Gets the \"Dna\" emoji. 🧬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dna</c>\n            /// </remarks>\n            public const string Dna = \"\\U0001F9EC\";\n            \n            /// <summary>\n            /// Gets the \"Dodo\" emoji. 🦤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dodo</c>\n            /// </remarks>\n            public const string Dodo = \"\\U0001F9A4\";\n            \n            /// <summary>\n            /// Gets the \"Dog\" emoji. 🐕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dog</c>\n            /// </remarks>\n            public const string Dog = \"\\U0001F415\";\n            \n            /// <summary>\n            /// Gets the \"Dog face\" emoji. 🐶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dog_face</c>\n            /// </remarks>\n            public const string DogFace = \"\\U0001F436\";\n            \n            /// <summary>\n            /// Gets the \"Dollar banknote\" emoji. 💵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dollar_banknote</c>\n            /// </remarks>\n            public const string DollarBanknote = \"\\U0001F4B5\";\n            \n            /// <summary>\n            /// Gets the \"Dolphin\" emoji. 🐬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dolphin</c>\n            /// </remarks>\n            public const string Dolphin = \"\\U0001F42C\";\n            \n            /// <summary>\n            /// Gets the \"Donkey\" emoji. 🫏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>donkey</c>\n            /// </remarks>\n            public const string Donkey = \"\\U0001FACF\";\n            \n            /// <summary>\n            /// Gets the \"Door\" emoji. 🚪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>door</c>\n            /// </remarks>\n            public const string Door = \"\\U0001F6AA\";\n            \n            /// <summary>\n            /// Gets the \"Dotted line face\" emoji. 🫥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dotted_line_face</c>\n            /// </remarks>\n            public const string DottedLineFace = \"\\U0001FAE5\";\n            \n            /// <summary>\n            /// Gets the \"Dotted six-pointed star\" emoji. 🔯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dotted_six_pointed_star</c>\n            /// </remarks>\n            public const string DottedSixPointedStar = \"\\U0001F52F\";\n            \n            /// <summary>\n            /// Gets the \"Double curly loop\" emoji. ➿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>double_curly_loop</c>\n            /// </remarks>\n            public const string DoubleCurlyLoop = \"\\U000027BF\";\n            \n            /// <summary>\n            /// Gets the \"Double exclamation mark\" emoji. ‼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>double_exclamation_mark</c>\n            /// </remarks>\n            public const string DoubleExclamationMark = \"\\U0000203C\";\n            \n            /// <summary>\n            /// Gets the \"Doughnut\" emoji. 🍩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>doughnut</c>\n            /// </remarks>\n            public const string Doughnut = \"\\U0001F369\";\n            \n            /// <summary>\n            /// Gets the \"Dove\" emoji. 🕊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dove</c>\n            /// </remarks>\n            public const string Dove = \"\\U0001F54A\";\n            \n            /// <summary>\n            /// Gets the \"Down arrow\" emoji. ⬇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>down_arrow</c>\n            /// </remarks>\n            public const string DownArrow = \"\\U00002B07\";\n            \n            /// <summary>\n            /// Gets the \"Downcast face with sweat\" emoji. 😓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>downcast_face_with_sweat</c>\n            /// </remarks>\n            public const string DowncastFaceWithSweat = \"\\U0001F613\";\n            \n            /// <summary>\n            /// Gets the \"Down-left arrow\" emoji. ↙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>down_left_arrow</c>\n            /// </remarks>\n            public const string DownLeftArrow = \"\\U00002199\";\n            \n            /// <summary>\n            /// Gets the \"Down-right arrow\" emoji. ↘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>down_right_arrow</c>\n            /// </remarks>\n            public const string DownRightArrow = \"\\U00002198\";\n            \n            /// <summary>\n            /// Gets the \"Downwards button\" emoji. 🔽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>downwards_button</c>\n            /// </remarks>\n            public const string DownwardsButton = \"\\U0001F53D\";\n            \n            /// <summary>\n            /// Gets the \"Dragon\" emoji. 🐉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dragon</c>\n            /// </remarks>\n            public const string Dragon = \"\\U0001F409\";\n            \n            /// <summary>\n            /// Gets the \"Dragon face\" emoji. 🐲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dragon_face</c>\n            /// </remarks>\n            public const string DragonFace = \"\\U0001F432\";\n            \n            /// <summary>\n            /// Gets the \"Dress\" emoji. 👗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dress</c>\n            /// </remarks>\n            public const string Dress = \"\\U0001F457\";\n            \n            /// <summary>\n            /// Gets the \"Drooling face\" emoji. 🤤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>drooling_face</c>\n            /// </remarks>\n            public const string DroolingFace = \"\\U0001F924\";\n            \n            /// <summary>\n            /// Gets the \"Droplet\" emoji. 💧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>droplet</c>\n            /// </remarks>\n            public const string Droplet = \"\\U0001F4A7\";\n            \n            /// <summary>\n            /// Gets the \"Drop of blood\" emoji. 🩸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>drop_of_blood</c>\n            /// </remarks>\n            public const string DropOfBlood = \"\\U0001FA78\";\n            \n            /// <summary>\n            /// Gets the \"Drum\" emoji. 🥁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>drum</c>\n            /// </remarks>\n            public const string Drum = \"\\U0001F941\";\n            \n            /// <summary>\n            /// Gets the \"Duck\" emoji. 🦆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>duck</c>\n            /// </remarks>\n            public const string Duck = \"\\U0001F986\";\n            \n            /// <summary>\n            /// Gets the \"Dumpling\" emoji. 🥟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dumpling</c>\n            /// </remarks>\n            public const string Dumpling = \"\\U0001F95F\";\n            \n            /// <summary>\n            /// Gets the \"Dvd\" emoji. 📀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>dvd</c>\n            /// </remarks>\n            public const string Dvd = \"\\U0001F4C0\";\n            \n            /// <summary>\n            /// Gets the \"Eagle\" emoji. 🦅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eagle</c>\n            /// </remarks>\n            public const string Eagle = \"\\U0001F985\";\n            \n            /// <summary>\n            /// Gets the \"Ear\" emoji. 👂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ear</c>\n            /// </remarks>\n            public const string Ear = \"\\U0001F442\";\n            \n            /// <summary>\n            /// Gets the \"Ear of corn\" emoji. 🌽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ear_of_corn</c>\n            /// </remarks>\n            public const string EarOfCorn = \"\\U0001F33D\";\n            \n            /// <summary>\n            /// Gets the \"Ear with hearing aid\" emoji. 🦻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ear_with_hearing_aid</c>\n            /// </remarks>\n            public const string EarWithHearingAid = \"\\U0001F9BB\";\n            \n            /// <summary>\n            /// Gets the \"Egg\" emoji. 🥚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>egg</c>\n            /// </remarks>\n            public const string Egg = \"\\U0001F95A\";\n            \n            /// <summary>\n            /// Gets the \"Eggplant\" emoji. 🍆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eggplant</c>\n            /// </remarks>\n            public const string Eggplant = \"\\U0001F346\";\n            \n            /// <summary>\n            /// Gets the \"Eight o’clock\" emoji. 🕗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eight_o_clock</c>\n            /// </remarks>\n            public const string EightOClock = \"\\U0001F557\";\n            \n            /// <summary>\n            /// Gets the \"Eight-pointed star\" emoji. ✴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eight_pointed_star</c>\n            /// </remarks>\n            public const string EightPointedStar = \"\\U00002734\";\n            \n            /// <summary>\n            /// Gets the \"Eight-spoked asterisk\" emoji. ✳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eight_spoked_asterisk</c>\n            /// </remarks>\n            public const string EightSpokedAsterisk = \"\\U00002733\";\n            \n            /// <summary>\n            /// Gets the \"Eight-thirty\" emoji. 🕣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eight_thirty</c>\n            /// </remarks>\n            public const string EightThirty = \"\\U0001F563\";\n            \n            /// <summary>\n            /// Gets the \"Eject button\" emoji. ⏏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eject_button</c>\n            /// </remarks>\n            public const string EjectButton = \"\\U000023CF\";\n            \n            /// <summary>\n            /// Gets the \"Electric plug\" emoji. 🔌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>electric_plug</c>\n            /// </remarks>\n            public const string ElectricPlug = \"\\U0001F50C\";\n            \n            /// <summary>\n            /// Gets the \"Elephant\" emoji. 🐘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>elephant</c>\n            /// </remarks>\n            public const string Elephant = \"\\U0001F418\";\n            \n            /// <summary>\n            /// Gets the \"Elevator\" emoji. 🛗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>elevator</c>\n            /// </remarks>\n            public const string Elevator = \"\\U0001F6D7\";\n            \n            /// <summary>\n            /// Gets the \"Eleven o’clock\" emoji. 🕚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eleven_o_clock</c>\n            /// </remarks>\n            public const string ElevenOClock = \"\\U0001F55A\";\n            \n            /// <summary>\n            /// Gets the \"Eleven-thirty\" emoji. 🕦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eleven_thirty</c>\n            /// </remarks>\n            public const string ElevenThirty = \"\\U0001F566\";\n            \n            /// <summary>\n            /// Gets the \"Elf\" emoji. 🧝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>elf</c>\n            /// </remarks>\n            public const string Elf = \"\\U0001F9DD\";\n            \n            /// <summary>\n            /// Gets the \"E-mail\" emoji. 📧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>e_mail</c>\n            /// </remarks>\n            public const string EMail = \"\\U0001F4E7\";\n            \n            /// <summary>\n            /// Gets the \"Empty nest\" emoji. 🪹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>empty_nest</c>\n            /// </remarks>\n            public const string EmptyNest = \"\\U0001FAB9\";\n            \n            /// <summary>\n            /// Gets the \"END arrow\" emoji. 🔚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>end_arrow</c>\n            /// </remarks>\n            public const string EndArrow = \"\\U0001F51A\";\n            \n            /// <summary>\n            /// Gets the \"Enraged face\" emoji. 😡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>enraged_face</c>\n            /// </remarks>\n            public const string EnragedFace = \"\\U0001F621\";\n            \n            /// <summary>\n            /// Gets the \"Envelope\" emoji. ✉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>envelope</c>\n            /// </remarks>\n            public const string Envelope = \"\\U00002709\";\n            \n            /// <summary>\n            /// Gets the \"Envelope with arrow\" emoji. 📩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>envelope_with_arrow</c>\n            /// </remarks>\n            public const string EnvelopeWithArrow = \"\\U0001F4E9\";\n            \n            /// <summary>\n            /// Gets the \"Euro banknote\" emoji. 💶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>euro_banknote</c>\n            /// </remarks>\n            public const string EuroBanknote = \"\\U0001F4B6\";\n            \n            /// <summary>\n            /// Gets the \"Evergreen tree\" emoji. 🌲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>evergreen_tree</c>\n            /// </remarks>\n            public const string EvergreenTree = \"\\U0001F332\";\n            \n            /// <summary>\n            /// Gets the \"Ewe\" emoji. 🐑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ewe</c>\n            /// </remarks>\n            public const string Ewe = \"\\U0001F411\";\n            \n            /// <summary>\n            /// Gets the \"Exclamation question mark\" emoji. ⁉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>exclamation_question_mark</c>\n            /// </remarks>\n            public const string ExclamationQuestionMark = \"\\U00002049\";\n            \n            /// <summary>\n            /// Gets the \"Exploding head\" emoji. 🤯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>exploding_head</c>\n            /// </remarks>\n            public const string ExplodingHead = \"\\U0001F92F\";\n            \n            /// <summary>\n            /// Gets the \"Expressionless face\" emoji. 😑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>expressionless_face</c>\n            /// </remarks>\n            public const string ExpressionlessFace = \"\\U0001F611\";\n            \n            /// <summary>\n            /// Gets the \"Eye\" emoji. 👁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eye</c>\n            /// </remarks>\n            public const string Eye = \"\\U0001F441\";\n            \n            /// <summary>\n            /// Gets the \"Eyes\" emoji. 👀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>eyes</c>\n            /// </remarks>\n            public const string Eyes = \"\\U0001F440\";\n            \n            /// <summary>\n            /// Gets the \"Face blowing a kiss\" emoji. 😘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_blowing_a_kiss</c>\n            /// </remarks>\n            public const string FaceBlowingAKiss = \"\\U0001F618\";\n            \n            /// <summary>\n            /// Gets the \"Face holding back tears\" emoji. 🥹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_holding_back_tears</c>\n            /// </remarks>\n            public const string FaceHoldingBackTears = \"\\U0001F979\";\n            \n            /// <summary>\n            /// Gets the \"Face savoring food\" emoji. 😋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_savoring_food</c>\n            /// </remarks>\n            public const string FaceSavoringFood = \"\\U0001F60B\";\n            \n            /// <summary>\n            /// Gets the \"Face screaming in fear\" emoji. 😱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_screaming_in_fear</c>\n            /// </remarks>\n            public const string FaceScreamingInFear = \"\\U0001F631\";\n            \n            /// <summary>\n            /// Gets the \"Face vomiting\" emoji. 🤮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_vomiting</c>\n            /// </remarks>\n            public const string FaceVomiting = \"\\U0001F92E\";\n            \n            /// <summary>\n            /// Gets the \"Face with bags under eyes\" emoji. 🫩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_bags_under_eyes</c>\n            /// </remarks>\n            public const string FaceWithBagsUnderEyes = \"\\U0001FAE9\";\n            \n            /// <summary>\n            /// Gets the \"Face with crossed-out eyes\" emoji. 😵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_crossed_out_eyes</c>\n            /// </remarks>\n            public const string FaceWithCrossedOutEyes = \"\\U0001F635\";\n            \n            /// <summary>\n            /// Gets the \"Face with diagonal mouth\" emoji. 🫤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_diagonal_mouth</c>\n            /// </remarks>\n            public const string FaceWithDiagonalMouth = \"\\U0001FAE4\";\n            \n            /// <summary>\n            /// Gets the \"Face with hand over mouth\" emoji. 🤭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_hand_over_mouth</c>\n            /// </remarks>\n            public const string FaceWithHandOverMouth = \"\\U0001F92D\";\n            \n            /// <summary>\n            /// Gets the \"Face with head-bandage\" emoji. 🤕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_head_bandage</c>\n            /// </remarks>\n            public const string FaceWithHeadBandage = \"\\U0001F915\";\n            \n            /// <summary>\n            /// Gets the \"Face with medical mask\" emoji. 😷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_medical_mask</c>\n            /// </remarks>\n            public const string FaceWithMedicalMask = \"\\U0001F637\";\n            \n            /// <summary>\n            /// Gets the \"Face with monocle\" emoji. 🧐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_monocle</c>\n            /// </remarks>\n            public const string FaceWithMonocle = \"\\U0001F9D0\";\n            \n            /// <summary>\n            /// Gets the \"Face with open eyes and hand over mouth\" emoji. 🫢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_open_eyes_and_hand_over_mouth</c>\n            /// </remarks>\n            public const string FaceWithOpenEyesAndHandOverMouth = \"\\U0001FAE2\";\n            \n            /// <summary>\n            /// Gets the \"Face with open mouth\" emoji. 😮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_open_mouth</c>\n            /// </remarks>\n            public const string FaceWithOpenMouth = \"\\U0001F62E\";\n            \n            /// <summary>\n            /// Gets the \"Face without mouth\" emoji. 😶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_without_mouth</c>\n            /// </remarks>\n            public const string FaceWithoutMouth = \"\\U0001F636\";\n            \n            /// <summary>\n            /// Gets the \"Face with peeking eye\" emoji. 🫣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_peeking_eye</c>\n            /// </remarks>\n            public const string FaceWithPeekingEye = \"\\U0001FAE3\";\n            \n            /// <summary>\n            /// Gets the \"Face with raised eyebrow\" emoji. 🤨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_raised_eyebrow</c>\n            /// </remarks>\n            public const string FaceWithRaisedEyebrow = \"\\U0001F928\";\n            \n            /// <summary>\n            /// Gets the \"Face with rolling eyes\" emoji. 🙄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_rolling_eyes</c>\n            /// </remarks>\n            public const string FaceWithRollingEyes = \"\\U0001F644\";\n            \n            /// <summary>\n            /// Gets the \"Face with steam from nose\" emoji. 😤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_steam_from_nose</c>\n            /// </remarks>\n            public const string FaceWithSteamFromNose = \"\\U0001F624\";\n            \n            /// <summary>\n            /// Gets the \"Face with symbols on mouth\" emoji. 🤬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_symbols_on_mouth</c>\n            /// </remarks>\n            public const string FaceWithSymbolsOnMouth = \"\\U0001F92C\";\n            \n            /// <summary>\n            /// Gets the \"Face with tears of joy\" emoji. 😂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_tears_of_joy</c>\n            /// </remarks>\n            public const string FaceWithTearsOfJoy = \"\\U0001F602\";\n            \n            /// <summary>\n            /// Gets the \"Face with thermometer\" emoji. 🤒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_thermometer</c>\n            /// </remarks>\n            public const string FaceWithThermometer = \"\\U0001F912\";\n            \n            /// <summary>\n            /// Gets the \"Face with tongue\" emoji. 😛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>face_with_tongue</c>\n            /// </remarks>\n            public const string FaceWithTongue = \"\\U0001F61B\";\n            \n            /// <summary>\n            /// Gets the \"Factory\" emoji. 🏭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>factory</c>\n            /// </remarks>\n            public const string Factory = \"\\U0001F3ED\";\n            \n            /// <summary>\n            /// Gets the \"Fairy\" emoji. 🧚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fairy</c>\n            /// </remarks>\n            public const string Fairy = \"\\U0001F9DA\";\n            \n            /// <summary>\n            /// Gets the \"Falafel\" emoji. 🧆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>falafel</c>\n            /// </remarks>\n            public const string Falafel = \"\\U0001F9C6\";\n            \n            /// <summary>\n            /// Gets the \"Fallen leaf\" emoji. 🍂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fallen_leaf</c>\n            /// </remarks>\n            public const string FallenLeaf = \"\\U0001F342\";\n            \n            /// <summary>\n            /// Gets the \"Family\" emoji. 👪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>family</c>\n            /// </remarks>\n            public const string Family = \"\\U0001F46A\";\n            \n            /// <summary>\n            /// Gets the \"Fast down button\" emoji. ⏬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fast_down_button</c>\n            /// </remarks>\n            public const string FastDownButton = \"\\U000023EC\";\n            \n            /// <summary>\n            /// Gets the \"Fast-forward button\" emoji. ⏩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fast_forward_button</c>\n            /// </remarks>\n            public const string FastForwardButton = \"\\U000023E9\";\n            \n            /// <summary>\n            /// Gets the \"Fast reverse button\" emoji. ⏪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fast_reverse_button</c>\n            /// </remarks>\n            public const string FastReverseButton = \"\\U000023EA\";\n            \n            /// <summary>\n            /// Gets the \"Fast up button\" emoji. ⏫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fast_up_button</c>\n            /// </remarks>\n            public const string FastUpButton = \"\\U000023EB\";\n            \n            /// <summary>\n            /// Gets the \"Fax machine\" emoji. 📠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fax_machine</c>\n            /// </remarks>\n            public const string FaxMachine = \"\\U0001F4E0\";\n            \n            /// <summary>\n            /// Gets the \"Fearful face\" emoji. 😨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fearful_face</c>\n            /// </remarks>\n            public const string FearfulFace = \"\\U0001F628\";\n            \n            /// <summary>\n            /// Gets the \"Feather\" emoji. 🪶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>feather</c>\n            /// </remarks>\n            public const string Feather = \"\\U0001FAB6\";\n            \n            /// <summary>\n            /// Gets the \"Female sign\" emoji. ♀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>female_sign</c>\n            /// </remarks>\n            public const string FemaleSign = \"\\U00002640\";\n            \n            /// <summary>\n            /// Gets the \"Ferris wheel\" emoji. 🎡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ferris_wheel</c>\n            /// </remarks>\n            public const string FerrisWheel = \"\\U0001F3A1\";\n            \n            /// <summary>\n            /// Gets the \"Ferry\" emoji. ⛴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ferry</c>\n            /// </remarks>\n            public const string Ferry = \"\\U000026F4\";\n            \n            /// <summary>\n            /// Gets the \"Field hockey\" emoji. 🏑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>field_hockey</c>\n            /// </remarks>\n            public const string FieldHockey = \"\\U0001F3D1\";\n            \n            /// <summary>\n            /// Gets the \"Fight cloud\" emoji. 🫯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fight_cloud</c>\n            /// </remarks>\n            public const string FightCloud = \"\\U0001FAEF\";\n            \n            /// <summary>\n            /// Gets the \"File cabinet\" emoji. 🗄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>file_cabinet</c>\n            /// </remarks>\n            public const string FileCabinet = \"\\U0001F5C4\";\n            \n            /// <summary>\n            /// Gets the \"File folder\" emoji. 📁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>file_folder</c>\n            /// </remarks>\n            public const string FileFolder = \"\\U0001F4C1\";\n            \n            /// <summary>\n            /// Gets the \"Film frames\" emoji. 🎞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>film_frames</c>\n            /// </remarks>\n            public const string FilmFrames = \"\\U0001F39E\";\n            \n            /// <summary>\n            /// Gets the \"Film projector\" emoji. 📽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>film_projector</c>\n            /// </remarks>\n            public const string FilmProjector = \"\\U0001F4FD\";\n            \n            /// <summary>\n            /// Gets the \"Fingerprint\" emoji. 🫆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fingerprint</c>\n            /// </remarks>\n            public const string Fingerprint = \"\\U0001FAC6\";\n            \n            /// <summary>\n            /// Gets the \"Fire\" emoji. 🔥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fire</c>\n            /// </remarks>\n            public const string Fire = \"\\U0001F525\";\n            \n            /// <summary>\n            /// Gets the \"Firecracker\" emoji. 🧨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>firecracker</c>\n            /// </remarks>\n            public const string Firecracker = \"\\U0001F9E8\";\n            \n            /// <summary>\n            /// Gets the \"Fire engine\" emoji. 🚒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fire_engine</c>\n            /// </remarks>\n            public const string FireEngine = \"\\U0001F692\";\n            \n            /// <summary>\n            /// Gets the \"Fire extinguisher\" emoji. 🧯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fire_extinguisher</c>\n            /// </remarks>\n            public const string FireExtinguisher = \"\\U0001F9EF\";\n            \n            /// <summary>\n            /// Gets the \"Fireworks\" emoji. 🎆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fireworks</c>\n            /// </remarks>\n            public const string Fireworks = \"\\U0001F386\";\n            \n            /// <summary>\n            /// Gets the \"1st place medal\" emoji. 🥇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>1st_place_medal</c>\n            /// </remarks>\n            public const string FirstPlaceMedal = \"\\U0001F947\";\n            \n            /// <summary>\n            /// Gets the \"First quarter moon\" emoji. 🌓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>first_quarter_moon</c>\n            /// </remarks>\n            public const string FirstQuarterMoon = \"\\U0001F313\";\n            \n            /// <summary>\n            /// Gets the \"First quarter moon face\" emoji. 🌛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>first_quarter_moon_face</c>\n            /// </remarks>\n            public const string FirstQuarterMoonFace = \"\\U0001F31B\";\n            \n            /// <summary>\n            /// Gets the \"Fish\" emoji. 🐟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fish</c>\n            /// </remarks>\n            public const string Fish = \"\\U0001F41F\";\n            \n            /// <summary>\n            /// Gets the \"Fish cake with swirl\" emoji. 🍥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fish_cake_with_swirl</c>\n            /// </remarks>\n            public const string FishCakeWithSwirl = \"\\U0001F365\";\n            \n            /// <summary>\n            /// Gets the \"Fishing pole\" emoji. 🎣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fishing_pole</c>\n            /// </remarks>\n            public const string FishingPole = \"\\U0001F3A3\";\n            \n            /// <summary>\n            /// Gets the \"Five o’clock\" emoji. 🕔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>five_o_clock</c>\n            /// </remarks>\n            public const string FiveOClock = \"\\U0001F554\";\n            \n            /// <summary>\n            /// Gets the \"Five-thirty\" emoji. 🕠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>five_thirty</c>\n            /// </remarks>\n            public const string FiveThirty = \"\\U0001F560\";\n            \n            /// <summary>\n            /// Gets the \"Flag in hole\" emoji. ⛳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flag_in_hole</c>\n            /// </remarks>\n            public const string FlagInHole = \"\\U000026F3\";\n            \n            /// <summary>\n            /// Gets the \"Flamingo\" emoji. 🦩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flamingo</c>\n            /// </remarks>\n            public const string Flamingo = \"\\U0001F9A9\";\n            \n            /// <summary>\n            /// Gets the \"Flashlight\" emoji. 🔦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flashlight</c>\n            /// </remarks>\n            public const string Flashlight = \"\\U0001F526\";\n            \n            /// <summary>\n            /// Gets the \"Flatbread\" emoji. 🫓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flatbread</c>\n            /// </remarks>\n            public const string Flatbread = \"\\U0001FAD3\";\n            \n            /// <summary>\n            /// Gets the \"Flat shoe\" emoji. 🥿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flat_shoe</c>\n            /// </remarks>\n            public const string FlatShoe = \"\\U0001F97F\";\n            \n            /// <summary>\n            /// Gets the \"Fleur-de-lis\" emoji. ⚜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fleur_de_lis</c>\n            /// </remarks>\n            public const string FleurDeLis = \"\\U0000269C\";\n            \n            /// <summary>\n            /// Gets the \"Flexed biceps\" emoji. 💪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flexed_biceps</c>\n            /// </remarks>\n            public const string FlexedBiceps = \"\\U0001F4AA\";\n            \n            /// <summary>\n            /// Gets the \"Floppy disk\" emoji. 💾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>floppy_disk</c>\n            /// </remarks>\n            public const string FloppyDisk = \"\\U0001F4BE\";\n            \n            /// <summary>\n            /// Gets the \"Flower playing cards\" emoji. 🎴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flower_playing_cards</c>\n            /// </remarks>\n            public const string FlowerPlayingCards = \"\\U0001F3B4\";\n            \n            /// <summary>\n            /// Gets the \"Flushed face\" emoji. 😳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flushed_face</c>\n            /// </remarks>\n            public const string FlushedFace = \"\\U0001F633\";\n            \n            /// <summary>\n            /// Gets the \"Flute\" emoji. 🪈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flute</c>\n            /// </remarks>\n            public const string Flute = \"\\U0001FA88\";\n            \n            /// <summary>\n            /// Gets the \"Fly\" emoji. 🪰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fly</c>\n            /// </remarks>\n            public const string Fly = \"\\U0001FAB0\";\n            \n            /// <summary>\n            /// Gets the \"Flying disc\" emoji. 🥏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flying_disc</c>\n            /// </remarks>\n            public const string FlyingDisc = \"\\U0001F94F\";\n            \n            /// <summary>\n            /// Gets the \"Flying saucer\" emoji. 🛸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>flying_saucer</c>\n            /// </remarks>\n            public const string FlyingSaucer = \"\\U0001F6F8\";\n            \n            /// <summary>\n            /// Gets the \"Fog\" emoji. 🌫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fog</c>\n            /// </remarks>\n            public const string Fog = \"\\U0001F32B\";\n            \n            /// <summary>\n            /// Gets the \"Foggy\" emoji. 🌁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>foggy</c>\n            /// </remarks>\n            public const string Foggy = \"\\U0001F301\";\n            \n            /// <summary>\n            /// Gets the \"Folded hands\" emoji. 🙏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>folded_hands</c>\n            /// </remarks>\n            public const string FoldedHands = \"\\U0001F64F\";\n            \n            /// <summary>\n            /// Gets the \"Folding hand fan\" emoji. 🪭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>folding_hand_fan</c>\n            /// </remarks>\n            public const string FoldingHandFan = \"\\U0001FAAD\";\n            \n            /// <summary>\n            /// Gets the \"Fondue\" emoji. 🫕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fondue</c>\n            /// </remarks>\n            public const string Fondue = \"\\U0001FAD5\";\n            \n            /// <summary>\n            /// Gets the \"Foot\" emoji. 🦶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>foot</c>\n            /// </remarks>\n            public const string Foot = \"\\U0001F9B6\";\n            \n            /// <summary>\n            /// Gets the \"Footprints\" emoji. 👣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>footprints</c>\n            /// </remarks>\n            public const string Footprints = \"\\U0001F463\";\n            \n            /// <summary>\n            /// Gets the \"Fork and knife\" emoji. 🍴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fork_and_knife</c>\n            /// </remarks>\n            public const string ForkAndKnife = \"\\U0001F374\";\n            \n            /// <summary>\n            /// Gets the \"Fork and knife with plate\" emoji. 🍽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fork_and_knife_with_plate</c>\n            /// </remarks>\n            public const string ForkAndKnifeWithPlate = \"\\U0001F37D\";\n            \n            /// <summary>\n            /// Gets the \"Fortune cookie\" emoji. 🥠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fortune_cookie</c>\n            /// </remarks>\n            public const string FortuneCookie = \"\\U0001F960\";\n            \n            /// <summary>\n            /// Gets the \"Fountain\" emoji. ⛲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fountain</c>\n            /// </remarks>\n            public const string Fountain = \"\\U000026F2\";\n            \n            /// <summary>\n            /// Gets the \"Fountain pen\" emoji. 🖋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fountain_pen</c>\n            /// </remarks>\n            public const string FountainPen = \"\\U0001F58B\";\n            \n            /// <summary>\n            /// Gets the \"Four leaf clover\" emoji. 🍀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>four_leaf_clover</c>\n            /// </remarks>\n            public const string FourLeafClover = \"\\U0001F340\";\n            \n            /// <summary>\n            /// Gets the \"Four o’clock\" emoji. 🕓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>four_o_clock</c>\n            /// </remarks>\n            public const string FourOClock = \"\\U0001F553\";\n            \n            /// <summary>\n            /// Gets the \"Four-thirty\" emoji. 🕟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>four_thirty</c>\n            /// </remarks>\n            public const string FourThirty = \"\\U0001F55F\";\n            \n            /// <summary>\n            /// Gets the \"Fox\" emoji. 🦊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fox</c>\n            /// </remarks>\n            public const string Fox = \"\\U0001F98A\";\n            \n            /// <summary>\n            /// Gets the \"Framed picture\" emoji. 🖼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>framed_picture</c>\n            /// </remarks>\n            public const string FramedPicture = \"\\U0001F5BC\";\n            \n            /// <summary>\n            /// Gets the \"FREE button\" emoji. 🆓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>free_button</c>\n            /// </remarks>\n            public const string FreeButton = \"\\U0001F193\";\n            \n            /// <summary>\n            /// Gets the \"French fries\" emoji. 🍟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>french_fries</c>\n            /// </remarks>\n            public const string FrenchFries = \"\\U0001F35F\";\n            \n            /// <summary>\n            /// Gets the \"Fried shrimp\" emoji. 🍤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fried_shrimp</c>\n            /// </remarks>\n            public const string FriedShrimp = \"\\U0001F364\";\n            \n            /// <summary>\n            /// Gets the \"Frog\" emoji. 🐸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>frog</c>\n            /// </remarks>\n            public const string Frog = \"\\U0001F438\";\n            \n            /// <summary>\n            /// Gets the \"Front-facing baby chick\" emoji. 🐥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>front_facing_baby_chick</c>\n            /// </remarks>\n            public const string FrontFacingBabyChick = \"\\U0001F425\";\n            \n            /// <summary>\n            /// Gets the \"Frowning face\" emoji. ☹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>frowning_face</c>\n            /// </remarks>\n            public const string FrowningFace = \"\\U00002639\";\n            \n            /// <summary>\n            /// Gets the \"Frowning face with open mouth\" emoji. 😦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>frowning_face_with_open_mouth</c>\n            /// </remarks>\n            public const string FrowningFaceWithOpenMouth = \"\\U0001F626\";\n            \n            /// <summary>\n            /// Gets the \"Fuel pump\" emoji. ⛽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>fuel_pump</c>\n            /// </remarks>\n            public const string FuelPump = \"\\U000026FD\";\n            \n            /// <summary>\n            /// Gets the \"Full moon\" emoji. 🌕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>full_moon</c>\n            /// </remarks>\n            public const string FullMoon = \"\\U0001F315\";\n            \n            /// <summary>\n            /// Gets the \"Full moon face\" emoji. 🌝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>full_moon_face</c>\n            /// </remarks>\n            public const string FullMoonFace = \"\\U0001F31D\";\n            \n            /// <summary>\n            /// Gets the \"Funeral urn\" emoji. ⚱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>funeral_urn</c>\n            /// </remarks>\n            public const string FuneralUrn = \"\\U000026B1\";\n            \n            /// <summary>\n            /// Gets the \"Game die\" emoji. 🎲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>game_die</c>\n            /// </remarks>\n            public const string GameDie = \"\\U0001F3B2\";\n            \n            /// <summary>\n            /// Gets the \"Garlic\" emoji. 🧄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>garlic</c>\n            /// </remarks>\n            public const string Garlic = \"\\U0001F9C4\";\n            \n            /// <summary>\n            /// Gets the \"Gear\" emoji. ⚙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>gear</c>\n            /// </remarks>\n            public const string Gear = \"\\U00002699\";\n            \n            /// <summary>\n            /// Gets the \"Gemini\" emoji. ♊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>gemini</c>\n            /// </remarks>\n            public const string Gemini = \"\\U0000264A\";\n            \n            /// <summary>\n            /// Gets the \"Gem stone\" emoji. 💎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>gem_stone</c>\n            /// </remarks>\n            public const string GemStone = \"\\U0001F48E\";\n            \n            /// <summary>\n            /// Gets the \"Genie\" emoji. 🧞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>genie</c>\n            /// </remarks>\n            public const string Genie = \"\\U0001F9DE\";\n            \n            /// <summary>\n            /// Gets the \"Ghost\" emoji. 👻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ghost</c>\n            /// </remarks>\n            public const string Ghost = \"\\U0001F47B\";\n            \n            /// <summary>\n            /// Gets the \"Ginger root\" emoji. 🫚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ginger_root</c>\n            /// </remarks>\n            public const string GingerRoot = \"\\U0001FADA\";\n            \n            /// <summary>\n            /// Gets the \"Giraffe\" emoji. 🦒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>giraffe</c>\n            /// </remarks>\n            public const string Giraffe = \"\\U0001F992\";\n            \n            /// <summary>\n            /// Gets the \"Girl\" emoji. 👧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>girl</c>\n            /// </remarks>\n            public const string Girl = \"\\U0001F467\";\n            \n            /// <summary>\n            /// Gets the \"Glasses\" emoji. 👓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>glasses</c>\n            /// </remarks>\n            public const string Glasses = \"\\U0001F453\";\n            \n            /// <summary>\n            /// Gets the \"Glass of milk\" emoji. 🥛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>glass_of_milk</c>\n            /// </remarks>\n            public const string GlassOfMilk = \"\\U0001F95B\";\n            \n            /// <summary>\n            /// Gets the \"Globe showing Americas\" emoji. 🌎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>globe_showing_americas</c>\n            /// </remarks>\n            public const string GlobeShowingAmericas = \"\\U0001F30E\";\n            \n            /// <summary>\n            /// Gets the \"Globe showing Asia-Australia\" emoji. 🌏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>globe_showing_asia_australia</c>\n            /// </remarks>\n            public const string GlobeShowingAsiaAustralia = \"\\U0001F30F\";\n            \n            /// <summary>\n            /// Gets the \"Globe showing Europe-Africa\" emoji. 🌍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>globe_showing_europe_africa</c>\n            /// </remarks>\n            public const string GlobeShowingEuropeAfrica = \"\\U0001F30D\";\n            \n            /// <summary>\n            /// Gets the \"Globe with meridians\" emoji. 🌐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>globe_with_meridians</c>\n            /// </remarks>\n            public const string GlobeWithMeridians = \"\\U0001F310\";\n            \n            /// <summary>\n            /// Gets the \"Gloves\" emoji. 🧤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>gloves</c>\n            /// </remarks>\n            public const string Gloves = \"\\U0001F9E4\";\n            \n            /// <summary>\n            /// Gets the \"Glowing star\" emoji. 🌟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>glowing_star</c>\n            /// </remarks>\n            public const string GlowingStar = \"\\U0001F31F\";\n            \n            /// <summary>\n            /// Gets the \"Goal net\" emoji. 🥅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>goal_net</c>\n            /// </remarks>\n            public const string GoalNet = \"\\U0001F945\";\n            \n            /// <summary>\n            /// Gets the \"Goat\" emoji. 🐐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>goat</c>\n            /// </remarks>\n            public const string Goat = \"\\U0001F410\";\n            \n            /// <summary>\n            /// Gets the \"Goblin\" emoji. 👺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>goblin</c>\n            /// </remarks>\n            public const string Goblin = \"\\U0001F47A\";\n            \n            /// <summary>\n            /// Gets the \"Goggles\" emoji. 🥽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>goggles</c>\n            /// </remarks>\n            public const string Goggles = \"\\U0001F97D\";\n            \n            /// <summary>\n            /// Gets the \"Goose\" emoji. 🪿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>goose</c>\n            /// </remarks>\n            public const string Goose = \"\\U0001FABF\";\n            \n            /// <summary>\n            /// Gets the \"Gorilla\" emoji. 🦍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>gorilla</c>\n            /// </remarks>\n            public const string Gorilla = \"\\U0001F98D\";\n            \n            /// <summary>\n            /// Gets the \"Graduation cap\" emoji. 🎓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>graduation_cap</c>\n            /// </remarks>\n            public const string GraduationCap = \"\\U0001F393\";\n            \n            /// <summary>\n            /// Gets the \"Grapes\" emoji. 🍇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grapes</c>\n            /// </remarks>\n            public const string Grapes = \"\\U0001F347\";\n            \n            /// <summary>\n            /// Gets the \"Green apple\" emoji. 🍏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_apple</c>\n            /// </remarks>\n            public const string GreenApple = \"\\U0001F34F\";\n            \n            /// <summary>\n            /// Gets the \"Green book\" emoji. 📗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_book</c>\n            /// </remarks>\n            public const string GreenBook = \"\\U0001F4D7\";\n            \n            /// <summary>\n            /// Gets the \"Green circle\" emoji. 🟢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_circle</c>\n            /// </remarks>\n            public const string GreenCircle = \"\\U0001F7E2\";\n            \n            /// <summary>\n            /// Gets the \"Green heart\" emoji. 💚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_heart</c>\n            /// </remarks>\n            public const string GreenHeart = \"\\U0001F49A\";\n            \n            /// <summary>\n            /// Gets the \"Green salad\" emoji. 🥗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_salad</c>\n            /// </remarks>\n            public const string GreenSalad = \"\\U0001F957\";\n            \n            /// <summary>\n            /// Gets the \"Green square\" emoji. 🟩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>green_square</c>\n            /// </remarks>\n            public const string GreenSquare = \"\\U0001F7E9\";\n            \n            /// <summary>\n            /// Gets the \"Grey heart\" emoji. 🩶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grey_heart</c>\n            /// </remarks>\n            public const string GreyHeart = \"\\U0001FA76\";\n            \n            /// <summary>\n            /// Gets the \"Grimacing face\" emoji. 😬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grimacing_face</c>\n            /// </remarks>\n            public const string GrimacingFace = \"\\U0001F62C\";\n            \n            /// <summary>\n            /// Gets the \"Grinning cat\" emoji. 😺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_cat</c>\n            /// </remarks>\n            public const string GrinningCat = \"\\U0001F63A\";\n            \n            /// <summary>\n            /// Gets the \"Grinning cat with smiling eyes\" emoji. 😸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_cat_with_smiling_eyes</c>\n            /// </remarks>\n            public const string GrinningCatWithSmilingEyes = \"\\U0001F638\";\n            \n            /// <summary>\n            /// Gets the \"Grinning face\" emoji. 😀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_face</c>\n            /// </remarks>\n            public const string GrinningFace = \"\\U0001F600\";\n            \n            /// <summary>\n            /// Gets the \"Grinning face with big eyes\" emoji. 😃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_face_with_big_eyes</c>\n            /// </remarks>\n            public const string GrinningFaceWithBigEyes = \"\\U0001F603\";\n            \n            /// <summary>\n            /// Gets the \"Grinning face with smiling eyes\" emoji. 😄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_face_with_smiling_eyes</c>\n            /// </remarks>\n            public const string GrinningFaceWithSmilingEyes = \"\\U0001F604\";\n            \n            /// <summary>\n            /// Gets the \"Grinning face with sweat\" emoji. 😅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_face_with_sweat</c>\n            /// </remarks>\n            public const string GrinningFaceWithSweat = \"\\U0001F605\";\n            \n            /// <summary>\n            /// Gets the \"Grinning squinting face\" emoji. 😆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>grinning_squinting_face</c>\n            /// </remarks>\n            public const string GrinningSquintingFace = \"\\U0001F606\";\n            \n            /// <summary>\n            /// Gets the \"Growing heart\" emoji. 💗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>growing_heart</c>\n            /// </remarks>\n            public const string GrowingHeart = \"\\U0001F497\";\n            \n            /// <summary>\n            /// Gets the \"Guard\" emoji. 💂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>guard</c>\n            /// </remarks>\n            public const string Guard = \"\\U0001F482\";\n            \n            /// <summary>\n            /// Gets the \"Guide dog\" emoji. 🦮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>guide_dog</c>\n            /// </remarks>\n            public const string GuideDog = \"\\U0001F9AE\";\n            \n            /// <summary>\n            /// Gets the \"Guitar\" emoji. 🎸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>guitar</c>\n            /// </remarks>\n            public const string Guitar = \"\\U0001F3B8\";\n            \n            /// <summary>\n            /// Gets the \"Hair pick\" emoji. 🪮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hair_pick</c>\n            /// </remarks>\n            public const string HairPick = \"\\U0001FAAE\";\n            \n            /// <summary>\n            /// Gets the \"Hairy creature\" emoji. 🫈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hairy_creature</c>\n            /// </remarks>\n            public const string HairyCreature = \"\\U0001FAC8\";\n            \n            /// <summary>\n            /// Gets the \"Hamburger\" emoji. 🍔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hamburger</c>\n            /// </remarks>\n            public const string Hamburger = \"\\U0001F354\";\n            \n            /// <summary>\n            /// Gets the \"Hammer\" emoji. 🔨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hammer</c>\n            /// </remarks>\n            public const string Hammer = \"\\U0001F528\";\n            \n            /// <summary>\n            /// Gets the \"Hammer and pick\" emoji. ⚒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hammer_and_pick</c>\n            /// </remarks>\n            public const string HammerAndPick = \"\\U00002692\";\n            \n            /// <summary>\n            /// Gets the \"Hammer and wrench\" emoji. 🛠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hammer_and_wrench</c>\n            /// </remarks>\n            public const string HammerAndWrench = \"\\U0001F6E0\";\n            \n            /// <summary>\n            /// Gets the \"Hamsa\" emoji. 🪬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hamsa</c>\n            /// </remarks>\n            public const string Hamsa = \"\\U0001FAAC\";\n            \n            /// <summary>\n            /// Gets the \"Hamster\" emoji. 🐹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hamster</c>\n            /// </remarks>\n            public const string Hamster = \"\\U0001F439\";\n            \n            /// <summary>\n            /// Gets the \"Handbag\" emoji. 👜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>handbag</c>\n            /// </remarks>\n            public const string Handbag = \"\\U0001F45C\";\n            \n            /// <summary>\n            /// Gets the \"Handshake\" emoji. 🤝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>handshake</c>\n            /// </remarks>\n            public const string Handshake = \"\\U0001F91D\";\n            \n            /// <summary>\n            /// Gets the \"Hand with fingers splayed\" emoji. 🖐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hand_with_fingers_splayed</c>\n            /// </remarks>\n            public const string HandWithFingersSplayed = \"\\U0001F590\";\n            \n            /// <summary>\n            /// Gets the \"Hand with index finger and thumb crossed\" emoji. 🫰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hand_with_index_finger_and_thumb_crossed</c>\n            /// </remarks>\n            public const string HandWithIndexFingerAndThumbCrossed = \"\\U0001FAF0\";\n            \n            /// <summary>\n            /// Gets the \"Harp\" emoji. 🪉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>harp</c>\n            /// </remarks>\n            public const string Harp = \"\\U0001FA89\";\n            \n            /// <summary>\n            /// Gets the \"Hatching chick\" emoji. 🐣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hatching_chick</c>\n            /// </remarks>\n            public const string HatchingChick = \"\\U0001F423\";\n            \n            /// <summary>\n            /// Gets the \"Headphone\" emoji. 🎧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>headphone</c>\n            /// </remarks>\n            public const string Headphone = \"\\U0001F3A7\";\n            \n            /// <summary>\n            /// Gets the \"Headstone\" emoji. 🪦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>headstone</c>\n            /// </remarks>\n            public const string Headstone = \"\\U0001FAA6\";\n            \n            /// <summary>\n            /// Gets the \"Hear-no-evil monkey\" emoji. 🙉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hear_no_evil_monkey</c>\n            /// </remarks>\n            public const string HearNoEvilMonkey = \"\\U0001F649\";\n            \n            /// <summary>\n            /// Gets the \"Heart decoration\" emoji. 💟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_decoration</c>\n            /// </remarks>\n            public const string HeartDecoration = \"\\U0001F49F\";\n            \n            /// <summary>\n            /// Gets the \"Heart exclamation\" emoji. ❣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_exclamation</c>\n            /// </remarks>\n            public const string HeartExclamation = \"\\U00002763\";\n            \n            /// <summary>\n            /// Gets the \"Heart hands\" emoji. 🫶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_hands</c>\n            /// </remarks>\n            public const string HeartHands = \"\\U0001FAF6\";\n            \n            /// <summary>\n            /// Gets the \"Heart suit\" emoji. ♥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_suit</c>\n            /// </remarks>\n            public const string HeartSuit = \"\\U00002665\";\n            \n            /// <summary>\n            /// Gets the \"Heart with arrow\" emoji. 💘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_with_arrow</c>\n            /// </remarks>\n            public const string HeartWithArrow = \"\\U0001F498\";\n            \n            /// <summary>\n            /// Gets the \"Heart with ribbon\" emoji. 💝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heart_with_ribbon</c>\n            /// </remarks>\n            public const string HeartWithRibbon = \"\\U0001F49D\";\n            \n            /// <summary>\n            /// Gets the \"Heavy dollar sign\" emoji. 💲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heavy_dollar_sign</c>\n            /// </remarks>\n            public const string HeavyDollarSign = \"\\U0001F4B2\";\n            \n            /// <summary>\n            /// Gets the \"Heavy equals sign\" emoji. 🟰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>heavy_equals_sign</c>\n            /// </remarks>\n            public const string HeavyEqualsSign = \"\\U0001F7F0\";\n            \n            /// <summary>\n            /// Gets the \"Hedgehog\" emoji. 🦔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hedgehog</c>\n            /// </remarks>\n            public const string Hedgehog = \"\\U0001F994\";\n            \n            /// <summary>\n            /// Gets the \"Helicopter\" emoji. 🚁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>helicopter</c>\n            /// </remarks>\n            public const string Helicopter = \"\\U0001F681\";\n            \n            /// <summary>\n            /// Gets the \"Herb\" emoji. 🌿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>herb</c>\n            /// </remarks>\n            public const string Herb = \"\\U0001F33F\";\n            \n            /// <summary>\n            /// Gets the \"Hibiscus\" emoji. 🌺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hibiscus</c>\n            /// </remarks>\n            public const string Hibiscus = \"\\U0001F33A\";\n            \n            /// <summary>\n            /// Gets the \"High-heeled shoe\" emoji. 👠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>high_heeled_shoe</c>\n            /// </remarks>\n            public const string HighHeeledShoe = \"\\U0001F460\";\n            \n            /// <summary>\n            /// Gets the \"High-speed train\" emoji. 🚄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>high_speed_train</c>\n            /// </remarks>\n            public const string HighSpeedTrain = \"\\U0001F684\";\n            \n            /// <summary>\n            /// Gets the \"High voltage\" emoji. ⚡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>high_voltage</c>\n            /// </remarks>\n            public const string HighVoltage = \"\\U000026A1\";\n            \n            /// <summary>\n            /// Gets the \"Hiking boot\" emoji. 🥾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hiking_boot</c>\n            /// </remarks>\n            public const string HikingBoot = \"\\U0001F97E\";\n            \n            /// <summary>\n            /// Gets the \"Hindu temple\" emoji. 🛕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hindu_temple</c>\n            /// </remarks>\n            public const string HinduTemple = \"\\U0001F6D5\";\n            \n            /// <summary>\n            /// Gets the \"Hippopotamus\" emoji. 🦛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hippopotamus</c>\n            /// </remarks>\n            public const string Hippopotamus = \"\\U0001F99B\";\n            \n            /// <summary>\n            /// Gets the \"Hole\" emoji. 🕳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hole</c>\n            /// </remarks>\n            public const string Hole = \"\\U0001F573\";\n            \n            /// <summary>\n            /// Gets the \"Hollow red circle\" emoji. ⭕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hollow_red_circle</c>\n            /// </remarks>\n            public const string HollowRedCircle = \"\\U00002B55\";\n            \n            /// <summary>\n            /// Gets the \"Honeybee\" emoji. 🐝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>honeybee</c>\n            /// </remarks>\n            public const string Honeybee = \"\\U0001F41D\";\n            \n            /// <summary>\n            /// Gets the \"Honey pot\" emoji. 🍯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>honey_pot</c>\n            /// </remarks>\n            public const string HoneyPot = \"\\U0001F36F\";\n            \n            /// <summary>\n            /// Gets the \"Hook\" emoji. 🪝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hook</c>\n            /// </remarks>\n            public const string Hook = \"\\U0001FA9D\";\n            \n            /// <summary>\n            /// Gets the \"Horizontal traffic light\" emoji. 🚥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>horizontal_traffic_light</c>\n            /// </remarks>\n            public const string HorizontalTrafficLight = \"\\U0001F6A5\";\n            \n            /// <summary>\n            /// Gets the \"Horse\" emoji. 🐎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>horse</c>\n            /// </remarks>\n            public const string Horse = \"\\U0001F40E\";\n            \n            /// <summary>\n            /// Gets the \"Horse face\" emoji. 🐴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>horse_face</c>\n            /// </remarks>\n            public const string HorseFace = \"\\U0001F434\";\n            \n            /// <summary>\n            /// Gets the \"Horse racing\" emoji. 🏇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>horse_racing</c>\n            /// </remarks>\n            public const string HorseRacing = \"\\U0001F3C7\";\n            \n            /// <summary>\n            /// Gets the \"Hospital\" emoji. 🏥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hospital</c>\n            /// </remarks>\n            public const string Hospital = \"\\U0001F3E5\";\n            \n            /// <summary>\n            /// Gets the \"Hot beverage\" emoji. ☕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hot_beverage</c>\n            /// </remarks>\n            public const string HotBeverage = \"\\U00002615\";\n            \n            /// <summary>\n            /// Gets the \"Hot dog\" emoji. 🌭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hot_dog</c>\n            /// </remarks>\n            public const string HotDog = \"\\U0001F32D\";\n            \n            /// <summary>\n            /// Gets the \"Hotel\" emoji. 🏨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hotel</c>\n            /// </remarks>\n            public const string Hotel = \"\\U0001F3E8\";\n            \n            /// <summary>\n            /// Gets the \"Hot face\" emoji. 🥵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hot_face</c>\n            /// </remarks>\n            public const string HotFace = \"\\U0001F975\";\n            \n            /// <summary>\n            /// Gets the \"Hot pepper\" emoji. 🌶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hot_pepper</c>\n            /// </remarks>\n            public const string HotPepper = \"\\U0001F336\";\n            \n            /// <summary>\n            /// Gets the \"Hot springs\" emoji. ♨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hot_springs</c>\n            /// </remarks>\n            public const string HotSprings = \"\\U00002668\";\n            \n            /// <summary>\n            /// Gets the \"Hourglass done\" emoji. ⌛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hourglass_done</c>\n            /// </remarks>\n            public const string HourglassDone = \"\\U0000231B\";\n            \n            /// <summary>\n            /// Gets the \"Hourglass not done\" emoji. ⏳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hourglass_not_done</c>\n            /// </remarks>\n            public const string HourglassNotDone = \"\\U000023F3\";\n            \n            /// <summary>\n            /// Gets the \"House\" emoji. 🏠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>house</c>\n            /// </remarks>\n            public const string House = \"\\U0001F3E0\";\n            \n            /// <summary>\n            /// Gets the \"Houses\" emoji. 🏘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>houses</c>\n            /// </remarks>\n            public const string Houses = \"\\U0001F3D8\";\n            \n            /// <summary>\n            /// Gets the \"House with garden\" emoji. 🏡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>house_with_garden</c>\n            /// </remarks>\n            public const string HouseWithGarden = \"\\U0001F3E1\";\n            \n            /// <summary>\n            /// Gets the \"Hundred points\" emoji. 💯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hundred_points</c>\n            /// </remarks>\n            public const string HundredPoints = \"\\U0001F4AF\";\n            \n            /// <summary>\n            /// Gets the \"Hushed face\" emoji. 😯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hushed_face</c>\n            /// </remarks>\n            public const string HushedFace = \"\\U0001F62F\";\n            \n            /// <summary>\n            /// Gets the \"Hut\" emoji. 🛖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hut</c>\n            /// </remarks>\n            public const string Hut = \"\\U0001F6D6\";\n            \n            /// <summary>\n            /// Gets the \"Hyacinth\" emoji. 🪻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hyacinth</c>\n            /// </remarks>\n            public const string Hyacinth = \"\\U0001FABB\";\n            \n            /// <summary>\n            /// Gets the \"Ice\" emoji. 🧊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ice</c>\n            /// </remarks>\n            public const string Ice = \"\\U0001F9CA\";\n            \n            /// <summary>\n            /// Gets the \"Ice cream\" emoji. 🍨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ice_cream</c>\n            /// </remarks>\n            public const string IceCream = \"\\U0001F368\";\n            \n            /// <summary>\n            /// Gets the \"Ice hockey\" emoji. 🏒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ice_hockey</c>\n            /// </remarks>\n            public const string IceHockey = \"\\U0001F3D2\";\n            \n            /// <summary>\n            /// Gets the \"Ice skate\" emoji. ⛸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ice_skate</c>\n            /// </remarks>\n            public const string IceSkate = \"\\U000026F8\";\n            \n            /// <summary>\n            /// Gets the \"ID button\" emoji. 🆔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>id_button</c>\n            /// </remarks>\n            public const string IdButton = \"\\U0001F194\";\n            \n            /// <summary>\n            /// Gets the \"Identification card\" emoji. 🪪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>identification_card</c>\n            /// </remarks>\n            public const string IdentificationCard = \"\\U0001FAAA\";\n            \n            /// <summary>\n            /// Gets the \"Inbox tray\" emoji. 📥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>inbox_tray</c>\n            /// </remarks>\n            public const string InboxTray = \"\\U0001F4E5\";\n            \n            /// <summary>\n            /// Gets the \"Incoming envelope\" emoji. 📨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>incoming_envelope</c>\n            /// </remarks>\n            public const string IncomingEnvelope = \"\\U0001F4E8\";\n            \n            /// <summary>\n            /// Gets the \"Index pointing at the viewer\" emoji. 🫵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>index_pointing_at_the_viewer</c>\n            /// </remarks>\n            public const string IndexPointingAtTheViewer = \"\\U0001FAF5\";\n            \n            /// <summary>\n            /// Gets the \"Index pointing up\" emoji. ☝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>index_pointing_up</c>\n            /// </remarks>\n            public const string IndexPointingUp = \"\\U0000261D\";\n            \n            /// <summary>\n            /// Gets the \"Infinity\" emoji. ♾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>infinity</c>\n            /// </remarks>\n            public const string Infinity = \"\\U0000267E\";\n            \n            /// <summary>\n            /// Gets the \"Information\" emoji. ℹ\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>information</c>\n            /// </remarks>\n            public const string Information = \"\\U00002139\";\n            \n            /// <summary>\n            /// Gets the \"Input latin letters\" emoji. 🔤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>input_latin_letters</c>\n            /// </remarks>\n            public const string InputLatinLetters = \"\\U0001F524\";\n            \n            /// <summary>\n            /// Gets the \"Input latin lowercase\" emoji. 🔡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>input_latin_lowercase</c>\n            /// </remarks>\n            public const string InputLatinLowercase = \"\\U0001F521\";\n            \n            /// <summary>\n            /// Gets the \"Input latin uppercase\" emoji. 🔠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>input_latin_uppercase</c>\n            /// </remarks>\n            public const string InputLatinUppercase = \"\\U0001F520\";\n            \n            /// <summary>\n            /// Gets the \"Input numbers\" emoji. 🔢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>input_numbers</c>\n            /// </remarks>\n            public const string InputNumbers = \"\\U0001F522\";\n            \n            /// <summary>\n            /// Gets the \"Input symbols\" emoji. 🔣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>input_symbols</c>\n            /// </remarks>\n            public const string InputSymbols = \"\\U0001F523\";\n            \n            /// <summary>\n            /// Gets the \"Jack-o-lantern\" emoji. 🎃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>jack_o_lantern</c>\n            /// </remarks>\n            public const string JackOLantern = \"\\U0001F383\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “acceptable” button\" emoji. 🉑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_acceptable_button</c>\n            /// </remarks>\n            public const string JapaneseAcceptableButton = \"\\U0001F251\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “application” button\" emoji. 🈸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_application_button</c>\n            /// </remarks>\n            public const string JapaneseApplicationButton = \"\\U0001F238\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “bargain” button\" emoji. 🉐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_bargain_button</c>\n            /// </remarks>\n            public const string JapaneseBargainButton = \"\\U0001F250\";\n            \n            /// <summary>\n            /// Gets the \"Japanese castle\" emoji. 🏯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_castle</c>\n            /// </remarks>\n            public const string JapaneseCastle = \"\\U0001F3EF\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “congratulations” button\" emoji. ㊗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_congratulations_button</c>\n            /// </remarks>\n            public const string JapaneseCongratulationsButton = \"\\U00003297\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “discount” button\" emoji. 🈹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_discount_button</c>\n            /// </remarks>\n            public const string JapaneseDiscountButton = \"\\U0001F239\";\n            \n            /// <summary>\n            /// Gets the \"Japanese dolls\" emoji. 🎎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_dolls</c>\n            /// </remarks>\n            public const string JapaneseDolls = \"\\U0001F38E\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “free of charge” button\" emoji. 🈚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_free_of_charge_button</c>\n            /// </remarks>\n            public const string JapaneseFreeOfChargeButton = \"\\U0001F21A\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “here” button\" emoji. 🈁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_here_button</c>\n            /// </remarks>\n            public const string JapaneseHereButton = \"\\U0001F201\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “monthly amount” button\" emoji. 🈷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_monthly_amount_button</c>\n            /// </remarks>\n            public const string JapaneseMonthlyAmountButton = \"\\U0001F237\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “not free of charge” button\" emoji. 🈶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_not_free_of_charge_button</c>\n            /// </remarks>\n            public const string JapaneseNotFreeOfChargeButton = \"\\U0001F236\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “no vacancy” button\" emoji. 🈵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_no_vacancy_button</c>\n            /// </remarks>\n            public const string JapaneseNoVacancyButton = \"\\U0001F235\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “open for business” button\" emoji. 🈺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_open_for_business_button</c>\n            /// </remarks>\n            public const string JapaneseOpenForBusinessButton = \"\\U0001F23A\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “passing grade” button\" emoji. 🈴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_passing_grade_button</c>\n            /// </remarks>\n            public const string JapanesePassingGradeButton = \"\\U0001F234\";\n            \n            /// <summary>\n            /// Gets the \"Japanese post office\" emoji. 🏣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_post_office</c>\n            /// </remarks>\n            public const string JapanesePostOffice = \"\\U0001F3E3\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “prohibited” button\" emoji. 🈲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_prohibited_button</c>\n            /// </remarks>\n            public const string JapaneseProhibitedButton = \"\\U0001F232\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “reserved” button\" emoji. 🈯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_reserved_button</c>\n            /// </remarks>\n            public const string JapaneseReservedButton = \"\\U0001F22F\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “secret” button\" emoji. ㊙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_secret_button</c>\n            /// </remarks>\n            public const string JapaneseSecretButton = \"\\U00003299\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “service charge” button\" emoji. 🈂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_service_charge_button</c>\n            /// </remarks>\n            public const string JapaneseServiceChargeButton = \"\\U0001F202\";\n            \n            /// <summary>\n            /// Gets the \"Japanese symbol for beginner\" emoji. 🔰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_symbol_for_beginner</c>\n            /// </remarks>\n            public const string JapaneseSymbolForBeginner = \"\\U0001F530\";\n            \n            /// <summary>\n            /// Gets the \"Japanese “vacancy” button\" emoji. 🈳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>japanese_vacancy_button</c>\n            /// </remarks>\n            public const string JapaneseVacancyButton = \"\\U0001F233\";\n            \n            /// <summary>\n            /// Gets the \"Jar\" emoji. 🫙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>jar</c>\n            /// </remarks>\n            public const string Jar = \"\\U0001FAD9\";\n            \n            /// <summary>\n            /// Gets the \"Jeans\" emoji. 👖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>jeans</c>\n            /// </remarks>\n            public const string Jeans = \"\\U0001F456\";\n            \n            /// <summary>\n            /// Gets the \"Jellyfish\" emoji. 🪼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>jellyfish</c>\n            /// </remarks>\n            public const string Jellyfish = \"\\U0001FABC\";\n            \n            /// <summary>\n            /// Gets the \"Joker\" emoji. 🃏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>joker</c>\n            /// </remarks>\n            public const string Joker = \"\\U0001F0CF\";\n            \n            /// <summary>\n            /// Gets the \"Joystick\" emoji. 🕹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>joystick</c>\n            /// </remarks>\n            public const string Joystick = \"\\U0001F579\";\n            \n            /// <summary>\n            /// Gets the \"Kaaba\" emoji. 🕋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kaaba</c>\n            /// </remarks>\n            public const string Kaaba = \"\\U0001F54B\";\n            \n            /// <summary>\n            /// Gets the \"Kangaroo\" emoji. 🦘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kangaroo</c>\n            /// </remarks>\n            public const string Kangaroo = \"\\U0001F998\";\n            \n            /// <summary>\n            /// Gets the \"Key\" emoji. 🔑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>key</c>\n            /// </remarks>\n            public const string Key = \"\\U0001F511\";\n            \n            /// <summary>\n            /// Gets the \"Keyboard\" emoji. ⌨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>keyboard</c>\n            /// </remarks>\n            public const string Keyboard = \"\\U00002328\";\n            \n            /// <summary>\n            /// Gets the \"Keycap: 10\" emoji. 🔟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>keycap_10</c>\n            /// </remarks>\n            public const string Keycap10 = \"\\U0001F51F\";\n            \n            /// <summary>\n            /// Gets the \"Khanda\" emoji. 🪯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>khanda</c>\n            /// </remarks>\n            public const string Khanda = \"\\U0001FAAF\";\n            \n            /// <summary>\n            /// Gets the \"Kick scooter\" emoji. 🛴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kick_scooter</c>\n            /// </remarks>\n            public const string KickScooter = \"\\U0001F6F4\";\n            \n            /// <summary>\n            /// Gets the \"Kimono\" emoji. 👘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kimono</c>\n            /// </remarks>\n            public const string Kimono = \"\\U0001F458\";\n            \n            /// <summary>\n            /// Gets the \"Kiss\" emoji. 💏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kiss</c>\n            /// </remarks>\n            public const string Kiss = \"\\U0001F48F\";\n            \n            /// <summary>\n            /// Gets the \"Kissing cat\" emoji. 😽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kissing_cat</c>\n            /// </remarks>\n            public const string KissingCat = \"\\U0001F63D\";\n            \n            /// <summary>\n            /// Gets the \"Kissing face\" emoji. 😗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kissing_face</c>\n            /// </remarks>\n            public const string KissingFace = \"\\U0001F617\";\n            \n            /// <summary>\n            /// Gets the \"Kissing face with closed eyes\" emoji. 😚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kissing_face_with_closed_eyes</c>\n            /// </remarks>\n            public const string KissingFaceWithClosedEyes = \"\\U0001F61A\";\n            \n            /// <summary>\n            /// Gets the \"Kissing face with smiling eyes\" emoji. 😙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kissing_face_with_smiling_eyes</c>\n            /// </remarks>\n            public const string KissingFaceWithSmilingEyes = \"\\U0001F619\";\n            \n            /// <summary>\n            /// Gets the \"Kiss mark\" emoji. 💋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kiss_mark</c>\n            /// </remarks>\n            public const string KissMark = \"\\U0001F48B\";\n            \n            /// <summary>\n            /// Gets the \"Kitchen knife\" emoji. 🔪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kitchen_knife</c>\n            /// </remarks>\n            public const string KitchenKnife = \"\\U0001F52A\";\n            \n            /// <summary>\n            /// Gets the \"Kite\" emoji. 🪁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kite</c>\n            /// </remarks>\n            public const string Kite = \"\\U0001FA81\";\n            \n            /// <summary>\n            /// Gets the \"Kiwi fruit\" emoji. 🥝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>kiwi_fruit</c>\n            /// </remarks>\n            public const string KiwiFruit = \"\\U0001F95D\";\n            \n            /// <summary>\n            /// Gets the \"Knot\" emoji. 🪢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>knot</c>\n            /// </remarks>\n            public const string Knot = \"\\U0001FAA2\";\n            \n            /// <summary>\n            /// Gets the \"Koala\" emoji. 🐨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>koala</c>\n            /// </remarks>\n            public const string Koala = \"\\U0001F428\";\n            \n            /// <summary>\n            /// Gets the \"Lab coat\" emoji. 🥼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lab_coat</c>\n            /// </remarks>\n            public const string LabCoat = \"\\U0001F97C\";\n            \n            /// <summary>\n            /// Gets the \"Label\" emoji. 🏷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>label</c>\n            /// </remarks>\n            public const string Label = \"\\U0001F3F7\";\n            \n            /// <summary>\n            /// Gets the \"Lacrosse\" emoji. 🥍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lacrosse</c>\n            /// </remarks>\n            public const string Lacrosse = \"\\U0001F94D\";\n            \n            /// <summary>\n            /// Gets the \"Ladder\" emoji. 🪜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ladder</c>\n            /// </remarks>\n            public const string Ladder = \"\\U0001FA9C\";\n            \n            /// <summary>\n            /// Gets the \"Lady beetle\" emoji. 🐞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lady_beetle</c>\n            /// </remarks>\n            public const string LadyBeetle = \"\\U0001F41E\";\n            \n            /// <summary>\n            /// Gets the \"Landslide\" emoji. 🛘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>landslide</c>\n            /// </remarks>\n            public const string Landslide = \"\\U0001F6D8\";\n            \n            /// <summary>\n            /// Gets the \"Laptop\" emoji. 💻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>laptop</c>\n            /// </remarks>\n            public const string Laptop = \"\\U0001F4BB\";\n            \n            /// <summary>\n            /// Gets the \"Large blue diamond\" emoji. 🔷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>large_blue_diamond</c>\n            /// </remarks>\n            public const string LargeBlueDiamond = \"\\U0001F537\";\n            \n            /// <summary>\n            /// Gets the \"Large orange diamond\" emoji. 🔶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>large_orange_diamond</c>\n            /// </remarks>\n            public const string LargeOrangeDiamond = \"\\U0001F536\";\n            \n            /// <summary>\n            /// Gets the \"Last quarter moon\" emoji. 🌗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>last_quarter_moon</c>\n            /// </remarks>\n            public const string LastQuarterMoon = \"\\U0001F317\";\n            \n            /// <summary>\n            /// Gets the \"Last quarter moon face\" emoji. 🌜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>last_quarter_moon_face</c>\n            /// </remarks>\n            public const string LastQuarterMoonFace = \"\\U0001F31C\";\n            \n            /// <summary>\n            /// Gets the \"Last track button\" emoji. ⏮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>last_track_button</c>\n            /// </remarks>\n            public const string LastTrackButton = \"\\U000023EE\";\n            \n            /// <summary>\n            /// Gets the \"Latin cross\" emoji. ✝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>latin_cross</c>\n            /// </remarks>\n            public const string LatinCross = \"\\U0000271D\";\n            \n            /// <summary>\n            /// Gets the \"Leaf fluttering in wind\" emoji. 🍃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leaf_fluttering_in_wind</c>\n            /// </remarks>\n            public const string LeafFlutteringInWind = \"\\U0001F343\";\n            \n            /// <summary>\n            /// Gets the \"Leafless tree\" emoji. 🪾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leafless_tree</c>\n            /// </remarks>\n            public const string LeaflessTree = \"\\U0001FABE\";\n            \n            /// <summary>\n            /// Gets the \"Leafy green\" emoji. 🥬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leafy_green</c>\n            /// </remarks>\n            public const string LeafyGreen = \"\\U0001F96C\";\n            \n            /// <summary>\n            /// Gets the \"Ledger\" emoji. 📒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ledger</c>\n            /// </remarks>\n            public const string Ledger = \"\\U0001F4D2\";\n            \n            /// <summary>\n            /// Gets the \"Left arrow\" emoji. ⬅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_arrow</c>\n            /// </remarks>\n            public const string LeftArrow = \"\\U00002B05\";\n            \n            /// <summary>\n            /// Gets the \"Left arrow curving right\" emoji. ↪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_arrow_curving_right</c>\n            /// </remarks>\n            public const string LeftArrowCurvingRight = \"\\U000021AA\";\n            \n            /// <summary>\n            /// Gets the \"Left-facing fist\" emoji. 🤛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_facing_fist</c>\n            /// </remarks>\n            public const string LeftFacingFist = \"\\U0001F91B\";\n            \n            /// <summary>\n            /// Gets the \"Left luggage\" emoji. 🛅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_luggage</c>\n            /// </remarks>\n            public const string LeftLuggage = \"\\U0001F6C5\";\n            \n            /// <summary>\n            /// Gets the \"Left-right arrow\" emoji. ↔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_right_arrow</c>\n            /// </remarks>\n            public const string LeftRightArrow = \"\\U00002194\";\n            \n            /// <summary>\n            /// Gets the \"Left speech bubble\" emoji. 🗨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>left_speech_bubble</c>\n            /// </remarks>\n            public const string LeftSpeechBubble = \"\\U0001F5E8\";\n            \n            /// <summary>\n            /// Gets the \"Leftwards hand\" emoji. 🫲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leftwards_hand</c>\n            /// </remarks>\n            public const string LeftwardsHand = \"\\U0001FAF2\";\n            \n            /// <summary>\n            /// Gets the \"Leftwards pushing hand\" emoji. 🫷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leftwards_pushing_hand</c>\n            /// </remarks>\n            public const string LeftwardsPushingHand = \"\\U0001FAF7\";\n            \n            /// <summary>\n            /// Gets the \"Leg\" emoji. 🦵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leg</c>\n            /// </remarks>\n            public const string Leg = \"\\U0001F9B5\";\n            \n            /// <summary>\n            /// Gets the \"Lemon\" emoji. 🍋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lemon</c>\n            /// </remarks>\n            public const string Lemon = \"\\U0001F34B\";\n            \n            /// <summary>\n            /// Gets the \"Leo\" emoji. ♌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leo</c>\n            /// </remarks>\n            public const string Leo = \"\\U0000264C\";\n            \n            /// <summary>\n            /// Gets the \"Leopard\" emoji. 🐆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>leopard</c>\n            /// </remarks>\n            public const string Leopard = \"\\U0001F406\";\n            \n            /// <summary>\n            /// Gets the \"Level slider\" emoji. 🎚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>level_slider</c>\n            /// </remarks>\n            public const string LevelSlider = \"\\U0001F39A\";\n            \n            /// <summary>\n            /// Gets the \"Libra\" emoji. ♎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>libra</c>\n            /// </remarks>\n            public const string Libra = \"\\U0000264E\";\n            \n            /// <summary>\n            /// Gets the \"Light blue heart\" emoji. 🩵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>light_blue_heart</c>\n            /// </remarks>\n            public const string LightBlueHeart = \"\\U0001FA75\";\n            \n            /// <summary>\n            /// Gets the \"Light bulb\" emoji. 💡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>light_bulb</c>\n            /// </remarks>\n            public const string LightBulb = \"\\U0001F4A1\";\n            \n            /// <summary>\n            /// Gets the \"Light rail\" emoji. 🚈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>light_rail</c>\n            /// </remarks>\n            public const string LightRail = \"\\U0001F688\";\n            \n            /// <summary>\n            /// Gets the \"Light skin tone\" emoji. 🏻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>light_skin_tone</c>\n            /// </remarks>\n            public const string LightSkinTone = \"\\U0001F3FB\";\n            \n            /// <summary>\n            /// Gets the \"Link\" emoji. 🔗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>link</c>\n            /// </remarks>\n            public const string Link = \"\\U0001F517\";\n            \n            /// <summary>\n            /// Gets the \"Linked paperclips\" emoji. 🖇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>linked_paperclips</c>\n            /// </remarks>\n            public const string LinkedPaperclips = \"\\U0001F587\";\n            \n            /// <summary>\n            /// Gets the \"Lion\" emoji. 🦁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lion</c>\n            /// </remarks>\n            public const string Lion = \"\\U0001F981\";\n            \n            /// <summary>\n            /// Gets the \"Lipstick\" emoji. 💄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lipstick</c>\n            /// </remarks>\n            public const string Lipstick = \"\\U0001F484\";\n            \n            /// <summary>\n            /// Gets the \"Litter in bin sign\" emoji. 🚮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>litter_in_bin_sign</c>\n            /// </remarks>\n            public const string LitterInBinSign = \"\\U0001F6AE\";\n            \n            /// <summary>\n            /// Gets the \"Lizard\" emoji. 🦎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lizard</c>\n            /// </remarks>\n            public const string Lizard = \"\\U0001F98E\";\n            \n            /// <summary>\n            /// Gets the \"Llama\" emoji. 🦙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>llama</c>\n            /// </remarks>\n            public const string Llama = \"\\U0001F999\";\n            \n            /// <summary>\n            /// Gets the \"Lobster\" emoji. 🦞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lobster</c>\n            /// </remarks>\n            public const string Lobster = \"\\U0001F99E\";\n            \n            /// <summary>\n            /// Gets the \"Locked\" emoji. 🔒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>locked</c>\n            /// </remarks>\n            public const string Locked = \"\\U0001F512\";\n            \n            /// <summary>\n            /// Gets the \"Locked with key\" emoji. 🔐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>locked_with_key</c>\n            /// </remarks>\n            public const string LockedWithKey = \"\\U0001F510\";\n            \n            /// <summary>\n            /// Gets the \"Locked with pen\" emoji. 🔏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>locked_with_pen</c>\n            /// </remarks>\n            public const string LockedWithPen = \"\\U0001F50F\";\n            \n            /// <summary>\n            /// Gets the \"Locomotive\" emoji. 🚂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>locomotive</c>\n            /// </remarks>\n            public const string Locomotive = \"\\U0001F682\";\n            \n            /// <summary>\n            /// Gets the \"Lollipop\" emoji. 🍭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lollipop</c>\n            /// </remarks>\n            public const string Lollipop = \"\\U0001F36D\";\n            \n            /// <summary>\n            /// Gets the \"Long drum\" emoji. 🪘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>long_drum</c>\n            /// </remarks>\n            public const string LongDrum = \"\\U0001FA98\";\n            \n            /// <summary>\n            /// Gets the \"Lotion bottle\" emoji. 🧴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lotion_bottle</c>\n            /// </remarks>\n            public const string LotionBottle = \"\\U0001F9F4\";\n            \n            /// <summary>\n            /// Gets the \"Lotus\" emoji. 🪷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lotus</c>\n            /// </remarks>\n            public const string Lotus = \"\\U0001FAB7\";\n            \n            /// <summary>\n            /// Gets the \"Loudly crying face\" emoji. 😭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>loudly_crying_face</c>\n            /// </remarks>\n            public const string LoudlyCryingFace = \"\\U0001F62D\";\n            \n            /// <summary>\n            /// Gets the \"Loudspeaker\" emoji. 📢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>loudspeaker</c>\n            /// </remarks>\n            public const string Loudspeaker = \"\\U0001F4E2\";\n            \n            /// <summary>\n            /// Gets the \"Love hotel\" emoji. 🏩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>love_hotel</c>\n            /// </remarks>\n            public const string LoveHotel = \"\\U0001F3E9\";\n            \n            /// <summary>\n            /// Gets the \"Love letter\" emoji. 💌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>love_letter</c>\n            /// </remarks>\n            public const string LoveLetter = \"\\U0001F48C\";\n            \n            /// <summary>\n            /// Gets the \"Love-you gesture\" emoji. 🤟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>love_you_gesture</c>\n            /// </remarks>\n            public const string LoveYouGesture = \"\\U0001F91F\";\n            \n            /// <summary>\n            /// Gets the \"Low battery\" emoji. 🪫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>low_battery</c>\n            /// </remarks>\n            public const string LowBattery = \"\\U0001FAAB\";\n            \n            /// <summary>\n            /// Gets the \"Luggage\" emoji. 🧳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>luggage</c>\n            /// </remarks>\n            public const string Luggage = \"\\U0001F9F3\";\n            \n            /// <summary>\n            /// Gets the \"Lungs\" emoji. 🫁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lungs</c>\n            /// </remarks>\n            public const string Lungs = \"\\U0001FAC1\";\n            \n            /// <summary>\n            /// Gets the \"Lying face\" emoji. 🤥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>lying_face</c>\n            /// </remarks>\n            public const string LyingFace = \"\\U0001F925\";\n            \n            /// <summary>\n            /// Gets the \"Mage\" emoji. 🧙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mage</c>\n            /// </remarks>\n            public const string Mage = \"\\U0001F9D9\";\n            \n            /// <summary>\n            /// Gets the \"Magic wand\" emoji. 🪄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>magic_wand</c>\n            /// </remarks>\n            public const string MagicWand = \"\\U0001FA84\";\n            \n            /// <summary>\n            /// Gets the \"Magnet\" emoji. 🧲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>magnet</c>\n            /// </remarks>\n            public const string Magnet = \"\\U0001F9F2\";\n            \n            /// <summary>\n            /// Gets the \"Magnifying glass tilted left\" emoji. 🔍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>magnifying_glass_tilted_left</c>\n            /// </remarks>\n            public const string MagnifyingGlassTiltedLeft = \"\\U0001F50D\";\n            \n            /// <summary>\n            /// Gets the \"Magnifying glass tilted right\" emoji. 🔎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>magnifying_glass_tilted_right</c>\n            /// </remarks>\n            public const string MagnifyingGlassTiltedRight = \"\\U0001F50E\";\n            \n            /// <summary>\n            /// Gets the \"Mahjong red dragon\" emoji. 🀄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mahjong_red_dragon</c>\n            /// </remarks>\n            public const string MahjongRedDragon = \"\\U0001F004\";\n            \n            /// <summary>\n            /// Gets the \"Male sign\" emoji. ♂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>male_sign</c>\n            /// </remarks>\n            public const string MaleSign = \"\\U00002642\";\n            \n            /// <summary>\n            /// Gets the \"Mammoth\" emoji. 🦣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mammoth</c>\n            /// </remarks>\n            public const string Mammoth = \"\\U0001F9A3\";\n            \n            /// <summary>\n            /// Gets the \"Man\" emoji. 👨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>man</c>\n            /// </remarks>\n            public const string Man = \"\\U0001F468\";\n            \n            /// <summary>\n            /// Gets the \"Man dancing\" emoji. 🕺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>man_dancing</c>\n            /// </remarks>\n            public const string ManDancing = \"\\U0001F57A\";\n            \n            /// <summary>\n            /// Gets the \"Mango\" emoji. 🥭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mango</c>\n            /// </remarks>\n            public const string Mango = \"\\U0001F96D\";\n            \n            /// <summary>\n            /// Gets the \"Man’s shoe\" emoji. 👞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mans_shoe</c>\n            /// </remarks>\n            public const string MansShoe = \"\\U0001F45E\";\n            \n            /// <summary>\n            /// Gets the \"Mantelpiece clock\" emoji. 🕰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mantelpiece_clock</c>\n            /// </remarks>\n            public const string MantelpieceClock = \"\\U0001F570\";\n            \n            /// <summary>\n            /// Gets the \"Manual wheelchair\" emoji. 🦽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>manual_wheelchair</c>\n            /// </remarks>\n            public const string ManualWheelchair = \"\\U0001F9BD\";\n            \n            /// <summary>\n            /// Gets the \"Maple leaf\" emoji. 🍁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>maple_leaf</c>\n            /// </remarks>\n            public const string MapleLeaf = \"\\U0001F341\";\n            \n            /// <summary>\n            /// Gets the \"Map of Japan\" emoji. 🗾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>map_of_japan</c>\n            /// </remarks>\n            public const string MapOfJapan = \"\\U0001F5FE\";\n            \n            /// <summary>\n            /// Gets the \"Maracas\" emoji. 🪇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>maracas</c>\n            /// </remarks>\n            public const string Maracas = \"\\U0001FA87\";\n            \n            /// <summary>\n            /// Gets the \"Martial arts uniform\" emoji. 🥋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>martial_arts_uniform</c>\n            /// </remarks>\n            public const string MartialArtsUniform = \"\\U0001F94B\";\n            \n            /// <summary>\n            /// Gets the \"Mate\" emoji. 🧉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mate</c>\n            /// </remarks>\n            public const string Mate = \"\\U0001F9C9\";\n            \n            /// <summary>\n            /// Gets the \"Meat on bone\" emoji. 🍖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>meat_on_bone</c>\n            /// </remarks>\n            public const string MeatOnBone = \"\\U0001F356\";\n            \n            /// <summary>\n            /// Gets the \"Mechanical arm\" emoji. 🦾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mechanical_arm</c>\n            /// </remarks>\n            public const string MechanicalArm = \"\\U0001F9BE\";\n            \n            /// <summary>\n            /// Gets the \"Mechanical leg\" emoji. 🦿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mechanical_leg</c>\n            /// </remarks>\n            public const string MechanicalLeg = \"\\U0001F9BF\";\n            \n            /// <summary>\n            /// Gets the \"Medical symbol\" emoji. ⚕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>medical_symbol</c>\n            /// </remarks>\n            public const string MedicalSymbol = \"\\U00002695\";\n            \n            /// <summary>\n            /// Gets the \"Medium-dark skin tone\" emoji. 🏾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>medium_dark_skin_tone</c>\n            /// </remarks>\n            public const string MediumDarkSkinTone = \"\\U0001F3FE\";\n            \n            /// <summary>\n            /// Gets the \"Medium-light skin tone\" emoji. 🏼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>medium_light_skin_tone</c>\n            /// </remarks>\n            public const string MediumLightSkinTone = \"\\U0001F3FC\";\n            \n            /// <summary>\n            /// Gets the \"Medium skin tone\" emoji. 🏽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>medium_skin_tone</c>\n            /// </remarks>\n            public const string MediumSkinTone = \"\\U0001F3FD\";\n            \n            /// <summary>\n            /// Gets the \"Megaphone\" emoji. 📣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>megaphone</c>\n            /// </remarks>\n            public const string Megaphone = \"\\U0001F4E3\";\n            \n            /// <summary>\n            /// Gets the \"Melon\" emoji. 🍈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>melon</c>\n            /// </remarks>\n            public const string Melon = \"\\U0001F348\";\n            \n            /// <summary>\n            /// Gets the \"Melting face\" emoji. 🫠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>melting_face</c>\n            /// </remarks>\n            public const string MeltingFace = \"\\U0001FAE0\";\n            \n            /// <summary>\n            /// Gets the \"Memo\" emoji. 📝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>memo</c>\n            /// </remarks>\n            public const string Memo = \"\\U0001F4DD\";\n            \n            /// <summary>\n            /// Gets the \"Men holding hands\" emoji. 👬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>men_holding_hands</c>\n            /// </remarks>\n            public const string MenHoldingHands = \"\\U0001F46C\";\n            \n            /// <summary>\n            /// Gets the \"Menorah\" emoji. 🕎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>menorah</c>\n            /// </remarks>\n            public const string Menorah = \"\\U0001F54E\";\n            \n            /// <summary>\n            /// Gets the \"Men’s room\" emoji. 🚹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mens_room</c>\n            /// </remarks>\n            public const string MensRoom = \"\\U0001F6B9\";\n            \n            /// <summary>\n            /// Gets the \"Merperson\" emoji. 🧜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>merperson</c>\n            /// </remarks>\n            public const string Merperson = \"\\U0001F9DC\";\n            \n            /// <summary>\n            /// Gets the \"Metro\" emoji. 🚇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>metro</c>\n            /// </remarks>\n            public const string Metro = \"\\U0001F687\";\n            \n            /// <summary>\n            /// Gets the \"Microbe\" emoji. 🦠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>microbe</c>\n            /// </remarks>\n            public const string Microbe = \"\\U0001F9A0\";\n            \n            /// <summary>\n            /// Gets the \"Microphone\" emoji. 🎤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>microphone</c>\n            /// </remarks>\n            public const string Microphone = \"\\U0001F3A4\";\n            \n            /// <summary>\n            /// Gets the \"Microscope\" emoji. 🔬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>microscope</c>\n            /// </remarks>\n            public const string Microscope = \"\\U0001F52C\";\n            \n            /// <summary>\n            /// Gets the \"Middle finger\" emoji. 🖕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>middle_finger</c>\n            /// </remarks>\n            public const string MiddleFinger = \"\\U0001F595\";\n            \n            /// <summary>\n            /// Gets the \"Military helmet\" emoji. 🪖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>military_helmet</c>\n            /// </remarks>\n            public const string MilitaryHelmet = \"\\U0001FA96\";\n            \n            /// <summary>\n            /// Gets the \"Military medal\" emoji. 🎖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>military_medal</c>\n            /// </remarks>\n            public const string MilitaryMedal = \"\\U0001F396\";\n            \n            /// <summary>\n            /// Gets the \"Milky way\" emoji. 🌌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>milky_way</c>\n            /// </remarks>\n            public const string MilkyWay = \"\\U0001F30C\";\n            \n            /// <summary>\n            /// Gets the \"Minibus\" emoji. 🚐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>minibus</c>\n            /// </remarks>\n            public const string Minibus = \"\\U0001F690\";\n            \n            /// <summary>\n            /// Gets the \"Minus\" emoji. ➖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>minus</c>\n            /// </remarks>\n            public const string Minus = \"\\U00002796\";\n            \n            /// <summary>\n            /// Gets the \"Mirror\" emoji. 🪞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mirror</c>\n            /// </remarks>\n            public const string Mirror = \"\\U0001FA9E\";\n            \n            /// <summary>\n            /// Gets the \"Mirror ball\" emoji. 🪩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mirror_ball</c>\n            /// </remarks>\n            public const string MirrorBall = \"\\U0001FAA9\";\n            \n            /// <summary>\n            /// Gets the \"Moai\" emoji. 🗿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>moai</c>\n            /// </remarks>\n            public const string Moai = \"\\U0001F5FF\";\n            \n            /// <summary>\n            /// Gets the \"Mobile phone\" emoji. 📱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mobile_phone</c>\n            /// </remarks>\n            public const string MobilePhone = \"\\U0001F4F1\";\n            \n            /// <summary>\n            /// Gets the \"Mobile phone off\" emoji. 📴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mobile_phone_off</c>\n            /// </remarks>\n            public const string MobilePhoneOff = \"\\U0001F4F4\";\n            \n            /// <summary>\n            /// Gets the \"Mobile phone with arrow\" emoji. 📲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mobile_phone_with_arrow</c>\n            /// </remarks>\n            public const string MobilePhoneWithArrow = \"\\U0001F4F2\";\n            \n            /// <summary>\n            /// Gets the \"Money bag\" emoji. 💰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>money_bag</c>\n            /// </remarks>\n            public const string MoneyBag = \"\\U0001F4B0\";\n            \n            /// <summary>\n            /// Gets the \"Money-mouth face\" emoji. 🤑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>money_mouth_face</c>\n            /// </remarks>\n            public const string MoneyMouthFace = \"\\U0001F911\";\n            \n            /// <summary>\n            /// Gets the \"Money with wings\" emoji. 💸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>money_with_wings</c>\n            /// </remarks>\n            public const string MoneyWithWings = \"\\U0001F4B8\";\n            \n            /// <summary>\n            /// Gets the \"Monkey\" emoji. 🐒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>monkey</c>\n            /// </remarks>\n            public const string Monkey = \"\\U0001F412\";\n            \n            /// <summary>\n            /// Gets the \"Monkey face\" emoji. 🐵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>monkey_face</c>\n            /// </remarks>\n            public const string MonkeyFace = \"\\U0001F435\";\n            \n            /// <summary>\n            /// Gets the \"Monorail\" emoji. 🚝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>monorail</c>\n            /// </remarks>\n            public const string Monorail = \"\\U0001F69D\";\n            \n            /// <summary>\n            /// Gets the \"Moon cake\" emoji. 🥮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>moon_cake</c>\n            /// </remarks>\n            public const string MoonCake = \"\\U0001F96E\";\n            \n            /// <summary>\n            /// Gets the \"Moon viewing ceremony\" emoji. 🎑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>moon_viewing_ceremony</c>\n            /// </remarks>\n            public const string MoonViewingCeremony = \"\\U0001F391\";\n            \n            /// <summary>\n            /// Gets the \"Moose\" emoji. 🫎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>moose</c>\n            /// </remarks>\n            public const string Moose = \"\\U0001FACE\";\n            \n            /// <summary>\n            /// Gets the \"Mosque\" emoji. 🕌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mosque</c>\n            /// </remarks>\n            public const string Mosque = \"\\U0001F54C\";\n            \n            /// <summary>\n            /// Gets the \"Mosquito\" emoji. 🦟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mosquito</c>\n            /// </remarks>\n            public const string Mosquito = \"\\U0001F99F\";\n            \n            /// <summary>\n            /// Gets the \"Motor boat\" emoji. 🛥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>motor_boat</c>\n            /// </remarks>\n            public const string MotorBoat = \"\\U0001F6E5\";\n            \n            /// <summary>\n            /// Gets the \"Motorcycle\" emoji. 🏍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>motorcycle</c>\n            /// </remarks>\n            public const string Motorcycle = \"\\U0001F3CD\";\n            \n            /// <summary>\n            /// Gets the \"Motorized wheelchair\" emoji. 🦼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>motorized_wheelchair</c>\n            /// </remarks>\n            public const string MotorizedWheelchair = \"\\U0001F9BC\";\n            \n            /// <summary>\n            /// Gets the \"Motor scooter\" emoji. 🛵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>motor_scooter</c>\n            /// </remarks>\n            public const string MotorScooter = \"\\U0001F6F5\";\n            \n            /// <summary>\n            /// Gets the \"Motorway\" emoji. 🛣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>motorway</c>\n            /// </remarks>\n            public const string Motorway = \"\\U0001F6E3\";\n            \n            /// <summary>\n            /// Gets the \"Mountain\" emoji. ⛰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mountain</c>\n            /// </remarks>\n            public const string Mountain = \"\\U000026F0\";\n            \n            /// <summary>\n            /// Gets the \"Mountain cableway\" emoji. 🚠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mountain_cableway</c>\n            /// </remarks>\n            public const string MountainCableway = \"\\U0001F6A0\";\n            \n            /// <summary>\n            /// Gets the \"Mountain railway\" emoji. 🚞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mountain_railway</c>\n            /// </remarks>\n            public const string MountainRailway = \"\\U0001F69E\";\n            \n            /// <summary>\n            /// Gets the \"Mount fuji\" emoji. 🗻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mount_fuji</c>\n            /// </remarks>\n            public const string MountFuji = \"\\U0001F5FB\";\n            \n            /// <summary>\n            /// Gets the \"Mouse\" emoji. 🐁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mouse</c>\n            /// </remarks>\n            public const string Mouse = \"\\U0001F401\";\n            \n            /// <summary>\n            /// Gets the \"Mouse face\" emoji. 🐭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mouse_face</c>\n            /// </remarks>\n            public const string MouseFace = \"\\U0001F42D\";\n            \n            /// <summary>\n            /// Gets the \"Mouse trap\" emoji. 🪤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mouse_trap</c>\n            /// </remarks>\n            public const string MouseTrap = \"\\U0001FAA4\";\n            \n            /// <summary>\n            /// Gets the \"Mouth\" emoji. 👄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mouth</c>\n            /// </remarks>\n            public const string Mouth = \"\\U0001F444\";\n            \n            /// <summary>\n            /// Gets the \"Movie camera\" emoji. 🎥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>movie_camera</c>\n            /// </remarks>\n            public const string MovieCamera = \"\\U0001F3A5\";\n            \n            /// <summary>\n            /// Gets the \"Mrs. Claus\" emoji. 🤶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mrs_claus</c>\n            /// </remarks>\n            public const string MrsClaus = \"\\U0001F936\";\n            \n            /// <summary>\n            /// Gets the \"Multiply\" emoji. ✖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>multiply</c>\n            /// </remarks>\n            public const string Multiply = \"\\U00002716\";\n            \n            /// <summary>\n            /// Gets the \"Mushroom\" emoji. 🍄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>mushroom</c>\n            /// </remarks>\n            public const string Mushroom = \"\\U0001F344\";\n            \n            /// <summary>\n            /// Gets the \"Musical keyboard\" emoji. 🎹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>musical_keyboard</c>\n            /// </remarks>\n            public const string MusicalKeyboard = \"\\U0001F3B9\";\n            \n            /// <summary>\n            /// Gets the \"Musical note\" emoji. 🎵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>musical_note</c>\n            /// </remarks>\n            public const string MusicalNote = \"\\U0001F3B5\";\n            \n            /// <summary>\n            /// Gets the \"Musical notes\" emoji. 🎶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>musical_notes</c>\n            /// </remarks>\n            public const string MusicalNotes = \"\\U0001F3B6\";\n            \n            /// <summary>\n            /// Gets the \"Musical score\" emoji. 🎼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>musical_score</c>\n            /// </remarks>\n            public const string MusicalScore = \"\\U0001F3BC\";\n            \n            /// <summary>\n            /// Gets the \"Muted speaker\" emoji. 🔇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>muted_speaker</c>\n            /// </remarks>\n            public const string MutedSpeaker = \"\\U0001F507\";\n            \n            /// <summary>\n            /// Gets the \"Nail polish\" emoji. 💅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nail_polish</c>\n            /// </remarks>\n            public const string NailPolish = \"\\U0001F485\";\n            \n            /// <summary>\n            /// Gets the \"Name badge\" emoji. 📛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>name_badge</c>\n            /// </remarks>\n            public const string NameBadge = \"\\U0001F4DB\";\n            \n            /// <summary>\n            /// Gets the \"National park\" emoji. 🏞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>national_park</c>\n            /// </remarks>\n            public const string NationalPark = \"\\U0001F3DE\";\n            \n            /// <summary>\n            /// Gets the \"Nauseated face\" emoji. 🤢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nauseated_face</c>\n            /// </remarks>\n            public const string NauseatedFace = \"\\U0001F922\";\n            \n            /// <summary>\n            /// Gets the \"Nazar amulet\" emoji. 🧿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nazar_amulet</c>\n            /// </remarks>\n            public const string NazarAmulet = \"\\U0001F9FF\";\n            \n            /// <summary>\n            /// Gets the \"Necktie\" emoji. 👔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>necktie</c>\n            /// </remarks>\n            public const string Necktie = \"\\U0001F454\";\n            \n            /// <summary>\n            /// Gets the \"Nerd face\" emoji. 🤓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nerd_face</c>\n            /// </remarks>\n            public const string NerdFace = \"\\U0001F913\";\n            \n            /// <summary>\n            /// Gets the \"Nesting dolls\" emoji. 🪆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nesting_dolls</c>\n            /// </remarks>\n            public const string NestingDolls = \"\\U0001FA86\";\n            \n            /// <summary>\n            /// Gets the \"Nest with eggs\" emoji. 🪺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nest_with_eggs</c>\n            /// </remarks>\n            public const string NestWithEggs = \"\\U0001FABA\";\n            \n            /// <summary>\n            /// Gets the \"Neutral face\" emoji. 😐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>neutral_face</c>\n            /// </remarks>\n            public const string NeutralFace = \"\\U0001F610\";\n            \n            /// <summary>\n            /// Gets the \"NEW button\" emoji. 🆕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>new_button</c>\n            /// </remarks>\n            public const string NewButton = \"\\U0001F195\";\n            \n            /// <summary>\n            /// Gets the \"New moon\" emoji. 🌑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>new_moon</c>\n            /// </remarks>\n            public const string NewMoon = \"\\U0001F311\";\n            \n            /// <summary>\n            /// Gets the \"New moon face\" emoji. 🌚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>new_moon_face</c>\n            /// </remarks>\n            public const string NewMoonFace = \"\\U0001F31A\";\n            \n            /// <summary>\n            /// Gets the \"Newspaper\" emoji. 📰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>newspaper</c>\n            /// </remarks>\n            public const string Newspaper = \"\\U0001F4F0\";\n            \n            /// <summary>\n            /// Gets the \"Next track button\" emoji. ⏭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>next_track_button</c>\n            /// </remarks>\n            public const string NextTrackButton = \"\\U000023ED\";\n            \n            /// <summary>\n            /// Gets the \"NG button\" emoji. 🆖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ng_button</c>\n            /// </remarks>\n            public const string NgButton = \"\\U0001F196\";\n            \n            /// <summary>\n            /// Gets the \"Night with stars\" emoji. 🌃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>night_with_stars</c>\n            /// </remarks>\n            public const string NightWithStars = \"\\U0001F303\";\n            \n            /// <summary>\n            /// Gets the \"Nine o’clock\" emoji. 🕘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nine_o_clock</c>\n            /// </remarks>\n            public const string NineOClock = \"\\U0001F558\";\n            \n            /// <summary>\n            /// Gets the \"Nine-thirty\" emoji. 🕤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nine_thirty</c>\n            /// </remarks>\n            public const string NineThirty = \"\\U0001F564\";\n            \n            /// <summary>\n            /// Gets the \"Ninja\" emoji. 🥷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ninja</c>\n            /// </remarks>\n            public const string Ninja = \"\\U0001F977\";\n            \n            /// <summary>\n            /// Gets the \"No bicycles\" emoji. 🚳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_bicycles</c>\n            /// </remarks>\n            public const string NoBicycles = \"\\U0001F6B3\";\n            \n            /// <summary>\n            /// Gets the \"No entry\" emoji. ⛔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_entry</c>\n            /// </remarks>\n            public const string NoEntry = \"\\U000026D4\";\n            \n            /// <summary>\n            /// Gets the \"No littering\" emoji. 🚯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_littering</c>\n            /// </remarks>\n            public const string NoLittering = \"\\U0001F6AF\";\n            \n            /// <summary>\n            /// Gets the \"No mobile phones\" emoji. 📵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_mobile_phones</c>\n            /// </remarks>\n            public const string NoMobilePhones = \"\\U0001F4F5\";\n            \n            /// <summary>\n            /// Gets the \"Non-potable water\" emoji. 🚱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>non_potable_water</c>\n            /// </remarks>\n            public const string NonPotableWater = \"\\U0001F6B1\";\n            \n            /// <summary>\n            /// Gets the \"No one under eighteen\" emoji. 🔞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_one_under_eighteen</c>\n            /// </remarks>\n            public const string NoOneUnderEighteen = \"\\U0001F51E\";\n            \n            /// <summary>\n            /// Gets the \"No pedestrians\" emoji. 🚷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_pedestrians</c>\n            /// </remarks>\n            public const string NoPedestrians = \"\\U0001F6B7\";\n            \n            /// <summary>\n            /// Gets the \"Nose\" emoji. 👃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nose</c>\n            /// </remarks>\n            public const string Nose = \"\\U0001F443\";\n            \n            /// <summary>\n            /// Gets the \"No smoking\" emoji. 🚭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>no_smoking</c>\n            /// </remarks>\n            public const string NoSmoking = \"\\U0001F6AD\";\n            \n            /// <summary>\n            /// Gets the \"Notebook\" emoji. 📓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>notebook</c>\n            /// </remarks>\n            public const string Notebook = \"\\U0001F4D3\";\n            \n            /// <summary>\n            /// Gets the \"Notebook with decorative cover\" emoji. 📔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>notebook_with_decorative_cover</c>\n            /// </remarks>\n            public const string NotebookWithDecorativeCover = \"\\U0001F4D4\";\n            \n            /// <summary>\n            /// Gets the \"Nut and bolt\" emoji. 🔩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>nut_and_bolt</c>\n            /// </remarks>\n            public const string NutAndBolt = \"\\U0001F529\";\n            \n            /// <summary>\n            /// Gets the \"O button (blood type)\" emoji. 🅾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>o_button_blood_type</c>\n            /// </remarks>\n            public const string OButtonBloodType = \"\\U0001F17E\";\n            \n            /// <summary>\n            /// Gets the \"Octopus\" emoji. 🐙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>octopus</c>\n            /// </remarks>\n            public const string Octopus = \"\\U0001F419\";\n            \n            /// <summary>\n            /// Gets the \"Oden\" emoji. 🍢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oden</c>\n            /// </remarks>\n            public const string Oden = \"\\U0001F362\";\n            \n            /// <summary>\n            /// Gets the \"Office building\" emoji. 🏢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>office_building</c>\n            /// </remarks>\n            public const string OfficeBuilding = \"\\U0001F3E2\";\n            \n            /// <summary>\n            /// Gets the \"Ogre\" emoji. 👹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ogre</c>\n            /// </remarks>\n            public const string Ogre = \"\\U0001F479\";\n            \n            /// <summary>\n            /// Gets the \"Oil drum\" emoji. 🛢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oil_drum</c>\n            /// </remarks>\n            public const string OilDrum = \"\\U0001F6E2\";\n            \n            /// <summary>\n            /// Gets the \"OK button\" emoji. 🆗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ok_button</c>\n            /// </remarks>\n            public const string OkButton = \"\\U0001F197\";\n            \n            /// <summary>\n            /// Gets the \"OK hand\" emoji. 👌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ok_hand</c>\n            /// </remarks>\n            public const string OkHand = \"\\U0001F44C\";\n            \n            /// <summary>\n            /// Gets the \"Older person\" emoji. 🧓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>older_person</c>\n            /// </remarks>\n            public const string OlderPerson = \"\\U0001F9D3\";\n            \n            /// <summary>\n            /// Gets the \"Old key\" emoji. 🗝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>old_key</c>\n            /// </remarks>\n            public const string OldKey = \"\\U0001F5DD\";\n            \n            /// <summary>\n            /// Gets the \"Old man\" emoji. 👴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>old_man</c>\n            /// </remarks>\n            public const string OldMan = \"\\U0001F474\";\n            \n            /// <summary>\n            /// Gets the \"Old woman\" emoji. 👵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>old_woman</c>\n            /// </remarks>\n            public const string OldWoman = \"\\U0001F475\";\n            \n            /// <summary>\n            /// Gets the \"Olive\" emoji. 🫒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>olive</c>\n            /// </remarks>\n            public const string Olive = \"\\U0001FAD2\";\n            \n            /// <summary>\n            /// Gets the \"Om\" emoji. 🕉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>om</c>\n            /// </remarks>\n            public const string Om = \"\\U0001F549\";\n            \n            /// <summary>\n            /// Gets the \"ON! arrow\" emoji. 🔛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>on_arrow</c>\n            /// </remarks>\n            public const string OnArrow = \"\\U0001F51B\";\n            \n            /// <summary>\n            /// Gets the \"Oncoming automobile\" emoji. 🚘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oncoming_automobile</c>\n            /// </remarks>\n            public const string OncomingAutomobile = \"\\U0001F698\";\n            \n            /// <summary>\n            /// Gets the \"Oncoming bus\" emoji. 🚍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oncoming_bus</c>\n            /// </remarks>\n            public const string OncomingBus = \"\\U0001F68D\";\n            \n            /// <summary>\n            /// Gets the \"Oncoming fist\" emoji. 👊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oncoming_fist</c>\n            /// </remarks>\n            public const string OncomingFist = \"\\U0001F44A\";\n            \n            /// <summary>\n            /// Gets the \"Oncoming police car\" emoji. 🚔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oncoming_police_car</c>\n            /// </remarks>\n            public const string OncomingPoliceCar = \"\\U0001F694\";\n            \n            /// <summary>\n            /// Gets the \"Oncoming taxi\" emoji. 🚖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oncoming_taxi</c>\n            /// </remarks>\n            public const string OncomingTaxi = \"\\U0001F696\";\n            \n            /// <summary>\n            /// Gets the \"One o’clock\" emoji. 🕐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>one_o_clock</c>\n            /// </remarks>\n            public const string OneOClock = \"\\U0001F550\";\n            \n            /// <summary>\n            /// Gets the \"One-piece swimsuit\" emoji. 🩱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>one_piece_swimsuit</c>\n            /// </remarks>\n            public const string OnePieceSwimsuit = \"\\U0001FA71\";\n            \n            /// <summary>\n            /// Gets the \"One-thirty\" emoji. 🕜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>one_thirty</c>\n            /// </remarks>\n            public const string OneThirty = \"\\U0001F55C\";\n            \n            /// <summary>\n            /// Gets the \"Onion\" emoji. 🧅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>onion</c>\n            /// </remarks>\n            public const string Onion = \"\\U0001F9C5\";\n            \n            /// <summary>\n            /// Gets the \"Open book\" emoji. 📖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>open_book</c>\n            /// </remarks>\n            public const string OpenBook = \"\\U0001F4D6\";\n            \n            /// <summary>\n            /// Gets the \"Open file folder\" emoji. 📂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>open_file_folder</c>\n            /// </remarks>\n            public const string OpenFileFolder = \"\\U0001F4C2\";\n            \n            /// <summary>\n            /// Gets the \"Open hands\" emoji. 👐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>open_hands</c>\n            /// </remarks>\n            public const string OpenHands = \"\\U0001F450\";\n            \n            /// <summary>\n            /// Gets the \"Open mailbox with lowered flag\" emoji. 📭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>open_mailbox_with_lowered_flag</c>\n            /// </remarks>\n            public const string OpenMailboxWithLoweredFlag = \"\\U0001F4ED\";\n            \n            /// <summary>\n            /// Gets the \"Open mailbox with raised flag\" emoji. 📬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>open_mailbox_with_raised_flag</c>\n            /// </remarks>\n            public const string OpenMailboxWithRaisedFlag = \"\\U0001F4EC\";\n            \n            /// <summary>\n            /// Gets the \"Ophiuchus\" emoji. ⛎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ophiuchus</c>\n            /// </remarks>\n            public const string Ophiuchus = \"\\U000026CE\";\n            \n            /// <summary>\n            /// Gets the \"Optical disk\" emoji. 💿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>optical_disk</c>\n            /// </remarks>\n            public const string OpticalDisk = \"\\U0001F4BF\";\n            \n            /// <summary>\n            /// Gets the \"Orange book\" emoji. 📙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orange_book</c>\n            /// </remarks>\n            public const string OrangeBook = \"\\U0001F4D9\";\n            \n            /// <summary>\n            /// Gets the \"Orange circle\" emoji. 🟠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orange_circle</c>\n            /// </remarks>\n            public const string OrangeCircle = \"\\U0001F7E0\";\n            \n            /// <summary>\n            /// Gets the \"Orange heart\" emoji. 🧡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orange_heart</c>\n            /// </remarks>\n            public const string OrangeHeart = \"\\U0001F9E1\";\n            \n            /// <summary>\n            /// Gets the \"Orange square\" emoji. 🟧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orange_square</c>\n            /// </remarks>\n            public const string OrangeSquare = \"\\U0001F7E7\";\n            \n            /// <summary>\n            /// Gets the \"Orangutan\" emoji. 🦧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orangutan</c>\n            /// </remarks>\n            public const string Orangutan = \"\\U0001F9A7\";\n            \n            /// <summary>\n            /// Gets the \"Orca\" emoji. 🫍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orca</c>\n            /// </remarks>\n            public const string Orca = \"\\U0001FACD\";\n            \n            /// <summary>\n            /// Gets the \"Orthodox cross\" emoji. ☦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>orthodox_cross</c>\n            /// </remarks>\n            public const string OrthodoxCross = \"\\U00002626\";\n            \n            /// <summary>\n            /// Gets the \"Otter\" emoji. 🦦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>otter</c>\n            /// </remarks>\n            public const string Otter = \"\\U0001F9A6\";\n            \n            /// <summary>\n            /// Gets the \"Outbox tray\" emoji. 📤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>outbox_tray</c>\n            /// </remarks>\n            public const string OutboxTray = \"\\U0001F4E4\";\n            \n            /// <summary>\n            /// Gets the \"Owl\" emoji. 🦉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>owl</c>\n            /// </remarks>\n            public const string Owl = \"\\U0001F989\";\n            \n            /// <summary>\n            /// Gets the \"Ox\" emoji. 🐂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ox</c>\n            /// </remarks>\n            public const string Ox = \"\\U0001F402\";\n            \n            /// <summary>\n            /// Gets the \"Oyster\" emoji. 🦪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>oyster</c>\n            /// </remarks>\n            public const string Oyster = \"\\U0001F9AA\";\n            \n            /// <summary>\n            /// Gets the \"Package\" emoji. 📦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>package</c>\n            /// </remarks>\n            public const string Package = \"\\U0001F4E6\";\n            \n            /// <summary>\n            /// Gets the \"Page facing up\" emoji. 📄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>page_facing_up</c>\n            /// </remarks>\n            public const string PageFacingUp = \"\\U0001F4C4\";\n            \n            /// <summary>\n            /// Gets the \"Pager\" emoji. 📟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pager</c>\n            /// </remarks>\n            public const string Pager = \"\\U0001F4DF\";\n            \n            /// <summary>\n            /// Gets the \"Page with curl\" emoji. 📃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>page_with_curl</c>\n            /// </remarks>\n            public const string PageWithCurl = \"\\U0001F4C3\";\n            \n            /// <summary>\n            /// Gets the \"Paintbrush\" emoji. 🖌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>paintbrush</c>\n            /// </remarks>\n            public const string Paintbrush = \"\\U0001F58C\";\n            \n            /// <summary>\n            /// Gets the \"Palm down hand\" emoji. 🫳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>palm_down_hand</c>\n            /// </remarks>\n            public const string PalmDownHand = \"\\U0001FAF3\";\n            \n            /// <summary>\n            /// Gets the \"Palms up together\" emoji. 🤲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>palms_up_together</c>\n            /// </remarks>\n            public const string PalmsUpTogether = \"\\U0001F932\";\n            \n            /// <summary>\n            /// Gets the \"Palm tree\" emoji. 🌴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>palm_tree</c>\n            /// </remarks>\n            public const string PalmTree = \"\\U0001F334\";\n            \n            /// <summary>\n            /// Gets the \"Palm up hand\" emoji. 🫴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>palm_up_hand</c>\n            /// </remarks>\n            public const string PalmUpHand = \"\\U0001FAF4\";\n            \n            /// <summary>\n            /// Gets the \"Pancakes\" emoji. 🥞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pancakes</c>\n            /// </remarks>\n            public const string Pancakes = \"\\U0001F95E\";\n            \n            /// <summary>\n            /// Gets the \"Panda\" emoji. 🐼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>panda</c>\n            /// </remarks>\n            public const string Panda = \"\\U0001F43C\";\n            \n            /// <summary>\n            /// Gets the \"Paperclip\" emoji. 📎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>paperclip</c>\n            /// </remarks>\n            public const string Paperclip = \"\\U0001F4CE\";\n            \n            /// <summary>\n            /// Gets the \"Parachute\" emoji. 🪂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>parachute</c>\n            /// </remarks>\n            public const string Parachute = \"\\U0001FA82\";\n            \n            /// <summary>\n            /// Gets the \"Parrot\" emoji. 🦜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>parrot</c>\n            /// </remarks>\n            public const string Parrot = \"\\U0001F99C\";\n            \n            /// <summary>\n            /// Gets the \"Part alternation mark\" emoji. 〽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>part_alternation_mark</c>\n            /// </remarks>\n            public const string PartAlternationMark = \"\\U0000303D\";\n            \n            /// <summary>\n            /// Gets the \"Partying face\" emoji. 🥳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>partying_face</c>\n            /// </remarks>\n            public const string PartyingFace = \"\\U0001F973\";\n            \n            /// <summary>\n            /// Gets the \"Party popper\" emoji. 🎉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>party_popper</c>\n            /// </remarks>\n            public const string PartyPopper = \"\\U0001F389\";\n            \n            /// <summary>\n            /// Gets the \"Passenger ship\" emoji. 🛳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>passenger_ship</c>\n            /// </remarks>\n            public const string PassengerShip = \"\\U0001F6F3\";\n            \n            /// <summary>\n            /// Gets the \"Passport control\" emoji. 🛂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>passport_control</c>\n            /// </remarks>\n            public const string PassportControl = \"\\U0001F6C2\";\n            \n            /// <summary>\n            /// Gets the \"Pause button\" emoji. ⏸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pause_button</c>\n            /// </remarks>\n            public const string PauseButton = \"\\U000023F8\";\n            \n            /// <summary>\n            /// Gets the \"Paw prints\" emoji. 🐾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>paw_prints</c>\n            /// </remarks>\n            public const string PawPrints = \"\\U0001F43E\";\n            \n            /// <summary>\n            /// Gets the \"P button\" emoji. 🅿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>p_button</c>\n            /// </remarks>\n            public const string PButton = \"\\U0001F17F\";\n            \n            /// <summary>\n            /// Gets the \"Peace symbol\" emoji. ☮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>peace_symbol</c>\n            /// </remarks>\n            public const string PeaceSymbol = \"\\U0000262E\";\n            \n            /// <summary>\n            /// Gets the \"Peach\" emoji. 🍑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>peach</c>\n            /// </remarks>\n            public const string Peach = \"\\U0001F351\";\n            \n            /// <summary>\n            /// Gets the \"Peacock\" emoji. 🦚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>peacock</c>\n            /// </remarks>\n            public const string Peacock = \"\\U0001F99A\";\n            \n            /// <summary>\n            /// Gets the \"Peanuts\" emoji. 🥜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>peanuts</c>\n            /// </remarks>\n            public const string Peanuts = \"\\U0001F95C\";\n            \n            /// <summary>\n            /// Gets the \"Pea pod\" emoji. 🫛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pea_pod</c>\n            /// </remarks>\n            public const string PeaPod = \"\\U0001FADB\";\n            \n            /// <summary>\n            /// Gets the \"Pear\" emoji. 🍐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pear</c>\n            /// </remarks>\n            public const string Pear = \"\\U0001F350\";\n            \n            /// <summary>\n            /// Gets the \"Pen\" emoji. 🖊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pen</c>\n            /// </remarks>\n            public const string Pen = \"\\U0001F58A\";\n            \n            /// <summary>\n            /// Gets the \"Pencil\" emoji. ✏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pencil</c>\n            /// </remarks>\n            public const string Pencil = \"\\U0000270F\";\n            \n            /// <summary>\n            /// Gets the \"Penguin\" emoji. 🐧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>penguin</c>\n            /// </remarks>\n            public const string Penguin = \"\\U0001F427\";\n            \n            /// <summary>\n            /// Gets the \"Pensive face\" emoji. 😔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pensive_face</c>\n            /// </remarks>\n            public const string PensiveFace = \"\\U0001F614\";\n            \n            /// <summary>\n            /// Gets the \"People hugging\" emoji. 🫂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>people_hugging</c>\n            /// </remarks>\n            public const string PeopleHugging = \"\\U0001FAC2\";\n            \n            /// <summary>\n            /// Gets the \"People with bunny ears\" emoji. 👯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>people_with_bunny_ears</c>\n            /// </remarks>\n            public const string PeopleWithBunnyEars = \"\\U0001F46F\";\n            \n            /// <summary>\n            /// Gets the \"People wrestling\" emoji. 🤼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>people_wrestling</c>\n            /// </remarks>\n            public const string PeopleWrestling = \"\\U0001F93C\";\n            \n            /// <summary>\n            /// Gets the \"Performing arts\" emoji. 🎭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>performing_arts</c>\n            /// </remarks>\n            public const string PerformingArts = \"\\U0001F3AD\";\n            \n            /// <summary>\n            /// Gets the \"Persevering face\" emoji. 😣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>persevering_face</c>\n            /// </remarks>\n            public const string PerseveringFace = \"\\U0001F623\";\n            \n            /// <summary>\n            /// Gets the \"Person\" emoji. 🧑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person</c>\n            /// </remarks>\n            public const string Person = \"\\U0001F9D1\";\n            \n            /// <summary>\n            /// Gets the \"Person: beard\" emoji. 🧔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_beard</c>\n            /// </remarks>\n            public const string PersonBeard = \"\\U0001F9D4\";\n            \n            /// <summary>\n            /// Gets the \"Person biking\" emoji. 🚴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_biking</c>\n            /// </remarks>\n            public const string PersonBiking = \"\\U0001F6B4\";\n            \n            /// <summary>\n            /// Gets the \"Person: blond hair\" emoji. 👱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_blond_hair</c>\n            /// </remarks>\n            public const string PersonBlondHair = \"\\U0001F471\";\n            \n            /// <summary>\n            /// Gets the \"Person bouncing ball\" emoji. ⛹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_bouncing_ball</c>\n            /// </remarks>\n            public const string PersonBouncingBall = \"\\U000026F9\";\n            \n            /// <summary>\n            /// Gets the \"Person bowing\" emoji. 🙇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_bowing</c>\n            /// </remarks>\n            public const string PersonBowing = \"\\U0001F647\";\n            \n            /// <summary>\n            /// Gets the \"Person cartwheeling\" emoji. 🤸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_cartwheeling</c>\n            /// </remarks>\n            public const string PersonCartwheeling = \"\\U0001F938\";\n            \n            /// <summary>\n            /// Gets the \"Person climbing\" emoji. 🧗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_climbing</c>\n            /// </remarks>\n            public const string PersonClimbing = \"\\U0001F9D7\";\n            \n            /// <summary>\n            /// Gets the \"Person facepalming\" emoji. 🤦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_facepalming</c>\n            /// </remarks>\n            public const string PersonFacepalming = \"\\U0001F926\";\n            \n            /// <summary>\n            /// Gets the \"Person fencing\" emoji. 🤺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_fencing</c>\n            /// </remarks>\n            public const string PersonFencing = \"\\U0001F93A\";\n            \n            /// <summary>\n            /// Gets the \"Person frowning\" emoji. 🙍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_frowning</c>\n            /// </remarks>\n            public const string PersonFrowning = \"\\U0001F64D\";\n            \n            /// <summary>\n            /// Gets the \"Person gesturing NO\" emoji. 🙅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_gesturing_no</c>\n            /// </remarks>\n            public const string PersonGesturingNo = \"\\U0001F645\";\n            \n            /// <summary>\n            /// Gets the \"Person gesturing OK\" emoji. 🙆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_gesturing_ok</c>\n            /// </remarks>\n            public const string PersonGesturingOk = \"\\U0001F646\";\n            \n            /// <summary>\n            /// Gets the \"Person getting haircut\" emoji. 💇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_getting_haircut</c>\n            /// </remarks>\n            public const string PersonGettingHaircut = \"\\U0001F487\";\n            \n            /// <summary>\n            /// Gets the \"Person getting massage\" emoji. 💆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_getting_massage</c>\n            /// </remarks>\n            public const string PersonGettingMassage = \"\\U0001F486\";\n            \n            /// <summary>\n            /// Gets the \"Person golfing\" emoji. 🏌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_golfing</c>\n            /// </remarks>\n            public const string PersonGolfing = \"\\U0001F3CC\";\n            \n            /// <summary>\n            /// Gets the \"Person in bed\" emoji. 🛌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_in_bed</c>\n            /// </remarks>\n            public const string PersonInBed = \"\\U0001F6CC\";\n            \n            /// <summary>\n            /// Gets the \"Person in lotus position\" emoji. 🧘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_in_lotus_position</c>\n            /// </remarks>\n            public const string PersonInLotusPosition = \"\\U0001F9D8\";\n            \n            /// <summary>\n            /// Gets the \"Person in steamy room\" emoji. 🧖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_in_steamy_room</c>\n            /// </remarks>\n            public const string PersonInSteamyRoom = \"\\U0001F9D6\";\n            \n            /// <summary>\n            /// Gets the \"Person in suit levitating\" emoji. 🕴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_in_suit_levitating</c>\n            /// </remarks>\n            public const string PersonInSuitLevitating = \"\\U0001F574\";\n            \n            /// <summary>\n            /// Gets the \"Person in tuxedo\" emoji. 🤵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_in_tuxedo</c>\n            /// </remarks>\n            public const string PersonInTuxedo = \"\\U0001F935\";\n            \n            /// <summary>\n            /// Gets the \"Person juggling\" emoji. 🤹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_juggling</c>\n            /// </remarks>\n            public const string PersonJuggling = \"\\U0001F939\";\n            \n            /// <summary>\n            /// Gets the \"Person kneeling\" emoji. 🧎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_kneeling</c>\n            /// </remarks>\n            public const string PersonKneeling = \"\\U0001F9CE\";\n            \n            /// <summary>\n            /// Gets the \"Person lifting weights\" emoji. 🏋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_lifting_weights</c>\n            /// </remarks>\n            public const string PersonLiftingWeights = \"\\U0001F3CB\";\n            \n            /// <summary>\n            /// Gets the \"Person mountain biking\" emoji. 🚵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_mountain_biking</c>\n            /// </remarks>\n            public const string PersonMountainBiking = \"\\U0001F6B5\";\n            \n            /// <summary>\n            /// Gets the \"Person playing handball\" emoji. 🤾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_playing_handball</c>\n            /// </remarks>\n            public const string PersonPlayingHandball = \"\\U0001F93E\";\n            \n            /// <summary>\n            /// Gets the \"Person playing water polo\" emoji. 🤽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_playing_water_polo</c>\n            /// </remarks>\n            public const string PersonPlayingWaterPolo = \"\\U0001F93D\";\n            \n            /// <summary>\n            /// Gets the \"Person pouting\" emoji. 🙎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_pouting</c>\n            /// </remarks>\n            public const string PersonPouting = \"\\U0001F64E\";\n            \n            /// <summary>\n            /// Gets the \"Person raising hand\" emoji. 🙋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_raising_hand</c>\n            /// </remarks>\n            public const string PersonRaisingHand = \"\\U0001F64B\";\n            \n            /// <summary>\n            /// Gets the \"Person rowing boat\" emoji. 🚣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_rowing_boat</c>\n            /// </remarks>\n            public const string PersonRowingBoat = \"\\U0001F6A3\";\n            \n            /// <summary>\n            /// Gets the \"Person running\" emoji. 🏃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_running</c>\n            /// </remarks>\n            public const string PersonRunning = \"\\U0001F3C3\";\n            \n            /// <summary>\n            /// Gets the \"Person shrugging\" emoji. 🤷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_shrugging</c>\n            /// </remarks>\n            public const string PersonShrugging = \"\\U0001F937\";\n            \n            /// <summary>\n            /// Gets the \"Person standing\" emoji. 🧍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_standing</c>\n            /// </remarks>\n            public const string PersonStanding = \"\\U0001F9CD\";\n            \n            /// <summary>\n            /// Gets the \"Person surfing\" emoji. 🏄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_surfing</c>\n            /// </remarks>\n            public const string PersonSurfing = \"\\U0001F3C4\";\n            \n            /// <summary>\n            /// Gets the \"Person swimming\" emoji. 🏊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_swimming</c>\n            /// </remarks>\n            public const string PersonSwimming = \"\\U0001F3CA\";\n            \n            /// <summary>\n            /// Gets the \"Person taking bath\" emoji. 🛀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_taking_bath</c>\n            /// </remarks>\n            public const string PersonTakingBath = \"\\U0001F6C0\";\n            \n            /// <summary>\n            /// Gets the \"Person tipping hand\" emoji. 💁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_tipping_hand</c>\n            /// </remarks>\n            public const string PersonTippingHand = \"\\U0001F481\";\n            \n            /// <summary>\n            /// Gets the \"Person walking\" emoji. 🚶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_walking</c>\n            /// </remarks>\n            public const string PersonWalking = \"\\U0001F6B6\";\n            \n            /// <summary>\n            /// Gets the \"Person wearing turban\" emoji. 👳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_wearing_turban</c>\n            /// </remarks>\n            public const string PersonWearingTurban = \"\\U0001F473\";\n            \n            /// <summary>\n            /// Gets the \"Person with crown\" emoji. 🫅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_with_crown</c>\n            /// </remarks>\n            public const string PersonWithCrown = \"\\U0001FAC5\";\n            \n            /// <summary>\n            /// Gets the \"Person with skullcap\" emoji. 👲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_with_skullcap</c>\n            /// </remarks>\n            public const string PersonWithSkullcap = \"\\U0001F472\";\n            \n            /// <summary>\n            /// Gets the \"Person with veil\" emoji. 👰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>person_with_veil</c>\n            /// </remarks>\n            public const string PersonWithVeil = \"\\U0001F470\";\n            \n            /// <summary>\n            /// Gets the \"Petri dish\" emoji. 🧫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>petri_dish</c>\n            /// </remarks>\n            public const string PetriDish = \"\\U0001F9EB\";\n            \n            /// <summary>\n            /// Gets the \"Pick\" emoji. ⛏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pick</c>\n            /// </remarks>\n            public const string Pick = \"\\U000026CF\";\n            \n            /// <summary>\n            /// Gets the \"Pickup truck\" emoji. 🛻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pickup_truck</c>\n            /// </remarks>\n            public const string PickupTruck = \"\\U0001F6FB\";\n            \n            /// <summary>\n            /// Gets the \"Pie\" emoji. 🥧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pie</c>\n            /// </remarks>\n            public const string Pie = \"\\U0001F967\";\n            \n            /// <summary>\n            /// Gets the \"Pig\" emoji. 🐖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pig</c>\n            /// </remarks>\n            public const string Pig = \"\\U0001F416\";\n            \n            /// <summary>\n            /// Gets the \"Pig face\" emoji. 🐷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pig_face</c>\n            /// </remarks>\n            public const string PigFace = \"\\U0001F437\";\n            \n            /// <summary>\n            /// Gets the \"Pig nose\" emoji. 🐽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pig_nose</c>\n            /// </remarks>\n            public const string PigNose = \"\\U0001F43D\";\n            \n            /// <summary>\n            /// Gets the \"Pile of poo\" emoji. 💩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pile_of_poo</c>\n            /// </remarks>\n            public const string PileOfPoo = \"\\U0001F4A9\";\n            \n            /// <summary>\n            /// Gets the \"Pill\" emoji. 💊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pill</c>\n            /// </remarks>\n            public const string Pill = \"\\U0001F48A\";\n            \n            /// <summary>\n            /// Gets the \"Piñata\" emoji. 🪅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>piñata</c>\n            /// </remarks>\n            public const string Piñata = \"\\U0001FA85\";\n            \n            /// <summary>\n            /// Gets the \"Pinched fingers\" emoji. 🤌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pinched_fingers</c>\n            /// </remarks>\n            public const string PinchedFingers = \"\\U0001F90C\";\n            \n            /// <summary>\n            /// Gets the \"Pinching hand\" emoji. 🤏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pinching_hand</c>\n            /// </remarks>\n            public const string PinchingHand = \"\\U0001F90F\";\n            \n            /// <summary>\n            /// Gets the \"Pineapple\" emoji. 🍍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pineapple</c>\n            /// </remarks>\n            public const string Pineapple = \"\\U0001F34D\";\n            \n            /// <summary>\n            /// Gets the \"Pine decoration\" emoji. 🎍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pine_decoration</c>\n            /// </remarks>\n            public const string PineDecoration = \"\\U0001F38D\";\n            \n            /// <summary>\n            /// Gets the \"Ping pong\" emoji. 🏓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ping_pong</c>\n            /// </remarks>\n            public const string PingPong = \"\\U0001F3D3\";\n            \n            /// <summary>\n            /// Gets the \"Pink heart\" emoji. 🩷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pink_heart</c>\n            /// </remarks>\n            public const string PinkHeart = \"\\U0001FA77\";\n            \n            /// <summary>\n            /// Gets the \"Pisces\" emoji. ♓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pisces</c>\n            /// </remarks>\n            public const string Pisces = \"\\U00002653\";\n            \n            /// <summary>\n            /// Gets the \"Pizza\" emoji. 🍕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pizza</c>\n            /// </remarks>\n            public const string Pizza = \"\\U0001F355\";\n            \n            /// <summary>\n            /// Gets the \"Placard\" emoji. 🪧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>placard</c>\n            /// </remarks>\n            public const string Placard = \"\\U0001FAA7\";\n            \n            /// <summary>\n            /// Gets the \"Place of worship\" emoji. 🛐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>place_of_worship</c>\n            /// </remarks>\n            public const string PlaceOfWorship = \"\\U0001F6D0\";\n            \n            /// <summary>\n            /// Gets the \"Play button\" emoji. ▶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>play_button</c>\n            /// </remarks>\n            public const string PlayButton = \"\\U000025B6\";\n            \n            /// <summary>\n            /// Gets the \"Playground slide\" emoji. 🛝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>playground_slide</c>\n            /// </remarks>\n            public const string PlaygroundSlide = \"\\U0001F6DD\";\n            \n            /// <summary>\n            /// Gets the \"Play or pause button\" emoji. ⏯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>play_or_pause_button</c>\n            /// </remarks>\n            public const string PlayOrPauseButton = \"\\U000023EF\";\n            \n            /// <summary>\n            /// Gets the \"Pleading face\" emoji. 🥺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pleading_face</c>\n            /// </remarks>\n            public const string PleadingFace = \"\\U0001F97A\";\n            \n            /// <summary>\n            /// Gets the \"Plunger\" emoji. 🪠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>plunger</c>\n            /// </remarks>\n            public const string Plunger = \"\\U0001FAA0\";\n            \n            /// <summary>\n            /// Gets the \"Plus\" emoji. ➕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>plus</c>\n            /// </remarks>\n            public const string Plus = \"\\U00002795\";\n            \n            /// <summary>\n            /// Gets the \"Police car\" emoji. 🚓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>police_car</c>\n            /// </remarks>\n            public const string PoliceCar = \"\\U0001F693\";\n            \n            /// <summary>\n            /// Gets the \"Police car light\" emoji. 🚨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>police_car_light</c>\n            /// </remarks>\n            public const string PoliceCarLight = \"\\U0001F6A8\";\n            \n            /// <summary>\n            /// Gets the \"Police officer\" emoji. 👮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>police_officer</c>\n            /// </remarks>\n            public const string PoliceOfficer = \"\\U0001F46E\";\n            \n            /// <summary>\n            /// Gets the \"Poodle\" emoji. 🐩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>poodle</c>\n            /// </remarks>\n            public const string Poodle = \"\\U0001F429\";\n            \n            /// <summary>\n            /// Gets the \"Pool 8 ball\" emoji. 🎱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pool_8_ball</c>\n            /// </remarks>\n            public const string Pool8Ball = \"\\U0001F3B1\";\n            \n            /// <summary>\n            /// Gets the \"Popcorn\" emoji. 🍿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>popcorn</c>\n            /// </remarks>\n            public const string Popcorn = \"\\U0001F37F\";\n            \n            /// <summary>\n            /// Gets the \"Postal horn\" emoji. 📯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>postal_horn</c>\n            /// </remarks>\n            public const string PostalHorn = \"\\U0001F4EF\";\n            \n            /// <summary>\n            /// Gets the \"Postbox\" emoji. 📮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>postbox</c>\n            /// </remarks>\n            public const string Postbox = \"\\U0001F4EE\";\n            \n            /// <summary>\n            /// Gets the \"Post office\" emoji. 🏤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>post_office</c>\n            /// </remarks>\n            public const string PostOffice = \"\\U0001F3E4\";\n            \n            /// <summary>\n            /// Gets the \"Potable water\" emoji. 🚰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>potable_water</c>\n            /// </remarks>\n            public const string PotableWater = \"\\U0001F6B0\";\n            \n            /// <summary>\n            /// Gets the \"Potato\" emoji. 🥔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>potato</c>\n            /// </remarks>\n            public const string Potato = \"\\U0001F954\";\n            \n            /// <summary>\n            /// Gets the \"Pot of food\" emoji. 🍲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pot_of_food</c>\n            /// </remarks>\n            public const string PotOfFood = \"\\U0001F372\";\n            \n            /// <summary>\n            /// Gets the \"Potted plant\" emoji. 🪴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>potted_plant</c>\n            /// </remarks>\n            public const string PottedPlant = \"\\U0001FAB4\";\n            \n            /// <summary>\n            /// Gets the \"Poultry leg\" emoji. 🍗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>poultry_leg</c>\n            /// </remarks>\n            public const string PoultryLeg = \"\\U0001F357\";\n            \n            /// <summary>\n            /// Gets the \"Pound banknote\" emoji. 💷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pound_banknote</c>\n            /// </remarks>\n            public const string PoundBanknote = \"\\U0001F4B7\";\n            \n            /// <summary>\n            /// Gets the \"Pouring liquid\" emoji. 🫗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pouring_liquid</c>\n            /// </remarks>\n            public const string PouringLiquid = \"\\U0001FAD7\";\n            \n            /// <summary>\n            /// Gets the \"Pouting cat\" emoji. 😾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pouting_cat</c>\n            /// </remarks>\n            public const string PoutingCat = \"\\U0001F63E\";\n            \n            /// <summary>\n            /// Gets the \"Prayer beads\" emoji. 📿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>prayer_beads</c>\n            /// </remarks>\n            public const string PrayerBeads = \"\\U0001F4FF\";\n            \n            /// <summary>\n            /// Gets the \"Pregnant man\" emoji. 🫃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pregnant_man</c>\n            /// </remarks>\n            public const string PregnantMan = \"\\U0001FAC3\";\n            \n            /// <summary>\n            /// Gets the \"Pregnant person\" emoji. 🫄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pregnant_person</c>\n            /// </remarks>\n            public const string PregnantPerson = \"\\U0001FAC4\";\n            \n            /// <summary>\n            /// Gets the \"Pregnant woman\" emoji. 🤰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pregnant_woman</c>\n            /// </remarks>\n            public const string PregnantWoman = \"\\U0001F930\";\n            \n            /// <summary>\n            /// Gets the \"Pretzel\" emoji. 🥨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pretzel</c>\n            /// </remarks>\n            public const string Pretzel = \"\\U0001F968\";\n            \n            /// <summary>\n            /// Gets the \"Prince\" emoji. 🤴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>prince</c>\n            /// </remarks>\n            public const string Prince = \"\\U0001F934\";\n            \n            /// <summary>\n            /// Gets the \"Princess\" emoji. 👸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>princess</c>\n            /// </remarks>\n            public const string Princess = \"\\U0001F478\";\n            \n            /// <summary>\n            /// Gets the \"Printer\" emoji. 🖨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>printer</c>\n            /// </remarks>\n            public const string Printer = \"\\U0001F5A8\";\n            \n            /// <summary>\n            /// Gets the \"Prohibited\" emoji. 🚫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>prohibited</c>\n            /// </remarks>\n            public const string Prohibited = \"\\U0001F6AB\";\n            \n            /// <summary>\n            /// Gets the \"Purple circle\" emoji. 🟣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>purple_circle</c>\n            /// </remarks>\n            public const string PurpleCircle = \"\\U0001F7E3\";\n            \n            /// <summary>\n            /// Gets the \"Purple heart\" emoji. 💜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>purple_heart</c>\n            /// </remarks>\n            public const string PurpleHeart = \"\\U0001F49C\";\n            \n            /// <summary>\n            /// Gets the \"Purple square\" emoji. 🟪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>purple_square</c>\n            /// </remarks>\n            public const string PurpleSquare = \"\\U0001F7EA\";\n            \n            /// <summary>\n            /// Gets the \"Purse\" emoji. 👛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>purse</c>\n            /// </remarks>\n            public const string Purse = \"\\U0001F45B\";\n            \n            /// <summary>\n            /// Gets the \"Pushpin\" emoji. 📌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pushpin</c>\n            /// </remarks>\n            public const string Pushpin = \"\\U0001F4CC\";\n            \n            /// <summary>\n            /// Gets the \"Puzzle piece\" emoji. 🧩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>puzzle_piece</c>\n            /// </remarks>\n            public const string PuzzlePiece = \"\\U0001F9E9\";\n            \n            /// <summary>\n            /// Gets the \"Rabbit\" emoji. 🐇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rabbit</c>\n            /// </remarks>\n            public const string Rabbit = \"\\U0001F407\";\n            \n            /// <summary>\n            /// Gets the \"Rabbit face\" emoji. 🐰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rabbit_face</c>\n            /// </remarks>\n            public const string RabbitFace = \"\\U0001F430\";\n            \n            /// <summary>\n            /// Gets the \"Raccoon\" emoji. 🦝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>raccoon</c>\n            /// </remarks>\n            public const string Raccoon = \"\\U0001F99D\";\n            \n            /// <summary>\n            /// Gets the \"Racing car\" emoji. 🏎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>racing_car</c>\n            /// </remarks>\n            public const string RacingCar = \"\\U0001F3CE\";\n            \n            /// <summary>\n            /// Gets the \"Radio\" emoji. 📻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>radio</c>\n            /// </remarks>\n            public const string Radio = \"\\U0001F4FB\";\n            \n            /// <summary>\n            /// Gets the \"Radioactive\" emoji. ☢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>radioactive</c>\n            /// </remarks>\n            public const string Radioactive = \"\\U00002622\";\n            \n            /// <summary>\n            /// Gets the \"Radio button\" emoji. 🔘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>radio_button</c>\n            /// </remarks>\n            public const string RadioButton = \"\\U0001F518\";\n            \n            /// <summary>\n            /// Gets the \"Railway car\" emoji. 🚃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>railway_car</c>\n            /// </remarks>\n            public const string RailwayCar = \"\\U0001F683\";\n            \n            /// <summary>\n            /// Gets the \"Railway track\" emoji. 🛤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>railway_track</c>\n            /// </remarks>\n            public const string RailwayTrack = \"\\U0001F6E4\";\n            \n            /// <summary>\n            /// Gets the \"Rainbow\" emoji. 🌈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rainbow</c>\n            /// </remarks>\n            public const string Rainbow = \"\\U0001F308\";\n            \n            /// <summary>\n            /// Gets the \"Raised back of hand\" emoji. 🤚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>raised_back_of_hand</c>\n            /// </remarks>\n            public const string RaisedBackOfHand = \"\\U0001F91A\";\n            \n            /// <summary>\n            /// Gets the \"Raised fist\" emoji. ✊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>raised_fist</c>\n            /// </remarks>\n            public const string RaisedFist = \"\\U0000270A\";\n            \n            /// <summary>\n            /// Gets the \"Raised hand\" emoji. ✋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>raised_hand</c>\n            /// </remarks>\n            public const string RaisedHand = \"\\U0000270B\";\n            \n            /// <summary>\n            /// Gets the \"Raising hands\" emoji. 🙌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>raising_hands</c>\n            /// </remarks>\n            public const string RaisingHands = \"\\U0001F64C\";\n            \n            /// <summary>\n            /// Gets the \"Ram\" emoji. 🐏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ram</c>\n            /// </remarks>\n            public const string Ram = \"\\U0001F40F\";\n            \n            /// <summary>\n            /// Gets the \"Rat\" emoji. 🐀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rat</c>\n            /// </remarks>\n            public const string Rat = \"\\U0001F400\";\n            \n            /// <summary>\n            /// Gets the \"Razor\" emoji. 🪒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>razor</c>\n            /// </remarks>\n            public const string Razor = \"\\U0001FA92\";\n            \n            /// <summary>\n            /// Gets the \"Receipt\" emoji. 🧾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>receipt</c>\n            /// </remarks>\n            public const string Receipt = \"\\U0001F9FE\";\n            \n            /// <summary>\n            /// Gets the \"Record button\" emoji. ⏺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>record_button</c>\n            /// </remarks>\n            public const string RecordButton = \"\\U000023FA\";\n            \n            /// <summary>\n            /// Gets the \"Recycling symbol\" emoji. ♻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>recycling_symbol</c>\n            /// </remarks>\n            public const string RecyclingSymbol = \"\\U0000267B\";\n            \n            /// <summary>\n            /// Gets the \"Red apple\" emoji. 🍎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_apple</c>\n            /// </remarks>\n            public const string RedApple = \"\\U0001F34E\";\n            \n            /// <summary>\n            /// Gets the \"Red circle\" emoji. 🔴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_circle</c>\n            /// </remarks>\n            public const string RedCircle = \"\\U0001F534\";\n            \n            /// <summary>\n            /// Gets the \"Red envelope\" emoji. 🧧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_envelope</c>\n            /// </remarks>\n            public const string RedEnvelope = \"\\U0001F9E7\";\n            \n            /// <summary>\n            /// Gets the \"Red exclamation mark\" emoji. ❗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_exclamation_mark</c>\n            /// </remarks>\n            public const string RedExclamationMark = \"\\U00002757\";\n            \n            /// <summary>\n            /// Gets the \"Red hair\" emoji. 🦰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_hair</c>\n            /// </remarks>\n            public const string RedHair = \"\\U0001F9B0\";\n            \n            /// <summary>\n            /// Gets the \"Red heart\" emoji. ❤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_heart</c>\n            /// </remarks>\n            public const string RedHeart = \"\\U00002764\";\n            \n            /// <summary>\n            /// Gets the \"Red paper lantern\" emoji. 🏮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_paper_lantern</c>\n            /// </remarks>\n            public const string RedPaperLantern = \"\\U0001F3EE\";\n            \n            /// <summary>\n            /// Gets the \"Red question mark\" emoji. ❓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_question_mark</c>\n            /// </remarks>\n            public const string RedQuestionMark = \"\\U00002753\";\n            \n            /// <summary>\n            /// Gets the \"Red square\" emoji. 🟥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_square</c>\n            /// </remarks>\n            public const string RedSquare = \"\\U0001F7E5\";\n            \n            /// <summary>\n            /// Gets the \"Red triangle pointed down\" emoji. 🔻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_triangle_pointed_down</c>\n            /// </remarks>\n            public const string RedTrianglePointedDown = \"\\U0001F53B\";\n            \n            /// <summary>\n            /// Gets the \"Red triangle pointed up\" emoji. 🔺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>red_triangle_pointed_up</c>\n            /// </remarks>\n            public const string RedTrianglePointedUp = \"\\U0001F53A\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator A\" emoji. 🇦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_a</c>\n            /// </remarks>\n            public const string RegionalIndicatorA = \"\\U0001F1E6\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator B\" emoji. 🇧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_b</c>\n            /// </remarks>\n            public const string RegionalIndicatorB = \"\\U0001F1E7\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator C\" emoji. 🇨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_c</c>\n            /// </remarks>\n            public const string RegionalIndicatorC = \"\\U0001F1E8\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator D\" emoji. 🇩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_d</c>\n            /// </remarks>\n            public const string RegionalIndicatorD = \"\\U0001F1E9\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator E\" emoji. 🇪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_e</c>\n            /// </remarks>\n            public const string RegionalIndicatorE = \"\\U0001F1EA\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator F\" emoji. 🇫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_f</c>\n            /// </remarks>\n            public const string RegionalIndicatorF = \"\\U0001F1EB\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator G\" emoji. 🇬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_g</c>\n            /// </remarks>\n            public const string RegionalIndicatorG = \"\\U0001F1EC\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator H\" emoji. 🇭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_h</c>\n            /// </remarks>\n            public const string RegionalIndicatorH = \"\\U0001F1ED\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator I\" emoji. 🇮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_i</c>\n            /// </remarks>\n            public const string RegionalIndicatorI = \"\\U0001F1EE\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator J\" emoji. 🇯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_j</c>\n            /// </remarks>\n            public const string RegionalIndicatorJ = \"\\U0001F1EF\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator K\" emoji. 🇰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_k</c>\n            /// </remarks>\n            public const string RegionalIndicatorK = \"\\U0001F1F0\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator L\" emoji. 🇱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_l</c>\n            /// </remarks>\n            public const string RegionalIndicatorL = \"\\U0001F1F1\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator M\" emoji. 🇲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_m</c>\n            /// </remarks>\n            public const string RegionalIndicatorM = \"\\U0001F1F2\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator N\" emoji. 🇳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_n</c>\n            /// </remarks>\n            public const string RegionalIndicatorN = \"\\U0001F1F3\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator O\" emoji. 🇴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_o</c>\n            /// </remarks>\n            public const string RegionalIndicatorO = \"\\U0001F1F4\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator P\" emoji. 🇵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_p</c>\n            /// </remarks>\n            public const string RegionalIndicatorP = \"\\U0001F1F5\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator Q\" emoji. 🇶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_q</c>\n            /// </remarks>\n            public const string RegionalIndicatorQ = \"\\U0001F1F6\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator R\" emoji. 🇷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_r</c>\n            /// </remarks>\n            public const string RegionalIndicatorR = \"\\U0001F1F7\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator S\" emoji. 🇸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_s</c>\n            /// </remarks>\n            public const string RegionalIndicatorS = \"\\U0001F1F8\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator T\" emoji. 🇹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_t</c>\n            /// </remarks>\n            public const string RegionalIndicatorT = \"\\U0001F1F9\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator U\" emoji. 🇺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_u</c>\n            /// </remarks>\n            public const string RegionalIndicatorU = \"\\U0001F1FA\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator V\" emoji. 🇻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_v</c>\n            /// </remarks>\n            public const string RegionalIndicatorV = \"\\U0001F1FB\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator W\" emoji. 🇼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_w</c>\n            /// </remarks>\n            public const string RegionalIndicatorW = \"\\U0001F1FC\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator X\" emoji. 🇽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_x</c>\n            /// </remarks>\n            public const string RegionalIndicatorX = \"\\U0001F1FD\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator Y\" emoji. 🇾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_y</c>\n            /// </remarks>\n            public const string RegionalIndicatorY = \"\\U0001F1FE\";\n            \n            /// <summary>\n            /// Gets the \"Regional indicator Z\" emoji. 🇿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>regional_indicator_z</c>\n            /// </remarks>\n            public const string RegionalIndicatorZ = \"\\U0001F1FF\";\n            \n            /// <summary>\n            /// Gets the \"Registered\" emoji. ®\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>registered</c>\n            /// </remarks>\n            public const string Registered = \"\\U000000AE\";\n            \n            /// <summary>\n            /// Gets the \"Relieved face\" emoji. 😌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>relieved_face</c>\n            /// </remarks>\n            public const string RelievedFace = \"\\U0001F60C\";\n            \n            /// <summary>\n            /// Gets the \"Reminder ribbon\" emoji. 🎗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>reminder_ribbon</c>\n            /// </remarks>\n            public const string ReminderRibbon = \"\\U0001F397\";\n            \n            /// <summary>\n            /// Gets the \"Repeat button\" emoji. 🔁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>repeat_button</c>\n            /// </remarks>\n            public const string RepeatButton = \"\\U0001F501\";\n            \n            /// <summary>\n            /// Gets the \"Repeat single button\" emoji. 🔂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>repeat_single_button</c>\n            /// </remarks>\n            public const string RepeatSingleButton = \"\\U0001F502\";\n            \n            /// <summary>\n            /// Gets the \"Rescue worker’s helmet\" emoji. ⛑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rescue_workers_helmet</c>\n            /// </remarks>\n            public const string RescueWorkersHelmet = \"\\U000026D1\";\n            \n            /// <summary>\n            /// Gets the \"Restroom\" emoji. 🚻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>restroom</c>\n            /// </remarks>\n            public const string Restroom = \"\\U0001F6BB\";\n            \n            /// <summary>\n            /// Gets the \"Reverse button\" emoji. ◀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>reverse_button</c>\n            /// </remarks>\n            public const string ReverseButton = \"\\U000025C0\";\n            \n            /// <summary>\n            /// Gets the \"Revolving hearts\" emoji. 💞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>revolving_hearts</c>\n            /// </remarks>\n            public const string RevolvingHearts = \"\\U0001F49E\";\n            \n            /// <summary>\n            /// Gets the \"Rhinoceros\" emoji. 🦏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rhinoceros</c>\n            /// </remarks>\n            public const string Rhinoceros = \"\\U0001F98F\";\n            \n            /// <summary>\n            /// Gets the \"Ribbon\" emoji. 🎀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ribbon</c>\n            /// </remarks>\n            public const string Ribbon = \"\\U0001F380\";\n            \n            /// <summary>\n            /// Gets the \"Rice ball\" emoji. 🍙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rice_ball</c>\n            /// </remarks>\n            public const string RiceBall = \"\\U0001F359\";\n            \n            /// <summary>\n            /// Gets the \"Rice cracker\" emoji. 🍘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rice_cracker</c>\n            /// </remarks>\n            public const string RiceCracker = \"\\U0001F358\";\n            \n            /// <summary>\n            /// Gets the \"Right anger bubble\" emoji. 🗯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_anger_bubble</c>\n            /// </remarks>\n            public const string RightAngerBubble = \"\\U0001F5EF\";\n            \n            /// <summary>\n            /// Gets the \"Right arrow\" emoji. ➡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_arrow</c>\n            /// </remarks>\n            public const string RightArrow = \"\\U000027A1\";\n            \n            /// <summary>\n            /// Gets the \"Right arrow curving down\" emoji. ⤵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_arrow_curving_down</c>\n            /// </remarks>\n            public const string RightArrowCurvingDown = \"\\U00002935\";\n            \n            /// <summary>\n            /// Gets the \"Right arrow curving left\" emoji. ↩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_arrow_curving_left</c>\n            /// </remarks>\n            public const string RightArrowCurvingLeft = \"\\U000021A9\";\n            \n            /// <summary>\n            /// Gets the \"Right arrow curving up\" emoji. ⤴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_arrow_curving_up</c>\n            /// </remarks>\n            public const string RightArrowCurvingUp = \"\\U00002934\";\n            \n            /// <summary>\n            /// Gets the \"Right-facing fist\" emoji. 🤜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>right_facing_fist</c>\n            /// </remarks>\n            public const string RightFacingFist = \"\\U0001F91C\";\n            \n            /// <summary>\n            /// Gets the \"Rightwards hand\" emoji. 🫱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rightwards_hand</c>\n            /// </remarks>\n            public const string RightwardsHand = \"\\U0001FAF1\";\n            \n            /// <summary>\n            /// Gets the \"Rightwards pushing hand\" emoji. 🫸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rightwards_pushing_hand</c>\n            /// </remarks>\n            public const string RightwardsPushingHand = \"\\U0001FAF8\";\n            \n            /// <summary>\n            /// Gets the \"Ring\" emoji. 💍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ring</c>\n            /// </remarks>\n            public const string Ring = \"\\U0001F48D\";\n            \n            /// <summary>\n            /// Gets the \"Ring buoy\" emoji. 🛟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ring_buoy</c>\n            /// </remarks>\n            public const string RingBuoy = \"\\U0001F6DF\";\n            \n            /// <summary>\n            /// Gets the \"Ringed planet\" emoji. 🪐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ringed_planet</c>\n            /// </remarks>\n            public const string RingedPlanet = \"\\U0001FA90\";\n            \n            /// <summary>\n            /// Gets the \"Roasted sweet potato\" emoji. 🍠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>roasted_sweet_potato</c>\n            /// </remarks>\n            public const string RoastedSweetPotato = \"\\U0001F360\";\n            \n            /// <summary>\n            /// Gets the \"Robot\" emoji. 🤖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>robot</c>\n            /// </remarks>\n            public const string Robot = \"\\U0001F916\";\n            \n            /// <summary>\n            /// Gets the \"Rock\" emoji. 🪨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rock</c>\n            /// </remarks>\n            public const string Rock = \"\\U0001FAA8\";\n            \n            /// <summary>\n            /// Gets the \"Rocket\" emoji. 🚀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rocket</c>\n            /// </remarks>\n            public const string Rocket = \"\\U0001F680\";\n            \n            /// <summary>\n            /// Gets the \"Rolled-up newspaper\" emoji. 🗞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rolled_up_newspaper</c>\n            /// </remarks>\n            public const string RolledUpNewspaper = \"\\U0001F5DE\";\n            \n            /// <summary>\n            /// Gets the \"Roller coaster\" emoji. 🎢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>roller_coaster</c>\n            /// </remarks>\n            public const string RollerCoaster = \"\\U0001F3A2\";\n            \n            /// <summary>\n            /// Gets the \"Roller skate\" emoji. 🛼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>roller_skate</c>\n            /// </remarks>\n            public const string RollerSkate = \"\\U0001F6FC\";\n            \n            /// <summary>\n            /// Gets the \"Rolling on the floor laughing\" emoji. 🤣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rolling_on_the_floor_laughing</c>\n            /// </remarks>\n            public const string RollingOnTheFloorLaughing = \"\\U0001F923\";\n            \n            /// <summary>\n            /// Gets the \"Roll of paper\" emoji. 🧻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>roll_of_paper</c>\n            /// </remarks>\n            public const string RollOfPaper = \"\\U0001F9FB\";\n            \n            /// <summary>\n            /// Gets the \"Rooster\" emoji. 🐓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rooster</c>\n            /// </remarks>\n            public const string Rooster = \"\\U0001F413\";\n            \n            /// <summary>\n            /// Gets the \"Root vegetable\" emoji. 🫜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>root_vegetable</c>\n            /// </remarks>\n            public const string RootVegetable = \"\\U0001FADC\";\n            \n            /// <summary>\n            /// Gets the \"Rose\" emoji. 🌹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rose</c>\n            /// </remarks>\n            public const string Rose = \"\\U0001F339\";\n            \n            /// <summary>\n            /// Gets the \"Rosette\" emoji. 🏵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rosette</c>\n            /// </remarks>\n            public const string Rosette = \"\\U0001F3F5\";\n            \n            /// <summary>\n            /// Gets the \"Round pushpin\" emoji. 📍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>round_pushpin</c>\n            /// </remarks>\n            public const string RoundPushpin = \"\\U0001F4CD\";\n            \n            /// <summary>\n            /// Gets the \"Rugby football\" emoji. 🏉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>rugby_football</c>\n            /// </remarks>\n            public const string RugbyFootball = \"\\U0001F3C9\";\n            \n            /// <summary>\n            /// Gets the \"Running shirt\" emoji. 🎽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>running_shirt</c>\n            /// </remarks>\n            public const string RunningShirt = \"\\U0001F3BD\";\n            \n            /// <summary>\n            /// Gets the \"Running shoe\" emoji. 👟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>running_shoe</c>\n            /// </remarks>\n            public const string RunningShoe = \"\\U0001F45F\";\n            \n            /// <summary>\n            /// Gets the \"Sad but relieved face\" emoji. 😥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sad_but_relieved_face</c>\n            /// </remarks>\n            public const string SadButRelievedFace = \"\\U0001F625\";\n            \n            /// <summary>\n            /// Gets the \"Safety pin\" emoji. 🧷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>safety_pin</c>\n            /// </remarks>\n            public const string SafetyPin = \"\\U0001F9F7\";\n            \n            /// <summary>\n            /// Gets the \"Safety vest\" emoji. 🦺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>safety_vest</c>\n            /// </remarks>\n            public const string SafetyVest = \"\\U0001F9BA\";\n            \n            /// <summary>\n            /// Gets the \"Sagittarius\" emoji. ♐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sagittarius</c>\n            /// </remarks>\n            public const string Sagittarius = \"\\U00002650\";\n            \n            /// <summary>\n            /// Gets the \"Sailboat\" emoji. ⛵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sailboat</c>\n            /// </remarks>\n            public const string Sailboat = \"\\U000026F5\";\n            \n            /// <summary>\n            /// Gets the \"Sake\" emoji. 🍶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sake</c>\n            /// </remarks>\n            public const string Sake = \"\\U0001F376\";\n            \n            /// <summary>\n            /// Gets the \"Salt\" emoji. 🧂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>salt</c>\n            /// </remarks>\n            public const string Salt = \"\\U0001F9C2\";\n            \n            /// <summary>\n            /// Gets the \"Saluting face\" emoji. 🫡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>saluting_face</c>\n            /// </remarks>\n            public const string SalutingFace = \"\\U0001FAE1\";\n            \n            /// <summary>\n            /// Gets the \"Sandwich\" emoji. 🥪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sandwich</c>\n            /// </remarks>\n            public const string Sandwich = \"\\U0001F96A\";\n            \n            /// <summary>\n            /// Gets the \"Santa Claus\" emoji. 🎅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>santa_claus</c>\n            /// </remarks>\n            public const string SantaClaus = \"\\U0001F385\";\n            \n            /// <summary>\n            /// Gets the \"Sari\" emoji. 🥻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sari</c>\n            /// </remarks>\n            public const string Sari = \"\\U0001F97B\";\n            \n            /// <summary>\n            /// Gets the \"Satellite\" emoji. 🛰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>satellite</c>\n            /// </remarks>\n            public const string Satellite = \"\\U0001F6F0\";\n            \n            /// <summary>\n            /// Gets the \"Satellite antenna\" emoji. 📡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>satellite_antenna</c>\n            /// </remarks>\n            public const string SatelliteAntenna = \"\\U0001F4E1\";\n            \n            /// <summary>\n            /// Gets the \"Sauropod\" emoji. 🦕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sauropod</c>\n            /// </remarks>\n            public const string Sauropod = \"\\U0001F995\";\n            \n            /// <summary>\n            /// Gets the \"Saxophone\" emoji. 🎷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>saxophone</c>\n            /// </remarks>\n            public const string Saxophone = \"\\U0001F3B7\";\n            \n            /// <summary>\n            /// Gets the \"Scarf\" emoji. 🧣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>scarf</c>\n            /// </remarks>\n            public const string Scarf = \"\\U0001F9E3\";\n            \n            /// <summary>\n            /// Gets the \"School\" emoji. 🏫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>school</c>\n            /// </remarks>\n            public const string School = \"\\U0001F3EB\";\n            \n            /// <summary>\n            /// Gets the \"Scissors\" emoji. ✂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>scissors</c>\n            /// </remarks>\n            public const string Scissors = \"\\U00002702\";\n            \n            /// <summary>\n            /// Gets the \"Scorpio\" emoji. ♏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>scorpio</c>\n            /// </remarks>\n            public const string Scorpio = \"\\U0000264F\";\n            \n            /// <summary>\n            /// Gets the \"Scorpion\" emoji. 🦂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>scorpion</c>\n            /// </remarks>\n            public const string Scorpion = \"\\U0001F982\";\n            \n            /// <summary>\n            /// Gets the \"Screwdriver\" emoji. 🪛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>screwdriver</c>\n            /// </remarks>\n            public const string Screwdriver = \"\\U0001FA9B\";\n            \n            /// <summary>\n            /// Gets the \"Scroll\" emoji. 📜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>scroll</c>\n            /// </remarks>\n            public const string Scroll = \"\\U0001F4DC\";\n            \n            /// <summary>\n            /// Gets the \"Seal\" emoji. 🦭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>seal</c>\n            /// </remarks>\n            public const string Seal = \"\\U0001F9AD\";\n            \n            /// <summary>\n            /// Gets the \"Seat\" emoji. 💺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>seat</c>\n            /// </remarks>\n            public const string Seat = \"\\U0001F4BA\";\n            \n            /// <summary>\n            /// Gets the \"2nd place medal\" emoji. 🥈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>2nd_place_medal</c>\n            /// </remarks>\n            public const string SecondPlaceMedal = \"\\U0001F948\";\n            \n            /// <summary>\n            /// Gets the \"Seedling\" emoji. 🌱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>seedling</c>\n            /// </remarks>\n            public const string Seedling = \"\\U0001F331\";\n            \n            /// <summary>\n            /// Gets the \"See-no-evil monkey\" emoji. 🙈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>see_no_evil_monkey</c>\n            /// </remarks>\n            public const string SeeNoEvilMonkey = \"\\U0001F648\";\n            \n            /// <summary>\n            /// Gets the \"Selfie\" emoji. 🤳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>selfie</c>\n            /// </remarks>\n            public const string Selfie = \"\\U0001F933\";\n            \n            /// <summary>\n            /// Gets the \"Seven o’clock\" emoji. 🕖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>seven_o_clock</c>\n            /// </remarks>\n            public const string SevenOClock = \"\\U0001F556\";\n            \n            /// <summary>\n            /// Gets the \"Seven-thirty\" emoji. 🕢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>seven_thirty</c>\n            /// </remarks>\n            public const string SevenThirty = \"\\U0001F562\";\n            \n            /// <summary>\n            /// Gets the \"Sewing needle\" emoji. 🪡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sewing_needle</c>\n            /// </remarks>\n            public const string SewingNeedle = \"\\U0001FAA1\";\n            \n            /// <summary>\n            /// Gets the \"Shaking face\" emoji. 🫨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shaking_face</c>\n            /// </remarks>\n            public const string ShakingFace = \"\\U0001FAE8\";\n            \n            /// <summary>\n            /// Gets the \"Shallow pan of food\" emoji. 🥘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shallow_pan_of_food</c>\n            /// </remarks>\n            public const string ShallowPanOfFood = \"\\U0001F958\";\n            \n            /// <summary>\n            /// Gets the \"Shamrock\" emoji. ☘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shamrock</c>\n            /// </remarks>\n            public const string Shamrock = \"\\U00002618\";\n            \n            /// <summary>\n            /// Gets the \"Shark\" emoji. 🦈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shark</c>\n            /// </remarks>\n            public const string Shark = \"\\U0001F988\";\n            \n            /// <summary>\n            /// Gets the \"Shaved ice\" emoji. 🍧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shaved_ice</c>\n            /// </remarks>\n            public const string ShavedIce = \"\\U0001F367\";\n            \n            /// <summary>\n            /// Gets the \"Sheaf of rice\" emoji. 🌾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sheaf_of_rice</c>\n            /// </remarks>\n            public const string SheafOfRice = \"\\U0001F33E\";\n            \n            /// <summary>\n            /// Gets the \"Shield\" emoji. 🛡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shield</c>\n            /// </remarks>\n            public const string Shield = \"\\U0001F6E1\";\n            \n            /// <summary>\n            /// Gets the \"Shinto shrine\" emoji. ⛩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shinto_shrine</c>\n            /// </remarks>\n            public const string ShintoShrine = \"\\U000026E9\";\n            \n            /// <summary>\n            /// Gets the \"Ship\" emoji. 🚢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ship</c>\n            /// </remarks>\n            public const string Ship = \"\\U0001F6A2\";\n            \n            /// <summary>\n            /// Gets the \"Shooting star\" emoji. 🌠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shooting_star</c>\n            /// </remarks>\n            public const string ShootingStar = \"\\U0001F320\";\n            \n            /// <summary>\n            /// Gets the \"Shopping bags\" emoji. 🛍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shopping_bags</c>\n            /// </remarks>\n            public const string ShoppingBags = \"\\U0001F6CD\";\n            \n            /// <summary>\n            /// Gets the \"Shopping cart\" emoji. 🛒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shopping_cart</c>\n            /// </remarks>\n            public const string ShoppingCart = \"\\U0001F6D2\";\n            \n            /// <summary>\n            /// Gets the \"Shortcake\" emoji. 🍰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shortcake</c>\n            /// </remarks>\n            public const string Shortcake = \"\\U0001F370\";\n            \n            /// <summary>\n            /// Gets the \"Shorts\" emoji. 🩳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shorts</c>\n            /// </remarks>\n            public const string Shorts = \"\\U0001FA73\";\n            \n            /// <summary>\n            /// Gets the \"Shovel\" emoji. 🪏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shovel</c>\n            /// </remarks>\n            public const string Shovel = \"\\U0001FA8F\";\n            \n            /// <summary>\n            /// Gets the \"Shower\" emoji. 🚿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shower</c>\n            /// </remarks>\n            public const string Shower = \"\\U0001F6BF\";\n            \n            /// <summary>\n            /// Gets the \"Shrimp\" emoji. 🦐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shrimp</c>\n            /// </remarks>\n            public const string Shrimp = \"\\U0001F990\";\n            \n            /// <summary>\n            /// Gets the \"Shuffle tracks button\" emoji. 🔀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shuffle_tracks_button</c>\n            /// </remarks>\n            public const string ShuffleTracksButton = \"\\U0001F500\";\n            \n            /// <summary>\n            /// Gets the \"Shushing face\" emoji. 🤫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>shushing_face</c>\n            /// </remarks>\n            public const string ShushingFace = \"\\U0001F92B\";\n            \n            /// <summary>\n            /// Gets the \"Sign of the horns\" emoji. 🤘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sign_of_the_horns</c>\n            /// </remarks>\n            public const string SignOfTheHorns = \"\\U0001F918\";\n            \n            /// <summary>\n            /// Gets the \"Six o’clock\" emoji. 🕕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>six_o_clock</c>\n            /// </remarks>\n            public const string SixOClock = \"\\U0001F555\";\n            \n            /// <summary>\n            /// Gets the \"Six-thirty\" emoji. 🕡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>six_thirty</c>\n            /// </remarks>\n            public const string SixThirty = \"\\U0001F561\";\n            \n            /// <summary>\n            /// Gets the \"Skateboard\" emoji. 🛹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skateboard</c>\n            /// </remarks>\n            public const string Skateboard = \"\\U0001F6F9\";\n            \n            /// <summary>\n            /// Gets the \"Skier\" emoji. ⛷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skier</c>\n            /// </remarks>\n            public const string Skier = \"\\U000026F7\";\n            \n            /// <summary>\n            /// Gets the \"Skis\" emoji. 🎿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skis</c>\n            /// </remarks>\n            public const string Skis = \"\\U0001F3BF\";\n            \n            /// <summary>\n            /// Gets the \"Skull\" emoji. 💀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skull</c>\n            /// </remarks>\n            public const string Skull = \"\\U0001F480\";\n            \n            /// <summary>\n            /// Gets the \"Skull and crossbones\" emoji. ☠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skull_and_crossbones</c>\n            /// </remarks>\n            public const string SkullAndCrossbones = \"\\U00002620\";\n            \n            /// <summary>\n            /// Gets the \"Skunk\" emoji. 🦨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>skunk</c>\n            /// </remarks>\n            public const string Skunk = \"\\U0001F9A8\";\n            \n            /// <summary>\n            /// Gets the \"Sled\" emoji. 🛷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sled</c>\n            /// </remarks>\n            public const string Sled = \"\\U0001F6F7\";\n            \n            /// <summary>\n            /// Gets the \"Sleeping face\" emoji. 😴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sleeping_face</c>\n            /// </remarks>\n            public const string SleepingFace = \"\\U0001F634\";\n            \n            /// <summary>\n            /// Gets the \"Sleepy face\" emoji. 😪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sleepy_face</c>\n            /// </remarks>\n            public const string SleepyFace = \"\\U0001F62A\";\n            \n            /// <summary>\n            /// Gets the \"Slightly frowning face\" emoji. 🙁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>slightly_frowning_face</c>\n            /// </remarks>\n            public const string SlightlyFrowningFace = \"\\U0001F641\";\n            \n            /// <summary>\n            /// Gets the \"Slightly smiling face\" emoji. 🙂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>slightly_smiling_face</c>\n            /// </remarks>\n            public const string SlightlySmilingFace = \"\\U0001F642\";\n            \n            /// <summary>\n            /// Gets the \"Sloth\" emoji. 🦥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sloth</c>\n            /// </remarks>\n            public const string Sloth = \"\\U0001F9A5\";\n            \n            /// <summary>\n            /// Gets the \"Slot machine\" emoji. 🎰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>slot_machine</c>\n            /// </remarks>\n            public const string SlotMachine = \"\\U0001F3B0\";\n            \n            /// <summary>\n            /// Gets the \"Small airplane\" emoji. 🛩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>small_airplane</c>\n            /// </remarks>\n            public const string SmallAirplane = \"\\U0001F6E9\";\n            \n            /// <summary>\n            /// Gets the \"Small blue diamond\" emoji. 🔹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>small_blue_diamond</c>\n            /// </remarks>\n            public const string SmallBlueDiamond = \"\\U0001F539\";\n            \n            /// <summary>\n            /// Gets the \"Small orange diamond\" emoji. 🔸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>small_orange_diamond</c>\n            /// </remarks>\n            public const string SmallOrangeDiamond = \"\\U0001F538\";\n            \n            /// <summary>\n            /// Gets the \"Smiling cat with heart-eyes\" emoji. 😻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_cat_with_heart_eyes</c>\n            /// </remarks>\n            public const string SmilingCatWithHeartEyes = \"\\U0001F63B\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face\" emoji. ☺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face</c>\n            /// </remarks>\n            public const string SmilingFace = \"\\U0000263A\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with halo\" emoji. 😇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_halo</c>\n            /// </remarks>\n            public const string SmilingFaceWithHalo = \"\\U0001F607\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with heart-eyes\" emoji. 😍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_heart_eyes</c>\n            /// </remarks>\n            public const string SmilingFaceWithHeartEyes = \"\\U0001F60D\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with hearts\" emoji. 🥰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_hearts</c>\n            /// </remarks>\n            public const string SmilingFaceWithHearts = \"\\U0001F970\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with horns\" emoji. 😈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_horns</c>\n            /// </remarks>\n            public const string SmilingFaceWithHorns = \"\\U0001F608\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with open hands\" emoji. 🤗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_open_hands</c>\n            /// </remarks>\n            public const string SmilingFaceWithOpenHands = \"\\U0001F917\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with smiling eyes\" emoji. 😊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_smiling_eyes</c>\n            /// </remarks>\n            public const string SmilingFaceWithSmilingEyes = \"\\U0001F60A\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with sunglasses\" emoji. 😎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_sunglasses</c>\n            /// </remarks>\n            public const string SmilingFaceWithSunglasses = \"\\U0001F60E\";\n            \n            /// <summary>\n            /// Gets the \"Smiling face with tear\" emoji. 🥲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smiling_face_with_tear</c>\n            /// </remarks>\n            public const string SmilingFaceWithTear = \"\\U0001F972\";\n            \n            /// <summary>\n            /// Gets the \"Smirking face\" emoji. 😏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>smirking_face</c>\n            /// </remarks>\n            public const string SmirkingFace = \"\\U0001F60F\";\n            \n            /// <summary>\n            /// Gets the \"Snail\" emoji. 🐌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snail</c>\n            /// </remarks>\n            public const string Snail = \"\\U0001F40C\";\n            \n            /// <summary>\n            /// Gets the \"Snake\" emoji. 🐍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snake</c>\n            /// </remarks>\n            public const string Snake = \"\\U0001F40D\";\n            \n            /// <summary>\n            /// Gets the \"Sneezing face\" emoji. 🤧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sneezing_face</c>\n            /// </remarks>\n            public const string SneezingFace = \"\\U0001F927\";\n            \n            /// <summary>\n            /// Gets the \"Snowboarder\" emoji. 🏂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snowboarder</c>\n            /// </remarks>\n            public const string Snowboarder = \"\\U0001F3C2\";\n            \n            /// <summary>\n            /// Gets the \"Snow-capped mountain\" emoji. 🏔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snow_capped_mountain</c>\n            /// </remarks>\n            public const string SnowCappedMountain = \"\\U0001F3D4\";\n            \n            /// <summary>\n            /// Gets the \"Snowflake\" emoji. ❄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snowflake</c>\n            /// </remarks>\n            public const string Snowflake = \"\\U00002744\";\n            \n            /// <summary>\n            /// Gets the \"Snowman\" emoji. ☃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snowman</c>\n            /// </remarks>\n            public const string Snowman = \"\\U00002603\";\n            \n            /// <summary>\n            /// Gets the \"Snowman without snow\" emoji. ⛄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>snowman_without_snow</c>\n            /// </remarks>\n            public const string SnowmanWithoutSnow = \"\\U000026C4\";\n            \n            /// <summary>\n            /// Gets the \"Soap\" emoji. 🧼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>soap</c>\n            /// </remarks>\n            public const string Soap = \"\\U0001F9FC\";\n            \n            /// <summary>\n            /// Gets the \"Soccer ball\" emoji. ⚽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>soccer_ball</c>\n            /// </remarks>\n            public const string SoccerBall = \"\\U000026BD\";\n            \n            /// <summary>\n            /// Gets the \"Socks\" emoji. 🧦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>socks</c>\n            /// </remarks>\n            public const string Socks = \"\\U0001F9E6\";\n            \n            /// <summary>\n            /// Gets the \"Softball\" emoji. 🥎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>softball</c>\n            /// </remarks>\n            public const string Softball = \"\\U0001F94E\";\n            \n            /// <summary>\n            /// Gets the \"Soft ice cream\" emoji. 🍦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>soft_ice_cream</c>\n            /// </remarks>\n            public const string SoftIceCream = \"\\U0001F366\";\n            \n            /// <summary>\n            /// Gets the \"SOON arrow\" emoji. 🔜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>soon_arrow</c>\n            /// </remarks>\n            public const string SoonArrow = \"\\U0001F51C\";\n            \n            /// <summary>\n            /// Gets the \"SOS button\" emoji. 🆘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sos_button</c>\n            /// </remarks>\n            public const string SosButton = \"\\U0001F198\";\n            \n            /// <summary>\n            /// Gets the \"Spade suit\" emoji. ♠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spade_suit</c>\n            /// </remarks>\n            public const string SpadeSuit = \"\\U00002660\";\n            \n            /// <summary>\n            /// Gets the \"Spaghetti\" emoji. 🍝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spaghetti</c>\n            /// </remarks>\n            public const string Spaghetti = \"\\U0001F35D\";\n            \n            /// <summary>\n            /// Gets the \"Sparkle\" emoji. ❇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sparkle</c>\n            /// </remarks>\n            public const string Sparkle = \"\\U00002747\";\n            \n            /// <summary>\n            /// Gets the \"Sparkler\" emoji. 🎇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sparkler</c>\n            /// </remarks>\n            public const string Sparkler = \"\\U0001F387\";\n            \n            /// <summary>\n            /// Gets the \"Sparkles\" emoji. ✨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sparkles</c>\n            /// </remarks>\n            public const string Sparkles = \"\\U00002728\";\n            \n            /// <summary>\n            /// Gets the \"Sparkling heart\" emoji. 💖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sparkling_heart</c>\n            /// </remarks>\n            public const string SparklingHeart = \"\\U0001F496\";\n            \n            /// <summary>\n            /// Gets the \"Speaker high volume\" emoji. 🔊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speaker_high_volume</c>\n            /// </remarks>\n            public const string SpeakerHighVolume = \"\\U0001F50A\";\n            \n            /// <summary>\n            /// Gets the \"Speaker low volume\" emoji. 🔈\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speaker_low_volume</c>\n            /// </remarks>\n            public const string SpeakerLowVolume = \"\\U0001F508\";\n            \n            /// <summary>\n            /// Gets the \"Speaker medium volume\" emoji. 🔉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speaker_medium_volume</c>\n            /// </remarks>\n            public const string SpeakerMediumVolume = \"\\U0001F509\";\n            \n            /// <summary>\n            /// Gets the \"Speaking head\" emoji. 🗣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speaking_head</c>\n            /// </remarks>\n            public const string SpeakingHead = \"\\U0001F5E3\";\n            \n            /// <summary>\n            /// Gets the \"Speak-no-evil monkey\" emoji. 🙊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speak_no_evil_monkey</c>\n            /// </remarks>\n            public const string SpeakNoEvilMonkey = \"\\U0001F64A\";\n            \n            /// <summary>\n            /// Gets the \"Speech balloon\" emoji. 💬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speech_balloon</c>\n            /// </remarks>\n            public const string SpeechBalloon = \"\\U0001F4AC\";\n            \n            /// <summary>\n            /// Gets the \"Speedboat\" emoji. 🚤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>speedboat</c>\n            /// </remarks>\n            public const string Speedboat = \"\\U0001F6A4\";\n            \n            /// <summary>\n            /// Gets the \"Spider\" emoji. 🕷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spider</c>\n            /// </remarks>\n            public const string Spider = \"\\U0001F577\";\n            \n            /// <summary>\n            /// Gets the \"Spider web\" emoji. 🕸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spider_web</c>\n            /// </remarks>\n            public const string SpiderWeb = \"\\U0001F578\";\n            \n            /// <summary>\n            /// Gets the \"Spiral calendar\" emoji. 🗓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spiral_calendar</c>\n            /// </remarks>\n            public const string SpiralCalendar = \"\\U0001F5D3\";\n            \n            /// <summary>\n            /// Gets the \"Spiral notepad\" emoji. 🗒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spiral_notepad</c>\n            /// </remarks>\n            public const string SpiralNotepad = \"\\U0001F5D2\";\n            \n            /// <summary>\n            /// Gets the \"Spiral shell\" emoji. 🐚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spiral_shell</c>\n            /// </remarks>\n            public const string SpiralShell = \"\\U0001F41A\";\n            \n            /// <summary>\n            /// Gets the \"Splatter\" emoji. 🫟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>splatter</c>\n            /// </remarks>\n            public const string Splatter = \"\\U0001FADF\";\n            \n            /// <summary>\n            /// Gets the \"Sponge\" emoji. 🧽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sponge</c>\n            /// </remarks>\n            public const string Sponge = \"\\U0001F9FD\";\n            \n            /// <summary>\n            /// Gets the \"Spoon\" emoji. 🥄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spoon</c>\n            /// </remarks>\n            public const string Spoon = \"\\U0001F944\";\n            \n            /// <summary>\n            /// Gets the \"Sports medal\" emoji. 🏅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sports_medal</c>\n            /// </remarks>\n            public const string SportsMedal = \"\\U0001F3C5\";\n            \n            /// <summary>\n            /// Gets the \"Sport utility vehicle\" emoji. 🚙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sport_utility_vehicle</c>\n            /// </remarks>\n            public const string SportUtilityVehicle = \"\\U0001F699\";\n            \n            /// <summary>\n            /// Gets the \"Spouting whale\" emoji. 🐳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>spouting_whale</c>\n            /// </remarks>\n            public const string SpoutingWhale = \"\\U0001F433\";\n            \n            /// <summary>\n            /// Gets the \"Squid\" emoji. 🦑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>squid</c>\n            /// </remarks>\n            public const string Squid = \"\\U0001F991\";\n            \n            /// <summary>\n            /// Gets the \"Squinting face with tongue\" emoji. 😝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>squinting_face_with_tongue</c>\n            /// </remarks>\n            public const string SquintingFaceWithTongue = \"\\U0001F61D\";\n            \n            /// <summary>\n            /// Gets the \"Stadium\" emoji. 🏟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stadium</c>\n            /// </remarks>\n            public const string Stadium = \"\\U0001F3DF\";\n            \n            /// <summary>\n            /// Gets the \"Star\" emoji. ⭐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>star</c>\n            /// </remarks>\n            public const string Star = \"\\U00002B50\";\n            \n            /// <summary>\n            /// Gets the \"Star and crescent\" emoji. ☪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>star_and_crescent</c>\n            /// </remarks>\n            public const string StarAndCrescent = \"\\U0000262A\";\n            \n            /// <summary>\n            /// Gets the \"Star of David\" emoji. ✡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>star_of_david</c>\n            /// </remarks>\n            public const string StarOfDavid = \"\\U00002721\";\n            \n            /// <summary>\n            /// Gets the \"Star-struck\" emoji. 🤩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>star_struck</c>\n            /// </remarks>\n            public const string StarStruck = \"\\U0001F929\";\n            \n            /// <summary>\n            /// Gets the \"Station\" emoji. 🚉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>station</c>\n            /// </remarks>\n            public const string Station = \"\\U0001F689\";\n            \n            /// <summary>\n            /// Gets the \"Statue of Liberty\" emoji. 🗽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>statue_of_liberty</c>\n            /// </remarks>\n            public const string StatueOfLiberty = \"\\U0001F5FD\";\n            \n            /// <summary>\n            /// Gets the \"Steaming bowl\" emoji. 🍜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>steaming_bowl</c>\n            /// </remarks>\n            public const string SteamingBowl = \"\\U0001F35C\";\n            \n            /// <summary>\n            /// Gets the \"Stethoscope\" emoji. 🩺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stethoscope</c>\n            /// </remarks>\n            public const string Stethoscope = \"\\U0001FA7A\";\n            \n            /// <summary>\n            /// Gets the \"Stop button\" emoji. ⏹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stop_button</c>\n            /// </remarks>\n            public const string StopButton = \"\\U000023F9\";\n            \n            /// <summary>\n            /// Gets the \"Stop sign\" emoji. 🛑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stop_sign</c>\n            /// </remarks>\n            public const string StopSign = \"\\U0001F6D1\";\n            \n            /// <summary>\n            /// Gets the \"Stopwatch\" emoji. ⏱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stopwatch</c>\n            /// </remarks>\n            public const string Stopwatch = \"\\U000023F1\";\n            \n            /// <summary>\n            /// Gets the \"Straight ruler\" emoji. 📏\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>straight_ruler</c>\n            /// </remarks>\n            public const string StraightRuler = \"\\U0001F4CF\";\n            \n            /// <summary>\n            /// Gets the \"Strawberry\" emoji. 🍓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>strawberry</c>\n            /// </remarks>\n            public const string Strawberry = \"\\U0001F353\";\n            \n            /// <summary>\n            /// Gets the \"Studio microphone\" emoji. 🎙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>studio_microphone</c>\n            /// </remarks>\n            public const string StudioMicrophone = \"\\U0001F399\";\n            \n            /// <summary>\n            /// Gets the \"Stuffed flatbread\" emoji. 🥙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>stuffed_flatbread</c>\n            /// </remarks>\n            public const string StuffedFlatbread = \"\\U0001F959\";\n            \n            /// <summary>\n            /// Gets the \"Sun\" emoji. ☀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun</c>\n            /// </remarks>\n            public const string Sun = \"\\U00002600\";\n            \n            /// <summary>\n            /// Gets the \"Sun behind cloud\" emoji. ⛅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun_behind_cloud</c>\n            /// </remarks>\n            public const string SunBehindCloud = \"\\U000026C5\";\n            \n            /// <summary>\n            /// Gets the \"Sun behind large cloud\" emoji. 🌥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun_behind_large_cloud</c>\n            /// </remarks>\n            public const string SunBehindLargeCloud = \"\\U0001F325\";\n            \n            /// <summary>\n            /// Gets the \"Sun behind rain cloud\" emoji. 🌦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun_behind_rain_cloud</c>\n            /// </remarks>\n            public const string SunBehindRainCloud = \"\\U0001F326\";\n            \n            /// <summary>\n            /// Gets the \"Sun behind small cloud\" emoji. 🌤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun_behind_small_cloud</c>\n            /// </remarks>\n            public const string SunBehindSmallCloud = \"\\U0001F324\";\n            \n            /// <summary>\n            /// Gets the \"Sunflower\" emoji. 🌻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sunflower</c>\n            /// </remarks>\n            public const string Sunflower = \"\\U0001F33B\";\n            \n            /// <summary>\n            /// Gets the \"Sunglasses\" emoji. 🕶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sunglasses</c>\n            /// </remarks>\n            public const string Sunglasses = \"\\U0001F576\";\n            \n            /// <summary>\n            /// Gets the \"Sunrise\" emoji. 🌅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sunrise</c>\n            /// </remarks>\n            public const string Sunrise = \"\\U0001F305\";\n            \n            /// <summary>\n            /// Gets the \"Sunrise over mountains\" emoji. 🌄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sunrise_over_mountains</c>\n            /// </remarks>\n            public const string SunriseOverMountains = \"\\U0001F304\";\n            \n            /// <summary>\n            /// Gets the \"Sunset\" emoji. 🌇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sunset</c>\n            /// </remarks>\n            public const string Sunset = \"\\U0001F307\";\n            \n            /// <summary>\n            /// Gets the \"Sun with face\" emoji. 🌞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sun_with_face</c>\n            /// </remarks>\n            public const string SunWithFace = \"\\U0001F31E\";\n            \n            /// <summary>\n            /// Gets the \"Superhero\" emoji. 🦸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>superhero</c>\n            /// </remarks>\n            public const string Superhero = \"\\U0001F9B8\";\n            \n            /// <summary>\n            /// Gets the \"Supervillain\" emoji. 🦹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>supervillain</c>\n            /// </remarks>\n            public const string Supervillain = \"\\U0001F9B9\";\n            \n            /// <summary>\n            /// Gets the \"Sushi\" emoji. 🍣\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sushi</c>\n            /// </remarks>\n            public const string Sushi = \"\\U0001F363\";\n            \n            /// <summary>\n            /// Gets the \"Suspension railway\" emoji. 🚟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>suspension_railway</c>\n            /// </remarks>\n            public const string SuspensionRailway = \"\\U0001F69F\";\n            \n            /// <summary>\n            /// Gets the \"Swan\" emoji. 🦢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>swan</c>\n            /// </remarks>\n            public const string Swan = \"\\U0001F9A2\";\n            \n            /// <summary>\n            /// Gets the \"Sweat droplets\" emoji. 💦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>sweat_droplets</c>\n            /// </remarks>\n            public const string SweatDroplets = \"\\U0001F4A6\";\n            \n            /// <summary>\n            /// Gets the \"Synagogue\" emoji. 🕍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>synagogue</c>\n            /// </remarks>\n            public const string Synagogue = \"\\U0001F54D\";\n            \n            /// <summary>\n            /// Gets the \"Syringe\" emoji. 💉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>syringe</c>\n            /// </remarks>\n            public const string Syringe = \"\\U0001F489\";\n            \n            /// <summary>\n            /// Gets the \"Taco\" emoji. 🌮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>taco</c>\n            /// </remarks>\n            public const string Taco = \"\\U0001F32E\";\n            \n            /// <summary>\n            /// Gets the \"Takeout box\" emoji. 🥡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>takeout_box</c>\n            /// </remarks>\n            public const string TakeoutBox = \"\\U0001F961\";\n            \n            /// <summary>\n            /// Gets the \"Tamale\" emoji. 🫔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tamale</c>\n            /// </remarks>\n            public const string Tamale = \"\\U0001FAD4\";\n            \n            /// <summary>\n            /// Gets the \"Tanabata tree\" emoji. 🎋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tanabata_tree</c>\n            /// </remarks>\n            public const string TanabataTree = \"\\U0001F38B\";\n            \n            /// <summary>\n            /// Gets the \"Tangerine\" emoji. 🍊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tangerine</c>\n            /// </remarks>\n            public const string Tangerine = \"\\U0001F34A\";\n            \n            /// <summary>\n            /// Gets the \"Taurus\" emoji. ♉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>taurus</c>\n            /// </remarks>\n            public const string Taurus = \"\\U00002649\";\n            \n            /// <summary>\n            /// Gets the \"Taxi\" emoji. 🚕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>taxi</c>\n            /// </remarks>\n            public const string Taxi = \"\\U0001F695\";\n            \n            /// <summary>\n            /// Gets the \"Teacup without handle\" emoji. 🍵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>teacup_without_handle</c>\n            /// </remarks>\n            public const string TeacupWithoutHandle = \"\\U0001F375\";\n            \n            /// <summary>\n            /// Gets the \"Teapot\" emoji. 🫖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>teapot</c>\n            /// </remarks>\n            public const string Teapot = \"\\U0001FAD6\";\n            \n            /// <summary>\n            /// Gets the \"Tear-off calendar\" emoji. 📆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tear_off_calendar</c>\n            /// </remarks>\n            public const string TearOffCalendar = \"\\U0001F4C6\";\n            \n            /// <summary>\n            /// Gets the \"Teddy bear\" emoji. 🧸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>teddy_bear</c>\n            /// </remarks>\n            public const string TeddyBear = \"\\U0001F9F8\";\n            \n            /// <summary>\n            /// Gets the \"Telephone\" emoji. ☎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>telephone</c>\n            /// </remarks>\n            public const string Telephone = \"\\U0000260E\";\n            \n            /// <summary>\n            /// Gets the \"Telephone receiver\" emoji. 📞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>telephone_receiver</c>\n            /// </remarks>\n            public const string TelephoneReceiver = \"\\U0001F4DE\";\n            \n            /// <summary>\n            /// Gets the \"Telescope\" emoji. 🔭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>telescope</c>\n            /// </remarks>\n            public const string Telescope = \"\\U0001F52D\";\n            \n            /// <summary>\n            /// Gets the \"Television\" emoji. 📺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>television</c>\n            /// </remarks>\n            public const string Television = \"\\U0001F4FA\";\n            \n            /// <summary>\n            /// Gets the \"Tennis\" emoji. 🎾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tennis</c>\n            /// </remarks>\n            public const string Tennis = \"\\U0001F3BE\";\n            \n            /// <summary>\n            /// Gets the \"Ten o’clock\" emoji. 🕙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ten_o_clock</c>\n            /// </remarks>\n            public const string TenOClock = \"\\U0001F559\";\n            \n            /// <summary>\n            /// Gets the \"Tent\" emoji. ⛺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tent</c>\n            /// </remarks>\n            public const string Tent = \"\\U000026FA\";\n            \n            /// <summary>\n            /// Gets the \"Ten-thirty\" emoji. 🕥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ten_thirty</c>\n            /// </remarks>\n            public const string TenThirty = \"\\U0001F565\";\n            \n            /// <summary>\n            /// Gets the \"Test tube\" emoji. 🧪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>test_tube</c>\n            /// </remarks>\n            public const string TestTube = \"\\U0001F9EA\";\n            \n            /// <summary>\n            /// Gets the \"Thermometer\" emoji. 🌡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thermometer</c>\n            /// </remarks>\n            public const string Thermometer = \"\\U0001F321\";\n            \n            /// <summary>\n            /// Gets the \"Thinking face\" emoji. 🤔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thinking_face</c>\n            /// </remarks>\n            public const string ThinkingFace = \"\\U0001F914\";\n            \n            /// <summary>\n            /// Gets the \"3rd place medal\" emoji. 🥉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>3rd_place_medal</c>\n            /// </remarks>\n            public const string ThirdPlaceMedal = \"\\U0001F949\";\n            \n            /// <summary>\n            /// Gets the \"Thong sandal\" emoji. 🩴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thong_sandal</c>\n            /// </remarks>\n            public const string ThongSandal = \"\\U0001FA74\";\n            \n            /// <summary>\n            /// Gets the \"Thought balloon\" emoji. 💭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thought_balloon</c>\n            /// </remarks>\n            public const string ThoughtBalloon = \"\\U0001F4AD\";\n            \n            /// <summary>\n            /// Gets the \"Thread\" emoji. 🧵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thread</c>\n            /// </remarks>\n            public const string Thread = \"\\U0001F9F5\";\n            \n            /// <summary>\n            /// Gets the \"Three o’clock\" emoji. 🕒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>three_o_clock</c>\n            /// </remarks>\n            public const string ThreeOClock = \"\\U0001F552\";\n            \n            /// <summary>\n            /// Gets the \"Three-thirty\" emoji. 🕞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>three_thirty</c>\n            /// </remarks>\n            public const string ThreeThirty = \"\\U0001F55E\";\n            \n            /// <summary>\n            /// Gets the \"Thumbs down\" emoji. 👎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thumbs_down</c>\n            /// </remarks>\n            public const string ThumbsDown = \"\\U0001F44E\";\n            \n            /// <summary>\n            /// Gets the \"Thumbs up\" emoji. 👍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>thumbs_up</c>\n            /// </remarks>\n            public const string ThumbsUp = \"\\U0001F44D\";\n            \n            /// <summary>\n            /// Gets the \"Ticket\" emoji. 🎫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>ticket</c>\n            /// </remarks>\n            public const string Ticket = \"\\U0001F3AB\";\n            \n            /// <summary>\n            /// Gets the \"Tiger\" emoji. 🐅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tiger</c>\n            /// </remarks>\n            public const string Tiger = \"\\U0001F405\";\n            \n            /// <summary>\n            /// Gets the \"Tiger face\" emoji. 🐯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tiger_face</c>\n            /// </remarks>\n            public const string TigerFace = \"\\U0001F42F\";\n            \n            /// <summary>\n            /// Gets the \"Timer clock\" emoji. ⏲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>timer_clock</c>\n            /// </remarks>\n            public const string TimerClock = \"\\U000023F2\";\n            \n            /// <summary>\n            /// Gets the \"Tired face\" emoji. 😫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tired_face</c>\n            /// </remarks>\n            public const string TiredFace = \"\\U0001F62B\";\n            \n            /// <summary>\n            /// Gets the \"Toilet\" emoji. 🚽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>toilet</c>\n            /// </remarks>\n            public const string Toilet = \"\\U0001F6BD\";\n            \n            /// <summary>\n            /// Gets the \"Tokyo tower\" emoji. 🗼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tokyo_tower</c>\n            /// </remarks>\n            public const string TokyoTower = \"\\U0001F5FC\";\n            \n            /// <summary>\n            /// Gets the \"Tomato\" emoji. 🍅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tomato</c>\n            /// </remarks>\n            public const string Tomato = \"\\U0001F345\";\n            \n            /// <summary>\n            /// Gets the \"Tongue\" emoji. 👅\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tongue</c>\n            /// </remarks>\n            public const string Tongue = \"\\U0001F445\";\n            \n            /// <summary>\n            /// Gets the \"Toolbox\" emoji. 🧰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>toolbox</c>\n            /// </remarks>\n            public const string Toolbox = \"\\U0001F9F0\";\n            \n            /// <summary>\n            /// Gets the \"Tooth\" emoji. 🦷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tooth</c>\n            /// </remarks>\n            public const string Tooth = \"\\U0001F9B7\";\n            \n            /// <summary>\n            /// Gets the \"Toothbrush\" emoji. 🪥\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>toothbrush</c>\n            /// </remarks>\n            public const string Toothbrush = \"\\U0001FAA5\";\n            \n            /// <summary>\n            /// Gets the \"TOP arrow\" emoji. 🔝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>top_arrow</c>\n            /// </remarks>\n            public const string TopArrow = \"\\U0001F51D\";\n            \n            /// <summary>\n            /// Gets the \"Top hat\" emoji. 🎩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>top_hat</c>\n            /// </remarks>\n            public const string TopHat = \"\\U0001F3A9\";\n            \n            /// <summary>\n            /// Gets the \"Tornado\" emoji. 🌪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tornado</c>\n            /// </remarks>\n            public const string Tornado = \"\\U0001F32A\";\n            \n            /// <summary>\n            /// Gets the \"Trackball\" emoji. 🖲\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trackball</c>\n            /// </remarks>\n            public const string Trackball = \"\\U0001F5B2\";\n            \n            /// <summary>\n            /// Gets the \"Tractor\" emoji. 🚜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tractor</c>\n            /// </remarks>\n            public const string Tractor = \"\\U0001F69C\";\n            \n            /// <summary>\n            /// Gets the \"Trade mark\" emoji. ™\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trade_mark</c>\n            /// </remarks>\n            public const string TradeMark = \"\\U00002122\";\n            \n            /// <summary>\n            /// Gets the \"Train\" emoji. 🚆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>train</c>\n            /// </remarks>\n            public const string Train = \"\\U0001F686\";\n            \n            /// <summary>\n            /// Gets the \"Tram\" emoji. 🚊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tram</c>\n            /// </remarks>\n            public const string Tram = \"\\U0001F68A\";\n            \n            /// <summary>\n            /// Gets the \"Tram car\" emoji. 🚋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tram_car</c>\n            /// </remarks>\n            public const string TramCar = \"\\U0001F68B\";\n            \n            /// <summary>\n            /// Gets the \"Transgender symbol\" emoji. ⚧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>transgender_symbol</c>\n            /// </remarks>\n            public const string TransgenderSymbol = \"\\U000026A7\";\n            \n            /// <summary>\n            /// Gets the \"Treasure chest\" emoji. 🪎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>treasure_chest</c>\n            /// </remarks>\n            public const string TreasureChest = \"\\U0001FA8E\";\n            \n            /// <summary>\n            /// Gets the \"T-Rex\" emoji. 🦖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>t_rex</c>\n            /// </remarks>\n            public const string TRex = \"\\U0001F996\";\n            \n            /// <summary>\n            /// Gets the \"Triangular flag\" emoji. 🚩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>triangular_flag</c>\n            /// </remarks>\n            public const string TriangularFlag = \"\\U0001F6A9\";\n            \n            /// <summary>\n            /// Gets the \"Triangular ruler\" emoji. 📐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>triangular_ruler</c>\n            /// </remarks>\n            public const string TriangularRuler = \"\\U0001F4D0\";\n            \n            /// <summary>\n            /// Gets the \"Trident emblem\" emoji. 🔱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trident_emblem</c>\n            /// </remarks>\n            public const string TridentEmblem = \"\\U0001F531\";\n            \n            /// <summary>\n            /// Gets the \"Troll\" emoji. 🧌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>troll</c>\n            /// </remarks>\n            public const string Troll = \"\\U0001F9CC\";\n            \n            /// <summary>\n            /// Gets the \"Trolleybus\" emoji. 🚎\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trolleybus</c>\n            /// </remarks>\n            public const string Trolleybus = \"\\U0001F68E\";\n            \n            /// <summary>\n            /// Gets the \"Trombone\" emoji. 🪊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trombone</c>\n            /// </remarks>\n            public const string Trombone = \"\\U0001FA8A\";\n            \n            /// <summary>\n            /// Gets the \"Trophy\" emoji. 🏆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trophy</c>\n            /// </remarks>\n            public const string Trophy = \"\\U0001F3C6\";\n            \n            /// <summary>\n            /// Gets the \"Tropical drink\" emoji. 🍹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tropical_drink</c>\n            /// </remarks>\n            public const string TropicalDrink = \"\\U0001F379\";\n            \n            /// <summary>\n            /// Gets the \"Tropical fish\" emoji. 🐠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tropical_fish</c>\n            /// </remarks>\n            public const string TropicalFish = \"\\U0001F420\";\n            \n            /// <summary>\n            /// Gets the \"Trumpet\" emoji. 🎺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>trumpet</c>\n            /// </remarks>\n            public const string Trumpet = \"\\U0001F3BA\";\n            \n            /// <summary>\n            /// Gets the \"T-shirt\" emoji. 👕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>t_shirt</c>\n            /// </remarks>\n            public const string TShirt = \"\\U0001F455\";\n            \n            /// <summary>\n            /// Gets the \"Tulip\" emoji. 🌷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tulip</c>\n            /// </remarks>\n            public const string Tulip = \"\\U0001F337\";\n            \n            /// <summary>\n            /// Gets the \"Tumbler glass\" emoji. 🥃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>tumbler_glass</c>\n            /// </remarks>\n            public const string TumblerGlass = \"\\U0001F943\";\n            \n            /// <summary>\n            /// Gets the \"Turkey\" emoji. 🦃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>turkey</c>\n            /// </remarks>\n            public const string Turkey = \"\\U0001F983\";\n            \n            /// <summary>\n            /// Gets the \"Turtle\" emoji. 🐢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>turtle</c>\n            /// </remarks>\n            public const string Turtle = \"\\U0001F422\";\n            \n            /// <summary>\n            /// Gets the \"Twelve o’clock\" emoji. 🕛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>twelve_o_clock</c>\n            /// </remarks>\n            public const string TwelveOClock = \"\\U0001F55B\";\n            \n            /// <summary>\n            /// Gets the \"Twelve-thirty\" emoji. 🕧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>twelve_thirty</c>\n            /// </remarks>\n            public const string TwelveThirty = \"\\U0001F567\";\n            \n            /// <summary>\n            /// Gets the \"Two hearts\" emoji. 💕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>two_hearts</c>\n            /// </remarks>\n            public const string TwoHearts = \"\\U0001F495\";\n            \n            /// <summary>\n            /// Gets the \"Two-hump camel\" emoji. 🐫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>two_hump_camel</c>\n            /// </remarks>\n            public const string TwoHumpCamel = \"\\U0001F42B\";\n            \n            /// <summary>\n            /// Gets the \"Two o’clock\" emoji. 🕑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>two_o_clock</c>\n            /// </remarks>\n            public const string TwoOClock = \"\\U0001F551\";\n            \n            /// <summary>\n            /// Gets the \"Two-thirty\" emoji. 🕝\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>two_thirty</c>\n            /// </remarks>\n            public const string TwoThirty = \"\\U0001F55D\";\n            \n            /// <summary>\n            /// Gets the \"Umbrella\" emoji. ☂\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>umbrella</c>\n            /// </remarks>\n            public const string Umbrella = \"\\U00002602\";\n            \n            /// <summary>\n            /// Gets the \"Umbrella on ground\" emoji. ⛱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>umbrella_on_ground</c>\n            /// </remarks>\n            public const string UmbrellaOnGround = \"\\U000026F1\";\n            \n            /// <summary>\n            /// Gets the \"Umbrella with rain drops\" emoji. ☔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>umbrella_with_rain_drops</c>\n            /// </remarks>\n            public const string UmbrellaWithRainDrops = \"\\U00002614\";\n            \n            /// <summary>\n            /// Gets the \"Unamused face\" emoji. 😒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>unamused_face</c>\n            /// </remarks>\n            public const string UnamusedFace = \"\\U0001F612\";\n            \n            /// <summary>\n            /// Gets the \"Unicorn\" emoji. 🦄\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>unicorn</c>\n            /// </remarks>\n            public const string Unicorn = \"\\U0001F984\";\n            \n            /// <summary>\n            /// Gets the \"Unlocked\" emoji. 🔓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>unlocked</c>\n            /// </remarks>\n            public const string Unlocked = \"\\U0001F513\";\n            \n            /// <summary>\n            /// Gets the \"Up arrow\" emoji. ⬆\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>up_arrow</c>\n            /// </remarks>\n            public const string UpArrow = \"\\U00002B06\";\n            \n            /// <summary>\n            /// Gets the \"UP! button\" emoji. 🆙\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>up_button</c>\n            /// </remarks>\n            public const string UpButton = \"\\U0001F199\";\n            \n            /// <summary>\n            /// Gets the \"Up-down arrow\" emoji. ↕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>up_down_arrow</c>\n            /// </remarks>\n            public const string UpDownArrow = \"\\U00002195\";\n            \n            /// <summary>\n            /// Gets the \"Up-left arrow\" emoji. ↖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>up_left_arrow</c>\n            /// </remarks>\n            public const string UpLeftArrow = \"\\U00002196\";\n            \n            /// <summary>\n            /// Gets the \"Up-right arrow\" emoji. ↗\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>up_right_arrow</c>\n            /// </remarks>\n            public const string UpRightArrow = \"\\U00002197\";\n            \n            /// <summary>\n            /// Gets the \"Upside-down face\" emoji. 🙃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>upside_down_face</c>\n            /// </remarks>\n            public const string UpsideDownFace = \"\\U0001F643\";\n            \n            /// <summary>\n            /// Gets the \"Upwards button\" emoji. 🔼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>upwards_button</c>\n            /// </remarks>\n            public const string UpwardsButton = \"\\U0001F53C\";\n            \n            /// <summary>\n            /// Gets the \"Vampire\" emoji. 🧛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>vampire</c>\n            /// </remarks>\n            public const string Vampire = \"\\U0001F9DB\";\n            \n            /// <summary>\n            /// Gets the \"Vertical traffic light\" emoji. 🚦\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>vertical_traffic_light</c>\n            /// </remarks>\n            public const string VerticalTrafficLight = \"\\U0001F6A6\";\n            \n            /// <summary>\n            /// Gets the \"Vibration mode\" emoji. 📳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>vibration_mode</c>\n            /// </remarks>\n            public const string VibrationMode = \"\\U0001F4F3\";\n            \n            /// <summary>\n            /// Gets the \"Victory hand\" emoji. ✌\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>victory_hand</c>\n            /// </remarks>\n            public const string VictoryHand = \"\\U0000270C\";\n            \n            /// <summary>\n            /// Gets the \"Video camera\" emoji. 📹\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>video_camera</c>\n            /// </remarks>\n            public const string VideoCamera = \"\\U0001F4F9\";\n            \n            /// <summary>\n            /// Gets the \"Videocassette\" emoji. 📼\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>videocassette</c>\n            /// </remarks>\n            public const string Videocassette = \"\\U0001F4FC\";\n            \n            /// <summary>\n            /// Gets the \"Video game\" emoji. 🎮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>video_game</c>\n            /// </remarks>\n            public const string VideoGame = \"\\U0001F3AE\";\n            \n            /// <summary>\n            /// Gets the \"Violin\" emoji. 🎻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>violin</c>\n            /// </remarks>\n            public const string Violin = \"\\U0001F3BB\";\n            \n            /// <summary>\n            /// Gets the \"Virgo\" emoji. ♍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>virgo</c>\n            /// </remarks>\n            public const string Virgo = \"\\U0000264D\";\n            \n            /// <summary>\n            /// Gets the \"Volcano\" emoji. 🌋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>volcano</c>\n            /// </remarks>\n            public const string Volcano = \"\\U0001F30B\";\n            \n            /// <summary>\n            /// Gets the \"Volleyball\" emoji. 🏐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>volleyball</c>\n            /// </remarks>\n            public const string Volleyball = \"\\U0001F3D0\";\n            \n            /// <summary>\n            /// Gets the \"VS button\" emoji. 🆚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>vs_button</c>\n            /// </remarks>\n            public const string VsButton = \"\\U0001F19A\";\n            \n            /// <summary>\n            /// Gets the \"Vulcan salute\" emoji. 🖖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>vulcan_salute</c>\n            /// </remarks>\n            public const string VulcanSalute = \"\\U0001F596\";\n            \n            /// <summary>\n            /// Gets the \"Waffle\" emoji. 🧇\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waffle</c>\n            /// </remarks>\n            public const string Waffle = \"\\U0001F9C7\";\n            \n            /// <summary>\n            /// Gets the \"Waning crescent moon\" emoji. 🌘\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waning_crescent_moon</c>\n            /// </remarks>\n            public const string WaningCrescentMoon = \"\\U0001F318\";\n            \n            /// <summary>\n            /// Gets the \"Waning gibbous moon\" emoji. 🌖\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waning_gibbous_moon</c>\n            /// </remarks>\n            public const string WaningGibbousMoon = \"\\U0001F316\";\n            \n            /// <summary>\n            /// Gets the \"Warning\" emoji. ⚠\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>warning</c>\n            /// </remarks>\n            public const string Warning = \"\\U000026A0\";\n            \n            /// <summary>\n            /// Gets the \"Wastebasket\" emoji. 🗑\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wastebasket</c>\n            /// </remarks>\n            public const string Wastebasket = \"\\U0001F5D1\";\n            \n            /// <summary>\n            /// Gets the \"Watch\" emoji. ⌚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>watch</c>\n            /// </remarks>\n            public const string Watch = \"\\U0000231A\";\n            \n            /// <summary>\n            /// Gets the \"Water buffalo\" emoji. 🐃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>water_buffalo</c>\n            /// </remarks>\n            public const string WaterBuffalo = \"\\U0001F403\";\n            \n            /// <summary>\n            /// Gets the \"Water closet\" emoji. 🚾\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>water_closet</c>\n            /// </remarks>\n            public const string WaterCloset = \"\\U0001F6BE\";\n            \n            /// <summary>\n            /// Gets the \"Watermelon\" emoji. 🍉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>watermelon</c>\n            /// </remarks>\n            public const string Watermelon = \"\\U0001F349\";\n            \n            /// <summary>\n            /// Gets the \"Water pistol\" emoji. 🔫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>water_pistol</c>\n            /// </remarks>\n            public const string WaterPistol = \"\\U0001F52B\";\n            \n            /// <summary>\n            /// Gets the \"Water wave\" emoji. 🌊\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>water_wave</c>\n            /// </remarks>\n            public const string WaterWave = \"\\U0001F30A\";\n            \n            /// <summary>\n            /// Gets the \"Waving hand\" emoji. 👋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waving_hand</c>\n            /// </remarks>\n            public const string WavingHand = \"\\U0001F44B\";\n            \n            /// <summary>\n            /// Gets the \"Wavy dash\" emoji. 〰\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wavy_dash</c>\n            /// </remarks>\n            public const string WavyDash = \"\\U00003030\";\n            \n            /// <summary>\n            /// Gets the \"Waxing crescent moon\" emoji. 🌒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waxing_crescent_moon</c>\n            /// </remarks>\n            public const string WaxingCrescentMoon = \"\\U0001F312\";\n            \n            /// <summary>\n            /// Gets the \"Waxing gibbous moon\" emoji. 🌔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>waxing_gibbous_moon</c>\n            /// </remarks>\n            public const string WaxingGibbousMoon = \"\\U0001F314\";\n            \n            /// <summary>\n            /// Gets the \"Weary cat\" emoji. 🙀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>weary_cat</c>\n            /// </remarks>\n            public const string WearyCat = \"\\U0001F640\";\n            \n            /// <summary>\n            /// Gets the \"Weary face\" emoji. 😩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>weary_face</c>\n            /// </remarks>\n            public const string WearyFace = \"\\U0001F629\";\n            \n            /// <summary>\n            /// Gets the \"Wedding\" emoji. 💒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wedding</c>\n            /// </remarks>\n            public const string Wedding = \"\\U0001F492\";\n            \n            /// <summary>\n            /// Gets the \"Whale\" emoji. 🐋\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>whale</c>\n            /// </remarks>\n            public const string Whale = \"\\U0001F40B\";\n            \n            /// <summary>\n            /// Gets the \"Wheel\" emoji. 🛞\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wheel</c>\n            /// </remarks>\n            public const string Wheel = \"\\U0001F6DE\";\n            \n            /// <summary>\n            /// Gets the \"Wheelchair symbol\" emoji. ♿\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wheelchair_symbol</c>\n            /// </remarks>\n            public const string WheelchairSymbol = \"\\U0000267F\";\n            \n            /// <summary>\n            /// Gets the \"Wheel of dharma\" emoji. ☸\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wheel_of_dharma</c>\n            /// </remarks>\n            public const string WheelOfDharma = \"\\U00002638\";\n            \n            /// <summary>\n            /// Gets the \"White cane\" emoji. 🦯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_cane</c>\n            /// </remarks>\n            public const string WhiteCane = \"\\U0001F9AF\";\n            \n            /// <summary>\n            /// Gets the \"White circle\" emoji. ⚪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_circle</c>\n            /// </remarks>\n            public const string WhiteCircle = \"\\U000026AA\";\n            \n            /// <summary>\n            /// Gets the \"White exclamation mark\" emoji. ❕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_exclamation_mark</c>\n            /// </remarks>\n            public const string WhiteExclamationMark = \"\\U00002755\";\n            \n            /// <summary>\n            /// Gets the \"White flag\" emoji. 🏳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_flag</c>\n            /// </remarks>\n            public const string WhiteFlag = \"\\U0001F3F3\";\n            \n            /// <summary>\n            /// Gets the \"White flower\" emoji. 💮\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_flower</c>\n            /// </remarks>\n            public const string WhiteFlower = \"\\U0001F4AE\";\n            \n            /// <summary>\n            /// Gets the \"White hair\" emoji. 🦳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_hair</c>\n            /// </remarks>\n            public const string WhiteHair = \"\\U0001F9B3\";\n            \n            /// <summary>\n            /// Gets the \"White heart\" emoji. 🤍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_heart</c>\n            /// </remarks>\n            public const string WhiteHeart = \"\\U0001F90D\";\n            \n            /// <summary>\n            /// Gets the \"White large square\" emoji. ⬜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_large_square</c>\n            /// </remarks>\n            public const string WhiteLargeSquare = \"\\U00002B1C\";\n            \n            /// <summary>\n            /// Gets the \"White medium-small square\" emoji. ◽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_medium_small_square</c>\n            /// </remarks>\n            public const string WhiteMediumSmallSquare = \"\\U000025FD\";\n            \n            /// <summary>\n            /// Gets the \"White medium square\" emoji. ◻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_medium_square</c>\n            /// </remarks>\n            public const string WhiteMediumSquare = \"\\U000025FB\";\n            \n            /// <summary>\n            /// Gets the \"White question mark\" emoji. ❔\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_question_mark</c>\n            /// </remarks>\n            public const string WhiteQuestionMark = \"\\U00002754\";\n            \n            /// <summary>\n            /// Gets the \"White small square\" emoji. ▫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_small_square</c>\n            /// </remarks>\n            public const string WhiteSmallSquare = \"\\U000025AB\";\n            \n            /// <summary>\n            /// Gets the \"White square button\" emoji. 🔳\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>white_square_button</c>\n            /// </remarks>\n            public const string WhiteSquareButton = \"\\U0001F533\";\n            \n            /// <summary>\n            /// Gets the \"Wilted flower\" emoji. 🥀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wilted_flower</c>\n            /// </remarks>\n            public const string WiltedFlower = \"\\U0001F940\";\n            \n            /// <summary>\n            /// Gets the \"Wind chime\" emoji. 🎐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wind_chime</c>\n            /// </remarks>\n            public const string WindChime = \"\\U0001F390\";\n            \n            /// <summary>\n            /// Gets the \"Wind face\" emoji. 🌬\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wind_face</c>\n            /// </remarks>\n            public const string WindFace = \"\\U0001F32C\";\n            \n            /// <summary>\n            /// Gets the \"Window\" emoji. 🪟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>window</c>\n            /// </remarks>\n            public const string Window = \"\\U0001FA9F\";\n            \n            /// <summary>\n            /// Gets the \"Wine glass\" emoji. 🍷\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wine_glass</c>\n            /// </remarks>\n            public const string WineGlass = \"\\U0001F377\";\n            \n            /// <summary>\n            /// Gets the \"Wing\" emoji. 🪽\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wing</c>\n            /// </remarks>\n            public const string Wing = \"\\U0001FABD\";\n            \n            /// <summary>\n            /// Gets the \"Winking face\" emoji. 😉\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>winking_face</c>\n            /// </remarks>\n            public const string WinkingFace = \"\\U0001F609\";\n            \n            /// <summary>\n            /// Gets the \"Winking face with tongue\" emoji. 😜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>winking_face_with_tongue</c>\n            /// </remarks>\n            public const string WinkingFaceWithTongue = \"\\U0001F61C\";\n            \n            /// <summary>\n            /// Gets the \"Wireless\" emoji. 🛜\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wireless</c>\n            /// </remarks>\n            public const string Wireless = \"\\U0001F6DC\";\n            \n            /// <summary>\n            /// Gets the \"Wolf\" emoji. 🐺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wolf</c>\n            /// </remarks>\n            public const string Wolf = \"\\U0001F43A\";\n            \n            /// <summary>\n            /// Gets the \"Woman\" emoji. 👩\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>woman</c>\n            /// </remarks>\n            public const string Woman = \"\\U0001F469\";\n            \n            /// <summary>\n            /// Gets the \"Woman and man holding hands\" emoji. 👫\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>woman_and_man_holding_hands</c>\n            /// </remarks>\n            public const string WomanAndManHoldingHands = \"\\U0001F46B\";\n            \n            /// <summary>\n            /// Gets the \"Woman dancing\" emoji. 💃\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>woman_dancing</c>\n            /// </remarks>\n            public const string WomanDancing = \"\\U0001F483\";\n            \n            /// <summary>\n            /// Gets the \"Woman’s boot\" emoji. 👢\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>womans_boot</c>\n            /// </remarks>\n            public const string WomansBoot = \"\\U0001F462\";\n            \n            /// <summary>\n            /// Gets the \"Woman’s clothes\" emoji. 👚\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>womans_clothes</c>\n            /// </remarks>\n            public const string WomansClothes = \"\\U0001F45A\";\n            \n            /// <summary>\n            /// Gets the \"Woman’s hat\" emoji. 👒\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>womans_hat</c>\n            /// </remarks>\n            public const string WomansHat = \"\\U0001F452\";\n            \n            /// <summary>\n            /// Gets the \"Woman’s sandal\" emoji. 👡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>womans_sandal</c>\n            /// </remarks>\n            public const string WomansSandal = \"\\U0001F461\";\n            \n            /// <summary>\n            /// Gets the \"Woman with headscarf\" emoji. 🧕\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>woman_with_headscarf</c>\n            /// </remarks>\n            public const string WomanWithHeadscarf = \"\\U0001F9D5\";\n            \n            /// <summary>\n            /// Gets the \"Women holding hands\" emoji. 👭\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>women_holding_hands</c>\n            /// </remarks>\n            public const string WomenHoldingHands = \"\\U0001F46D\";\n            \n            /// <summary>\n            /// Gets the \"Women’s room\" emoji. 🚺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>womens_room</c>\n            /// </remarks>\n            public const string WomensRoom = \"\\U0001F6BA\";\n            \n            /// <summary>\n            /// Gets the \"Wood\" emoji. 🪵\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wood</c>\n            /// </remarks>\n            public const string Wood = \"\\U0001FAB5\";\n            \n            /// <summary>\n            /// Gets the \"Woozy face\" emoji. 🥴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>woozy_face</c>\n            /// </remarks>\n            public const string WoozyFace = \"\\U0001F974\";\n            \n            /// <summary>\n            /// Gets the \"World map\" emoji. 🗺\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>world_map</c>\n            /// </remarks>\n            public const string WorldMap = \"\\U0001F5FA\";\n            \n            /// <summary>\n            /// Gets the \"Worm\" emoji. 🪱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>worm</c>\n            /// </remarks>\n            public const string Worm = \"\\U0001FAB1\";\n            \n            /// <summary>\n            /// Gets the \"Worried face\" emoji. 😟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>worried_face</c>\n            /// </remarks>\n            public const string WorriedFace = \"\\U0001F61F\";\n            \n            /// <summary>\n            /// Gets the \"Wrapped gift\" emoji. 🎁\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wrapped_gift</c>\n            /// </remarks>\n            public const string WrappedGift = \"\\U0001F381\";\n            \n            /// <summary>\n            /// Gets the \"Wrench\" emoji. 🔧\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>wrench</c>\n            /// </remarks>\n            public const string Wrench = \"\\U0001F527\";\n            \n            /// <summary>\n            /// Gets the \"Writing hand\" emoji. ✍\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>writing_hand</c>\n            /// </remarks>\n            public const string WritingHand = \"\\U0000270D\";\n            \n            /// <summary>\n            /// Gets the \"X-ray\" emoji. 🩻\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>x_ray</c>\n            /// </remarks>\n            public const string XRay = \"\\U0001FA7B\";\n            \n            /// <summary>\n            /// Gets the \"Yarn\" emoji. 🧶\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yarn</c>\n            /// </remarks>\n            public const string Yarn = \"\\U0001F9F6\";\n            \n            /// <summary>\n            /// Gets the \"Yawning face\" emoji. 🥱\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yawning_face</c>\n            /// </remarks>\n            public const string YawningFace = \"\\U0001F971\";\n            \n            /// <summary>\n            /// Gets the \"Yellow circle\" emoji. 🟡\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yellow_circle</c>\n            /// </remarks>\n            public const string YellowCircle = \"\\U0001F7E1\";\n            \n            /// <summary>\n            /// Gets the \"Yellow heart\" emoji. 💛\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yellow_heart</c>\n            /// </remarks>\n            public const string YellowHeart = \"\\U0001F49B\";\n            \n            /// <summary>\n            /// Gets the \"Yellow square\" emoji. 🟨\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yellow_square</c>\n            /// </remarks>\n            public const string YellowSquare = \"\\U0001F7E8\";\n            \n            /// <summary>\n            /// Gets the \"Yen banknote\" emoji. 💴\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yen_banknote</c>\n            /// </remarks>\n            public const string YenBanknote = \"\\U0001F4B4\";\n            \n            /// <summary>\n            /// Gets the \"Yin yang\" emoji. ☯\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yin_yang</c>\n            /// </remarks>\n            public const string YinYang = \"\\U0000262F\";\n            \n            /// <summary>\n            /// Gets the \"Yo-yo\" emoji. 🪀\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>yo_yo</c>\n            /// </remarks>\n            public const string YoYo = \"\\U0001FA80\";\n            \n            /// <summary>\n            /// Gets the \"Zany face\" emoji. 🤪\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>zany_face</c>\n            /// </remarks>\n            public const string ZanyFace = \"\\U0001F92A\";\n            \n            /// <summary>\n            /// Gets the \"Zebra\" emoji. 🦓\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>zebra</c>\n            /// </remarks>\n            public const string Zebra = \"\\U0001F993\";\n            \n            /// <summary>\n            /// Gets the \"Zipper-mouth face\" emoji. 🤐\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>zipper_mouth_face</c>\n            /// </remarks>\n            public const string ZipperMouthFace = \"\\U0001F910\";\n            \n            /// <summary>\n            /// Gets the \"Zombie\" emoji. 🧟\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>zombie</c>\n            /// </remarks>\n            public const string Zombie = \"\\U0001F9DF\";\n            \n            /// <summary>\n            /// Gets the \"ZZZ\" emoji. 💤\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>zzz</c>\n            /// </remarks>\n            public const string Zzz = \"\\U0001F4A4\";\n            \n            /// <summary>\n            /// Gets the \"Hugging face\" emoji.\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>hugging_face</c><br/>\n            /// This is a legacy alias for <see cref=\"SmilingFaceWithOpenHands\"/>.\n            /// </remarks>\n            public const string HuggingFace = SmilingFaceWithOpenHands;\n            \n            /// <summary>\n            /// Gets the \"Knocked-out face\" emoji.\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>knocked_out_face</c><br/>\n            /// This is a legacy alias for <see cref=\"FaceWithCrossedOutEyes\"/>.\n            /// </remarks>\n            public const string KnockedOutFace = FaceWithCrossedOutEyes;\n            \n            /// <summary>\n            /// Gets the \"Pouting face\" emoji.\n            /// </summary>\n            /// <remarks>\n            /// Lookup: <c>pouting_face</c><br/>\n            /// This is a legacy alias for <see cref=\"EnragedFace\"/>.\n            /// </remarks>\n            public const string PoutingFace = EnragedFace;\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Spinners.SpinnerGenerator/Spinner.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Partly generated from\n//     https://github.com/sindresorhus/cli-spinners/blob/master/spinners.json\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    public abstract partial class Spinner\n    {\n        private sealed class DefaultSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⣷\",\n                \"⣯\",\n                \"⣟\",\n                \"⡿\",\n                \"⢿\",\n                \"⣻\",\n                \"⣽\",\n                \"⣾\",\n            };\n        }\n        private sealed class AsciiSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"-\",\n                \"\\\\\",\n                \"|\",\n                \"/\",\n                \"-\",\n                \"\\\\\",\n                \"|\",\n                \"/\",\n            };\n        }\n        private sealed class DotsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠋\",\n                \"⠙\",\n                \"⠹\",\n                \"⠸\",\n                \"⠼\",\n                \"⠴\",\n                \"⠦\",\n                \"⠧\",\n                \"⠇\",\n                \"⠏\",\n            };\n        }\n        private sealed class Dots2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⣾\",\n                \"⣽\",\n                \"⣻\",\n                \"⢿\",\n                \"⡿\",\n                \"⣟\",\n                \"⣯\",\n                \"⣷\",\n            };\n        }\n        private sealed class Dots3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠋\",\n                \"⠙\",\n                \"⠚\",\n                \"⠞\",\n                \"⠖\",\n                \"⠦\",\n                \"⠴\",\n                \"⠲\",\n                \"⠳\",\n                \"⠓\",\n            };\n        }\n        private sealed class Dots4Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠄\",\n                \"⠆\",\n                \"⠇\",\n                \"⠋\",\n                \"⠙\",\n                \"⠸\",\n                \"⠰\",\n                \"⠠\",\n                \"⠰\",\n                \"⠸\",\n                \"⠙\",\n                \"⠋\",\n                \"⠇\",\n                \"⠆\",\n            };\n        }\n        private sealed class Dots5Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠋\",\n                \"⠙\",\n                \"⠚\",\n                \"⠒\",\n                \"⠂\",\n                \"⠂\",\n                \"⠒\",\n                \"⠲\",\n                \"⠴\",\n                \"⠦\",\n                \"⠖\",\n                \"⠒\",\n                \"⠐\",\n                \"⠐\",\n                \"⠒\",\n                \"⠓\",\n                \"⠋\",\n            };\n        }\n        private sealed class Dots6Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠁\",\n                \"⠉\",\n                \"⠙\",\n                \"⠚\",\n                \"⠒\",\n                \"⠂\",\n                \"⠂\",\n                \"⠒\",\n                \"⠲\",\n                \"⠴\",\n                \"⠤\",\n                \"⠄\",\n                \"⠄\",\n                \"⠤\",\n                \"⠴\",\n                \"⠲\",\n                \"⠒\",\n                \"⠂\",\n                \"⠂\",\n                \"⠒\",\n                \"⠚\",\n                \"⠙\",\n                \"⠉\",\n                \"⠁\",\n            };\n        }\n        private sealed class Dots7Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠈\",\n                \"⠉\",\n                \"⠋\",\n                \"⠓\",\n                \"⠒\",\n                \"⠐\",\n                \"⠐\",\n                \"⠒\",\n                \"⠖\",\n                \"⠦\",\n                \"⠤\",\n                \"⠠\",\n                \"⠠\",\n                \"⠤\",\n                \"⠦\",\n                \"⠖\",\n                \"⠒\",\n                \"⠐\",\n                \"⠐\",\n                \"⠒\",\n                \"⠓\",\n                \"⠋\",\n                \"⠉\",\n                \"⠈\",\n            };\n        }\n        private sealed class Dots8Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠁\",\n                \"⠁\",\n                \"⠉\",\n                \"⠙\",\n                \"⠚\",\n                \"⠒\",\n                \"⠂\",\n                \"⠂\",\n                \"⠒\",\n                \"⠲\",\n                \"⠴\",\n                \"⠤\",\n                \"⠄\",\n                \"⠄\",\n                \"⠤\",\n                \"⠠\",\n                \"⠠\",\n                \"⠤\",\n                \"⠦\",\n                \"⠖\",\n                \"⠒\",\n                \"⠐\",\n                \"⠐\",\n                \"⠒\",\n                \"⠓\",\n                \"⠋\",\n                \"⠉\",\n                \"⠈\",\n                \"⠈\",\n            };\n        }\n        private sealed class Dots9Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⢹\",\n                \"⢺\",\n                \"⢼\",\n                \"⣸\",\n                \"⣇\",\n                \"⡧\",\n                \"⡗\",\n                \"⡏\",\n            };\n        }\n        private sealed class Dots10Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⢄\",\n                \"⢂\",\n                \"⢁\",\n                \"⡁\",\n                \"⡈\",\n                \"⡐\",\n                \"⡠\",\n            };\n        }\n        private sealed class Dots11Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠁\",\n                \"⠂\",\n                \"⠄\",\n                \"⡀\",\n                \"⢀\",\n                \"⠠\",\n                \"⠐\",\n                \"⠈\",\n            };\n        }\n        private sealed class Dots12Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⢀⠀\",\n                \"⡀⠀\",\n                \"⠄⠀\",\n                \"⢂⠀\",\n                \"⡂⠀\",\n                \"⠅⠀\",\n                \"⢃⠀\",\n                \"⡃⠀\",\n                \"⠍⠀\",\n                \"⢋⠀\",\n                \"⡋⠀\",\n                \"⠍⠁\",\n                \"⢋⠁\",\n                \"⡋⠁\",\n                \"⠍⠉\",\n                \"⠋⠉\",\n                \"⠋⠉\",\n                \"⠉⠙\",\n                \"⠉⠙\",\n                \"⠉⠩\",\n                \"⠈⢙\",\n                \"⠈⡙\",\n                \"⢈⠩\",\n                \"⡀⢙\",\n                \"⠄⡙\",\n                \"⢂⠩\",\n                \"⡂⢘\",\n                \"⠅⡘\",\n                \"⢃⠨\",\n                \"⡃⢐\",\n                \"⠍⡐\",\n                \"⢋⠠\",\n                \"⡋⢀\",\n                \"⠍⡁\",\n                \"⢋⠁\",\n                \"⡋⠁\",\n                \"⠍⠉\",\n                \"⠋⠉\",\n                \"⠋⠉\",\n                \"⠉⠙\",\n                \"⠉⠙\",\n                \"⠉⠩\",\n                \"⠈⢙\",\n                \"⠈⡙\",\n                \"⠈⠩\",\n                \"⠀⢙\",\n                \"⠀⡙\",\n                \"⠀⠩\",\n                \"⠀⢘\",\n                \"⠀⡘\",\n                \"⠀⠨\",\n                \"⠀⢐\",\n                \"⠀⡐\",\n                \"⠀⠠\",\n                \"⠀⢀\",\n                \"⠀⡀\",\n            };\n        }\n        private sealed class Dots13Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⣼\",\n                \"⣹\",\n                \"⢻\",\n                \"⠿\",\n                \"⡟\",\n                \"⣏\",\n                \"⣧\",\n                \"⣶\",\n            };\n        }\n        private sealed class Dots14Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠉⠉\",\n                \"⠈⠙\",\n                \"⠀⠹\",\n                \"⠀⢸\",\n                \"⠀⣰\",\n                \"⢀⣠\",\n                \"⣀⣀\",\n                \"⣄⡀\",\n                \"⣆⠀\",\n                \"⡇⠀\",\n                \"⠏⠀\",\n                \"⠋⠁\",\n            };\n        }\n        private sealed class Dots8BitSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠀\",\n                \"⠁\",\n                \"⠂\",\n                \"⠃\",\n                \"⠄\",\n                \"⠅\",\n                \"⠆\",\n                \"⠇\",\n                \"⡀\",\n                \"⡁\",\n                \"⡂\",\n                \"⡃\",\n                \"⡄\",\n                \"⡅\",\n                \"⡆\",\n                \"⡇\",\n                \"⠈\",\n                \"⠉\",\n                \"⠊\",\n                \"⠋\",\n                \"⠌\",\n                \"⠍\",\n                \"⠎\",\n                \"⠏\",\n                \"⡈\",\n                \"⡉\",\n                \"⡊\",\n                \"⡋\",\n                \"⡌\",\n                \"⡍\",\n                \"⡎\",\n                \"⡏\",\n                \"⠐\",\n                \"⠑\",\n                \"⠒\",\n                \"⠓\",\n                \"⠔\",\n                \"⠕\",\n                \"⠖\",\n                \"⠗\",\n                \"⡐\",\n                \"⡑\",\n                \"⡒\",\n                \"⡓\",\n                \"⡔\",\n                \"⡕\",\n                \"⡖\",\n                \"⡗\",\n                \"⠘\",\n                \"⠙\",\n                \"⠚\",\n                \"⠛\",\n                \"⠜\",\n                \"⠝\",\n                \"⠞\",\n                \"⠟\",\n                \"⡘\",\n                \"⡙\",\n                \"⡚\",\n                \"⡛\",\n                \"⡜\",\n                \"⡝\",\n                \"⡞\",\n                \"⡟\",\n                \"⠠\",\n                \"⠡\",\n                \"⠢\",\n                \"⠣\",\n                \"⠤\",\n                \"⠥\",\n                \"⠦\",\n                \"⠧\",\n                \"⡠\",\n                \"⡡\",\n                \"⡢\",\n                \"⡣\",\n                \"⡤\",\n                \"⡥\",\n                \"⡦\",\n                \"⡧\",\n                \"⠨\",\n                \"⠩\",\n                \"⠪\",\n                \"⠫\",\n                \"⠬\",\n                \"⠭\",\n                \"⠮\",\n                \"⠯\",\n                \"⡨\",\n                \"⡩\",\n                \"⡪\",\n                \"⡫\",\n                \"⡬\",\n                \"⡭\",\n                \"⡮\",\n                \"⡯\",\n                \"⠰\",\n                \"⠱\",\n                \"⠲\",\n                \"⠳\",\n                \"⠴\",\n                \"⠵\",\n                \"⠶\",\n                \"⠷\",\n                \"⡰\",\n                \"⡱\",\n                \"⡲\",\n                \"⡳\",\n                \"⡴\",\n                \"⡵\",\n                \"⡶\",\n                \"⡷\",\n                \"⠸\",\n                \"⠹\",\n                \"⠺\",\n                \"⠻\",\n                \"⠼\",\n                \"⠽\",\n                \"⠾\",\n                \"⠿\",\n                \"⡸\",\n                \"⡹\",\n                \"⡺\",\n                \"⡻\",\n                \"⡼\",\n                \"⡽\",\n                \"⡾\",\n                \"⡿\",\n                \"⢀\",\n                \"⢁\",\n                \"⢂\",\n                \"⢃\",\n                \"⢄\",\n                \"⢅\",\n                \"⢆\",\n                \"⢇\",\n                \"⣀\",\n                \"⣁\",\n                \"⣂\",\n                \"⣃\",\n                \"⣄\",\n                \"⣅\",\n                \"⣆\",\n                \"⣇\",\n                \"⢈\",\n                \"⢉\",\n                \"⢊\",\n                \"⢋\",\n                \"⢌\",\n                \"⢍\",\n                \"⢎\",\n                \"⢏\",\n                \"⣈\",\n                \"⣉\",\n                \"⣊\",\n                \"⣋\",\n                \"⣌\",\n                \"⣍\",\n                \"⣎\",\n                \"⣏\",\n                \"⢐\",\n                \"⢑\",\n                \"⢒\",\n                \"⢓\",\n                \"⢔\",\n                \"⢕\",\n                \"⢖\",\n                \"⢗\",\n                \"⣐\",\n                \"⣑\",\n                \"⣒\",\n                \"⣓\",\n                \"⣔\",\n                \"⣕\",\n                \"⣖\",\n                \"⣗\",\n                \"⢘\",\n                \"⢙\",\n                \"⢚\",\n                \"⢛\",\n                \"⢜\",\n                \"⢝\",\n                \"⢞\",\n                \"⢟\",\n                \"⣘\",\n                \"⣙\",\n                \"⣚\",\n                \"⣛\",\n                \"⣜\",\n                \"⣝\",\n                \"⣞\",\n                \"⣟\",\n                \"⢠\",\n                \"⢡\",\n                \"⢢\",\n                \"⢣\",\n                \"⢤\",\n                \"⢥\",\n                \"⢦\",\n                \"⢧\",\n                \"⣠\",\n                \"⣡\",\n                \"⣢\",\n                \"⣣\",\n                \"⣤\",\n                \"⣥\",\n                \"⣦\",\n                \"⣧\",\n                \"⢨\",\n                \"⢩\",\n                \"⢪\",\n                \"⢫\",\n                \"⢬\",\n                \"⢭\",\n                \"⢮\",\n                \"⢯\",\n                \"⣨\",\n                \"⣩\",\n                \"⣪\",\n                \"⣫\",\n                \"⣬\",\n                \"⣭\",\n                \"⣮\",\n                \"⣯\",\n                \"⢰\",\n                \"⢱\",\n                \"⢲\",\n                \"⢳\",\n                \"⢴\",\n                \"⢵\",\n                \"⢶\",\n                \"⢷\",\n                \"⣰\",\n                \"⣱\",\n                \"⣲\",\n                \"⣳\",\n                \"⣴\",\n                \"⣵\",\n                \"⣶\",\n                \"⣷\",\n                \"⢸\",\n                \"⢹\",\n                \"⢺\",\n                \"⢻\",\n                \"⢼\",\n                \"⢽\",\n                \"⢾\",\n                \"⢿\",\n                \"⣸\",\n                \"⣹\",\n                \"⣺\",\n                \"⣻\",\n                \"⣼\",\n                \"⣽\",\n                \"⣾\",\n                \"⣿\",\n            };\n        }\n        private sealed class DotsCircleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⢎ \",\n                \"⠎⠁\",\n                \"⠊⠑\",\n                \"⠈⠱\",\n                \" ⡱\",\n                \"⢀⡰\",\n                \"⢄⡠\",\n                \"⢆⡀\",\n            };\n        }\n        private sealed class SandSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠁\",\n                \"⠂\",\n                \"⠄\",\n                \"⡀\",\n                \"⡈\",\n                \"⡐\",\n                \"⡠\",\n                \"⣀\",\n                \"⣁\",\n                \"⣂\",\n                \"⣄\",\n                \"⣌\",\n                \"⣔\",\n                \"⣤\",\n                \"⣥\",\n                \"⣦\",\n                \"⣮\",\n                \"⣶\",\n                \"⣷\",\n                \"⣿\",\n                \"⡿\",\n                \"⠿\",\n                \"⢟\",\n                \"⠟\",\n                \"⡛\",\n                \"⠛\",\n                \"⠫\",\n                \"⢋\",\n                \"⠋\",\n                \"⠍\",\n                \"⡉\",\n                \"⠉\",\n                \"⠑\",\n                \"⠡\",\n                \"⢁\",\n            };\n        }\n        private sealed class LineSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(130);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"-\",\n                \"\\\\\",\n                \"|\",\n                \"/\",\n            };\n        }\n        private sealed class Line2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠂\",\n                \"-\",\n                \"–\",\n                \"—\",\n                \"–\",\n                \"-\",\n            };\n        }\n        private sealed class PipeSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"┤\",\n                \"┘\",\n                \"┴\",\n                \"└\",\n                \"├\",\n                \"┌\",\n                \"┬\",\n                \"┐\",\n            };\n        }\n        private sealed class SimpleDotsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(400);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \".  \",\n                \".. \",\n                \"...\",\n                \"   \",\n            };\n        }\n        private sealed class SimpleDotsScrollingSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \".  \",\n                \".. \",\n                \"...\",\n                \" ..\",\n                \"  .\",\n                \"   \",\n            };\n        }\n        private sealed class StarSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(70);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"✶\",\n                \"✸\",\n                \"✹\",\n                \"✺\",\n                \"✹\",\n                \"✷\",\n            };\n        }\n        private sealed class Star2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"+\",\n                \"x\",\n                \"*\",\n            };\n        }\n        private sealed class FlipSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(70);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"_\",\n                \"_\",\n                \"_\",\n                \"-\",\n                \"`\",\n                \"`\",\n                \"'\",\n                \"´\",\n                \"-\",\n                \"_\",\n                \"_\",\n                \"_\",\n            };\n        }\n        private sealed class HamburgerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"☱\",\n                \"☲\",\n                \"☴\",\n            };\n        }\n        private sealed class GrowVerticalSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▁\",\n                \"▃\",\n                \"▄\",\n                \"▅\",\n                \"▆\",\n                \"▇\",\n                \"▆\",\n                \"▅\",\n                \"▄\",\n                \"▃\",\n            };\n        }\n        private sealed class GrowHorizontalSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▏\",\n                \"▎\",\n                \"▍\",\n                \"▌\",\n                \"▋\",\n                \"▊\",\n                \"▉\",\n                \"▊\",\n                \"▋\",\n                \"▌\",\n                \"▍\",\n                \"▎\",\n            };\n        }\n        private sealed class BalloonSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(140);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \" \",\n                \".\",\n                \"o\",\n                \"O\",\n                \"@\",\n                \"*\",\n                \" \",\n            };\n        }\n        private sealed class Balloon2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \".\",\n                \"o\",\n                \"O\",\n                \"°\",\n                \"O\",\n                \"o\",\n                \".\",\n            };\n        }\n        private sealed class NoiseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▓\",\n                \"▒\",\n                \"░\",\n            };\n        }\n        private sealed class BounceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⠁\",\n                \"⠂\",\n                \"⠄\",\n                \"⠂\",\n            };\n        }\n        private sealed class BoxBounceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▖\",\n                \"▘\",\n                \"▝\",\n                \"▗\",\n            };\n        }\n        private sealed class BoxBounce2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▌\",\n                \"▀\",\n                \"▐\",\n                \"▄\",\n            };\n        }\n        private sealed class TriangleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◢\",\n                \"◣\",\n                \"◤\",\n                \"◥\",\n            };\n        }\n        private sealed class BinarySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"010010\",\n                \"001100\",\n                \"100101\",\n                \"111010\",\n                \"111101\",\n                \"010111\",\n                \"101011\",\n                \"111000\",\n                \"110011\",\n                \"110101\",\n            };\n        }\n        private sealed class ArcSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◜\",\n                \"◠\",\n                \"◝\",\n                \"◞\",\n                \"◡\",\n                \"◟\",\n            };\n        }\n        private sealed class CircleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◡\",\n                \"⊙\",\n                \"◠\",\n            };\n        }\n        private sealed class SquareCornersSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(180);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◰\",\n                \"◳\",\n                \"◲\",\n                \"◱\",\n            };\n        }\n        private sealed class CircleQuartersSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◴\",\n                \"◷\",\n                \"◶\",\n                \"◵\",\n            };\n        }\n        private sealed class CircleHalvesSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◐\",\n                \"◓\",\n                \"◑\",\n                \"◒\",\n            };\n        }\n        private sealed class SquishSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"╫\",\n                \"╪\",\n            };\n        }\n        private sealed class ToggleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(250);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⊶\",\n                \"⊷\",\n            };\n        }\n        private sealed class Toggle2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▫\",\n                \"▪\",\n            };\n        }\n        private sealed class Toggle3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"□\",\n                \"■\",\n            };\n        }\n        private sealed class Toggle4Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"■\",\n                \"□\",\n                \"▪\",\n                \"▫\",\n            };\n        }\n        private sealed class Toggle5Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▮\",\n                \"▯\",\n            };\n        }\n        private sealed class Toggle6Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(300);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"ဝ\",\n                \"၀\",\n            };\n        }\n        private sealed class Toggle7Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⦾\",\n                \"⦿\",\n            };\n        }\n        private sealed class Toggle8Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◍\",\n                \"◌\",\n            };\n        }\n        private sealed class Toggle9Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"◉\",\n                \"◎\",\n            };\n        }\n        private sealed class Toggle10Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"㊂\",\n                \"㊀\",\n                \"㊁\",\n            };\n        }\n        private sealed class Toggle11Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⧇\",\n                \"⧆\",\n            };\n        }\n        private sealed class Toggle12Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"☗\",\n                \"☖\",\n            };\n        }\n        private sealed class Toggle13Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"=\",\n                \"*\",\n                \"-\",\n            };\n        }\n        private sealed class ArrowSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"←\",\n                \"↖\",\n                \"↑\",\n                \"↗\",\n                \"→\",\n                \"↘\",\n                \"↓\",\n                \"↙\",\n            };\n        }\n        private sealed class Arrow2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"⬆️ \",\n                \"↗️ \",\n                \"➡️ \",\n                \"↘️ \",\n                \"⬇️ \",\n                \"↙️ \",\n                \"⬅️ \",\n                \"↖️ \",\n            };\n        }\n        private sealed class Arrow3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▹▹▹▹▹\",\n                \"▸▹▹▹▹\",\n                \"▹▸▹▹▹\",\n                \"▹▹▸▹▹\",\n                \"▹▹▹▸▹\",\n                \"▹▹▹▹▸\",\n            };\n        }\n        private sealed class BouncingBarSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"[    ]\",\n                \"[=   ]\",\n                \"[==  ]\",\n                \"[=== ]\",\n                \"[====]\",\n                \"[ ===]\",\n                \"[  ==]\",\n                \"[   =]\",\n                \"[    ]\",\n                \"[   =]\",\n                \"[  ==]\",\n                \"[ ===]\",\n                \"[====]\",\n                \"[=== ]\",\n                \"[==  ]\",\n                \"[=   ]\",\n            };\n        }\n        private sealed class BouncingBallSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"( ●    )\",\n                \"(  ●   )\",\n                \"(   ●  )\",\n                \"(    ● )\",\n                \"(     ●)\",\n                \"(    ● )\",\n                \"(   ●  )\",\n                \"(  ●   )\",\n                \"( ●    )\",\n                \"(●     )\",\n            };\n        }\n        private sealed class SmileySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"😄 \",\n                \"😝 \",\n            };\n        }\n        private sealed class MonkeySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(300);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🙈 \",\n                \"🙈 \",\n                \"🙉 \",\n                \"🙊 \",\n            };\n        }\n        private sealed class HeartsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"💛 \",\n                \"💙 \",\n                \"💜 \",\n                \"💚 \",\n                \"❤️ \",\n            };\n        }\n        private sealed class ClockSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🕛 \",\n                \"🕐 \",\n                \"🕑 \",\n                \"🕒 \",\n                \"🕓 \",\n                \"🕔 \",\n                \"🕕 \",\n                \"🕖 \",\n                \"🕗 \",\n                \"🕘 \",\n                \"🕙 \",\n                \"🕚 \",\n            };\n        }\n        private sealed class EarthSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(180);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🌍 \",\n                \"🌎 \",\n                \"🌏 \",\n            };\n        }\n        private sealed class MaterialSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(17);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"██████████▁▁▁▁▁▁▁▁▁▁\",\n                \"███████████▁▁▁▁▁▁▁▁▁\",\n                \"█████████████▁▁▁▁▁▁▁\",\n                \"██████████████▁▁▁▁▁▁\",\n                \"██████████████▁▁▁▁▁▁\",\n                \"▁██████████████▁▁▁▁▁\",\n                \"▁██████████████▁▁▁▁▁\",\n                \"▁██████████████▁▁▁▁▁\",\n                \"▁▁██████████████▁▁▁▁\",\n                \"▁▁▁██████████████▁▁▁\",\n                \"▁▁▁▁█████████████▁▁▁\",\n                \"▁▁▁▁██████████████▁▁\",\n                \"▁▁▁▁██████████████▁▁\",\n                \"▁▁▁▁▁██████████████▁\",\n                \"▁▁▁▁▁██████████████▁\",\n                \"▁▁▁▁▁██████████████▁\",\n                \"▁▁▁▁▁▁██████████████\",\n                \"▁▁▁▁▁▁██████████████\",\n                \"▁▁▁▁▁▁▁█████████████\",\n                \"▁▁▁▁▁▁▁█████████████\",\n                \"▁▁▁▁▁▁▁▁████████████\",\n                \"▁▁▁▁▁▁▁▁████████████\",\n                \"▁▁▁▁▁▁▁▁▁███████████\",\n                \"▁▁▁▁▁▁▁▁▁███████████\",\n                \"▁▁▁▁▁▁▁▁▁▁██████████\",\n                \"▁▁▁▁▁▁▁▁▁▁██████████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                \"███████████▁▁▁▁▁▁▁▁▁\",\n                \"████████████▁▁▁▁▁▁▁▁\",\n                \"████████████▁▁▁▁▁▁▁▁\",\n                \"██████████████▁▁▁▁▁▁\",\n                \"██████████████▁▁▁▁▁▁\",\n                \"▁██████████████▁▁▁▁▁\",\n                \"▁██████████████▁▁▁▁▁\",\n                \"▁▁▁█████████████▁▁▁▁\",\n                \"▁▁▁▁▁████████████▁▁▁\",\n                \"▁▁▁▁▁████████████▁▁▁\",\n                \"▁▁▁▁▁▁███████████▁▁▁\",\n                \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n                \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n                \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n                \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n                \"▁▁▁▁▁▁▁▁▁▁█████████▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n            };\n        }\n        private sealed class MoonSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🌑 \",\n                \"🌒 \",\n                \"🌓 \",\n                \"🌔 \",\n                \"🌕 \",\n                \"🌖 \",\n                \"🌗 \",\n                \"🌘 \",\n            };\n        }\n        private sealed class RunnerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(140);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🚶 \",\n                \"🏃 \",\n            };\n        }\n        private sealed class PongSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▐⠂       ▌\",\n                \"▐⠈       ▌\",\n                \"▐ ⠂      ▌\",\n                \"▐ ⠠      ▌\",\n                \"▐  ⡀     ▌\",\n                \"▐  ⠠     ▌\",\n                \"▐   ⠂    ▌\",\n                \"▐   ⠈    ▌\",\n                \"▐    ⠂   ▌\",\n                \"▐    ⠠   ▌\",\n                \"▐     ⡀  ▌\",\n                \"▐     ⠠  ▌\",\n                \"▐      ⠂ ▌\",\n                \"▐      ⠈ ▌\",\n                \"▐       ⠂▌\",\n                \"▐       ⠠▌\",\n                \"▐       ⡀▌\",\n                \"▐      ⠠ ▌\",\n                \"▐      ⠂ ▌\",\n                \"▐     ⠈  ▌\",\n                \"▐     ⠂  ▌\",\n                \"▐    ⠠   ▌\",\n                \"▐    ⡀   ▌\",\n                \"▐   ⠠    ▌\",\n                \"▐   ⠂    ▌\",\n                \"▐  ⠈     ▌\",\n                \"▐  ⠂     ▌\",\n                \"▐ ⠠      ▌\",\n                \"▐ ⡀      ▌\",\n                \"▐⠠       ▌\",\n            };\n        }\n        private sealed class SharkSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▐|\\\\____________▌\",\n                \"▐_|\\\\___________▌\",\n                \"▐__|\\\\__________▌\",\n                \"▐___|\\\\_________▌\",\n                \"▐____|\\\\________▌\",\n                \"▐_____|\\\\_______▌\",\n                \"▐______|\\\\______▌\",\n                \"▐_______|\\\\_____▌\",\n                \"▐________|\\\\____▌\",\n                \"▐_________|\\\\___▌\",\n                \"▐__________|\\\\__▌\",\n                \"▐___________|\\\\_▌\",\n                \"▐____________|\\\\▌\",\n                \"▐____________/|▌\",\n                \"▐___________/|_▌\",\n                \"▐__________/|__▌\",\n                \"▐_________/|___▌\",\n                \"▐________/|____▌\",\n                \"▐_______/|_____▌\",\n                \"▐______/|______▌\",\n                \"▐_____/|_______▌\",\n                \"▐____/|________▌\",\n                \"▐___/|_________▌\",\n                \"▐__/|__________▌\",\n                \"▐_/|___________▌\",\n                \"▐/|____________▌\",\n            };\n        }\n        private sealed class DqpbSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"d\",\n                \"q\",\n                \"p\",\n                \"b\",\n            };\n        }\n        private sealed class WeatherSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"☀️ \",\n                \"☀️ \",\n                \"☀️ \",\n                \"🌤 \",\n                \"⛅️ \",\n                \"🌥 \",\n                \"☁️ \",\n                \"🌧 \",\n                \"🌨 \",\n                \"🌧 \",\n                \"🌨 \",\n                \"🌧 \",\n                \"🌨 \",\n                \"⛈ \",\n                \"🌨 \",\n                \"🌧 \",\n                \"🌨 \",\n                \"☁️ \",\n                \"🌥 \",\n                \"⛅️ \",\n                \"🌤 \",\n                \"☀️ \",\n                \"☀️ \",\n            };\n        }\n        private sealed class ChristmasSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(400);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🌲\",\n                \"🎄\",\n            };\n        }\n        private sealed class GrenadeSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"،  \",\n                \"′  \",\n                \" ´ \",\n                \" ‾ \",\n                \"  ⸌\",\n                \"  ⸊\",\n                \"  |\",\n                \"  ⁎\",\n                \"  ⁕\",\n                \" ෴ \",\n                \"  ⁓\",\n                \"   \",\n                \"   \",\n                \"   \",\n            };\n        }\n        private sealed class PointSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(125);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"∙∙∙\",\n                \"●∙∙\",\n                \"∙●∙\",\n                \"∙∙●\",\n                \"∙∙∙\",\n            };\n        }\n        private sealed class LayerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(150);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"-\",\n                \"=\",\n                \"≡\",\n            };\n        }\n        private sealed class BetaWaveSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"ρββββββ\",\n                \"βρβββββ\",\n                \"ββρββββ\",\n                \"βββρβββ\",\n                \"ββββρββ\",\n                \"βββββρβ\",\n                \"ββββββρ\",\n            };\n        }\n        private sealed class FingerDanceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🤘 \",\n                \"🤟 \",\n                \"🖖 \",\n                \"✋ \",\n                \"🤚 \",\n                \"👆 \",\n            };\n        }\n        private sealed class FistBumpSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🤜　　　　🤛 \",\n                \"🤜　　　　🤛 \",\n                \"🤜　　　　🤛 \",\n                \"　🤜　　🤛　 \",\n                \"　　🤜🤛　　 \",\n                \"　🤜✨🤛　　 \",\n                \"🤜　✨　🤛　 \",\n            };\n        }\n        private sealed class SoccerHeaderSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \" 🧑⚽️       🧑 \",\n                \"🧑  ⚽️      🧑 \",\n                \"🧑   ⚽️     🧑 \",\n                \"🧑    ⚽️    🧑 \",\n                \"🧑     ⚽️   🧑 \",\n                \"🧑      ⚽️  🧑 \",\n                \"🧑       ⚽️🧑  \",\n                \"🧑      ⚽️  🧑 \",\n                \"🧑     ⚽️   🧑 \",\n                \"🧑    ⚽️    🧑 \",\n                \"🧑   ⚽️     🧑 \",\n                \"🧑  ⚽️      🧑 \",\n            };\n        }\n        private sealed class MindblownSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"😐 \",\n                \"😐 \",\n                \"😮 \",\n                \"😮 \",\n                \"😦 \",\n                \"😦 \",\n                \"😧 \",\n                \"😧 \",\n                \"🤯 \",\n                \"💥 \",\n                \"✨ \",\n                \"　 \",\n                \"　 \",\n                \"　 \",\n            };\n        }\n        private sealed class SpeakerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🔈 \",\n                \"🔉 \",\n                \"🔊 \",\n                \"🔉 \",\n            };\n        }\n        private sealed class OrangePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🔸 \",\n                \"🔶 \",\n                \"🟠 \",\n                \"🟠 \",\n                \"🔶 \",\n            };\n        }\n        private sealed class BluePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🔹 \",\n                \"🔷 \",\n                \"🔵 \",\n                \"🔵 \",\n                \"🔷 \",\n            };\n        }\n        private sealed class OrangeBluePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🔸 \",\n                \"🔶 \",\n                \"🟠 \",\n                \"🟠 \",\n                \"🔶 \",\n                \"🔹 \",\n                \"🔷 \",\n                \"🔵 \",\n                \"🔵 \",\n                \"🔷 \",\n            };\n        }\n        private sealed class TimeTravelSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"🕛 \",\n                \"🕚 \",\n                \"🕙 \",\n                \"🕘 \",\n                \"🕗 \",\n                \"🕖 \",\n                \"🕕 \",\n                \"🕔 \",\n                \"🕓 \",\n                \"🕒 \",\n                \"🕑 \",\n                \"🕐 \",\n            };\n        }\n        private sealed class AestheticSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \"▰▱▱▱▱▱▱\",\n                \"▰▰▱▱▱▱▱\",\n                \"▰▰▰▱▱▱▱\",\n                \"▰▰▰▰▱▱▱\",\n                \"▰▰▰▰▰▱▱\",\n                \"▰▰▰▰▰▰▱\",\n                \"▰▰▰▰▰▰▰\",\n                \"▰▱▱▱▱▱▱\",\n            };\n        }\n        private sealed class DwarfFortressSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                \" ██████£££  \",\n                \"☺██████£££  \",\n                \"☺██████£££  \",\n                \"☺▓█████£££  \",\n                \"☺▓█████£££  \",\n                \"☺▒█████£££  \",\n                \"☺▒█████£££  \",\n                \"☺░█████£££  \",\n                \"☺░█████£££  \",\n                \"☺ █████£££  \",\n                \" ☺█████£££  \",\n                \" ☺█████£££  \",\n                \" ☺▓████£££  \",\n                \" ☺▓████£££  \",\n                \" ☺▒████£££  \",\n                \" ☺▒████£££  \",\n                \" ☺░████£££  \",\n                \" ☺░████£££  \",\n                \" ☺ ████£££  \",\n                \"  ☺████£££  \",\n                \"  ☺████£££  \",\n                \"  ☺▓███£££  \",\n                \"  ☺▓███£££  \",\n                \"  ☺▒███£££  \",\n                \"  ☺▒███£££  \",\n                \"  ☺░███£££  \",\n                \"  ☺░███£££  \",\n                \"  ☺ ███£££  \",\n                \"   ☺███£££  \",\n                \"   ☺███£££  \",\n                \"   ☺▓██£££  \",\n                \"   ☺▓██£££  \",\n                \"   ☺▒██£££  \",\n                \"   ☺▒██£££  \",\n                \"   ☺░██£££  \",\n                \"   ☺░██£££  \",\n                \"   ☺ ██£££  \",\n                \"    ☺██£££  \",\n                \"    ☺██£££  \",\n                \"    ☺▓█£££  \",\n                \"    ☺▓█£££  \",\n                \"    ☺▒█£££  \",\n                \"    ☺▒█£££  \",\n                \"    ☺░█£££  \",\n                \"    ☺░█£££  \",\n                \"    ☺ █£££  \",\n                \"     ☺█£££  \",\n                \"     ☺█£££  \",\n                \"     ☺▓£££  \",\n                \"     ☺▓£££  \",\n                \"     ☺▒£££  \",\n                \"     ☺▒£££  \",\n                \"     ☺░£££  \",\n                \"     ☺░£££  \",\n                \"     ☺ £££  \",\n                \"      ☺£££  \",\n                \"      ☺£££  \",\n                \"      ☺▓££  \",\n                \"      ☺▓££  \",\n                \"      ☺▒££  \",\n                \"      ☺▒££  \",\n                \"      ☺░££  \",\n                \"      ☺░££  \",\n                \"      ☺ ££  \",\n                \"       ☺££  \",\n                \"       ☺££  \",\n                \"       ☺▓£  \",\n                \"       ☺▓£  \",\n                \"       ☺▒£  \",\n                \"       ☺▒£  \",\n                \"       ☺░£  \",\n                \"       ☺░£  \",\n                \"       ☺ £  \",\n                \"        ☺£  \",\n                \"        ☺£  \",\n                \"        ☺▓  \",\n                \"        ☺▓  \",\n                \"        ☺▒  \",\n                \"        ☺▒  \",\n                \"        ☺░  \",\n                \"        ☺░  \",\n                \"        ☺   \",\n                \"        ☺  &\",\n                \"        ☺ ☼&\",\n                \"       ☺ ☼ &\",\n                \"       ☺☼  &\",\n                \"      ☺☼  & \",\n                \"      ‼   & \",\n                \"     ☺   &  \",\n                \"    ‼    &  \",\n                \"   ☺    &   \",\n                \"  ‼     &   \",\n                \" ☺     &    \",\n                \"‼      &    \",\n                \"      &     \",\n                \"      &     \",\n                \"     &   ░  \",\n                \"     &   ▒  \",\n                \"    &    ▓  \",\n                \"    &    £  \",\n                \"   &    ░£  \",\n                \"   &    ▒£  \",\n                \"  &     ▓£  \",\n                \"  &     ££  \",\n                \" &     ░££  \",\n                \" &     ▒££  \",\n                \"&      ▓££  \",\n                \"&      £££  \",\n                \"      ░£££  \",\n                \"      ▒£££  \",\n                \"      ▓£££  \",\n                \"      █£££  \",\n                \"     ░█£££  \",\n                \"     ▒█£££  \",\n                \"     ▓█£££  \",\n                \"     ██£££  \",\n                \"    ░██£££  \",\n                \"    ▒██£££  \",\n                \"    ▓██£££  \",\n                \"    ███£££  \",\n                \"   ░███£££  \",\n                \"   ▒███£££  \",\n                \"   ▓███£££  \",\n                \"   ████£££  \",\n                \"  ░████£££  \",\n                \"  ▒████£££  \",\n                \"  ▓████£££  \",\n                \"  █████£££  \",\n                \" ░█████£££  \",\n                \" ▒█████£££  \",\n                \" ▓█████£££  \",\n                \" ██████£££  \",\n                \" ██████£££  \",\n            };\n        }\n        /// <summary>\n        /// Contains well-known spinners.\n        /// </summary>\n        public static class Known\n        {\n            /// <summary>\n            /// Gets the \"Default\" spinner.\n            /// </summary>\n            public static Spinner Default { get; } = new DefaultSpinner();\n            /// <summary>\n            /// Gets the \"Ascii\" spinner.\n            /// </summary>\n            public static Spinner Ascii { get; } = new AsciiSpinner();\n            /// <summary>\n            /// Gets the \"dots\" spinner.\n            /// </summary>\n            public static Spinner Dots { get; } = new DotsSpinner();\n            /// <summary>\n            /// Gets the \"dots2\" spinner.\n            /// </summary>\n            public static Spinner Dots2 { get; } = new Dots2Spinner();\n            /// <summary>\n            /// Gets the \"dots3\" spinner.\n            /// </summary>\n            public static Spinner Dots3 { get; } = new Dots3Spinner();\n            /// <summary>\n            /// Gets the \"dots4\" spinner.\n            /// </summary>\n            public static Spinner Dots4 { get; } = new Dots4Spinner();\n            /// <summary>\n            /// Gets the \"dots5\" spinner.\n            /// </summary>\n            public static Spinner Dots5 { get; } = new Dots5Spinner();\n            /// <summary>\n            /// Gets the \"dots6\" spinner.\n            /// </summary>\n            public static Spinner Dots6 { get; } = new Dots6Spinner();\n            /// <summary>\n            /// Gets the \"dots7\" spinner.\n            /// </summary>\n            public static Spinner Dots7 { get; } = new Dots7Spinner();\n            /// <summary>\n            /// Gets the \"dots8\" spinner.\n            /// </summary>\n            public static Spinner Dots8 { get; } = new Dots8Spinner();\n            /// <summary>\n            /// Gets the \"dots9\" spinner.\n            /// </summary>\n            public static Spinner Dots9 { get; } = new Dots9Spinner();\n            /// <summary>\n            /// Gets the \"dots10\" spinner.\n            /// </summary>\n            public static Spinner Dots10 { get; } = new Dots10Spinner();\n            /// <summary>\n            /// Gets the \"dots11\" spinner.\n            /// </summary>\n            public static Spinner Dots11 { get; } = new Dots11Spinner();\n            /// <summary>\n            /// Gets the \"dots12\" spinner.\n            /// </summary>\n            public static Spinner Dots12 { get; } = new Dots12Spinner();\n            /// <summary>\n            /// Gets the \"dots13\" spinner.\n            /// </summary>\n            public static Spinner Dots13 { get; } = new Dots13Spinner();\n            /// <summary>\n            /// Gets the \"dots14\" spinner.\n            /// </summary>\n            public static Spinner Dots14 { get; } = new Dots14Spinner();\n            /// <summary>\n            /// Gets the \"dots8Bit\" spinner.\n            /// </summary>\n            public static Spinner Dots8Bit { get; } = new Dots8BitSpinner();\n            /// <summary>\n            /// Gets the \"dotsCircle\" spinner.\n            /// </summary>\n            public static Spinner DotsCircle { get; } = new DotsCircleSpinner();\n            /// <summary>\n            /// Gets the \"sand\" spinner.\n            /// </summary>\n            public static Spinner Sand { get; } = new SandSpinner();\n            /// <summary>\n            /// Gets the \"line\" spinner.\n            /// </summary>\n            public static Spinner Line { get; } = new LineSpinner();\n            /// <summary>\n            /// Gets the \"line2\" spinner.\n            /// </summary>\n            public static Spinner Line2 { get; } = new Line2Spinner();\n            /// <summary>\n            /// Gets the \"pipe\" spinner.\n            /// </summary>\n            public static Spinner Pipe { get; } = new PipeSpinner();\n            /// <summary>\n            /// Gets the \"simpleDots\" spinner.\n            /// </summary>\n            public static Spinner SimpleDots { get; } = new SimpleDotsSpinner();\n            /// <summary>\n            /// Gets the \"simpleDotsScrolling\" spinner.\n            /// </summary>\n            public static Spinner SimpleDotsScrolling { get; } = new SimpleDotsScrollingSpinner();\n            /// <summary>\n            /// Gets the \"star\" spinner.\n            /// </summary>\n            public static Spinner Star { get; } = new StarSpinner();\n            /// <summary>\n            /// Gets the \"star2\" spinner.\n            /// </summary>\n            public static Spinner Star2 { get; } = new Star2Spinner();\n            /// <summary>\n            /// Gets the \"flip\" spinner.\n            /// </summary>\n            public static Spinner Flip { get; } = new FlipSpinner();\n            /// <summary>\n            /// Gets the \"hamburger\" spinner.\n            /// </summary>\n            public static Spinner Hamburger { get; } = new HamburgerSpinner();\n            /// <summary>\n            /// Gets the \"growVertical\" spinner.\n            /// </summary>\n            public static Spinner GrowVertical { get; } = new GrowVerticalSpinner();\n            /// <summary>\n            /// Gets the \"growHorizontal\" spinner.\n            /// </summary>\n            public static Spinner GrowHorizontal { get; } = new GrowHorizontalSpinner();\n            /// <summary>\n            /// Gets the \"balloon\" spinner.\n            /// </summary>\n            public static Spinner Balloon { get; } = new BalloonSpinner();\n            /// <summary>\n            /// Gets the \"balloon2\" spinner.\n            /// </summary>\n            public static Spinner Balloon2 { get; } = new Balloon2Spinner();\n            /// <summary>\n            /// Gets the \"noise\" spinner.\n            /// </summary>\n            public static Spinner Noise { get; } = new NoiseSpinner();\n            /// <summary>\n            /// Gets the \"bounce\" spinner.\n            /// </summary>\n            public static Spinner Bounce { get; } = new BounceSpinner();\n            /// <summary>\n            /// Gets the \"boxBounce\" spinner.\n            /// </summary>\n            public static Spinner BoxBounce { get; } = new BoxBounceSpinner();\n            /// <summary>\n            /// Gets the \"boxBounce2\" spinner.\n            /// </summary>\n            public static Spinner BoxBounce2 { get; } = new BoxBounce2Spinner();\n            /// <summary>\n            /// Gets the \"triangle\" spinner.\n            /// </summary>\n            public static Spinner Triangle { get; } = new TriangleSpinner();\n            /// <summary>\n            /// Gets the \"binary\" spinner.\n            /// </summary>\n            public static Spinner Binary { get; } = new BinarySpinner();\n            /// <summary>\n            /// Gets the \"arc\" spinner.\n            /// </summary>\n            public static Spinner Arc { get; } = new ArcSpinner();\n            /// <summary>\n            /// Gets the \"circle\" spinner.\n            /// </summary>\n            public static Spinner Circle { get; } = new CircleSpinner();\n            /// <summary>\n            /// Gets the \"squareCorners\" spinner.\n            /// </summary>\n            public static Spinner SquareCorners { get; } = new SquareCornersSpinner();\n            /// <summary>\n            /// Gets the \"circleQuarters\" spinner.\n            /// </summary>\n            public static Spinner CircleQuarters { get; } = new CircleQuartersSpinner();\n            /// <summary>\n            /// Gets the \"circleHalves\" spinner.\n            /// </summary>\n            public static Spinner CircleHalves { get; } = new CircleHalvesSpinner();\n            /// <summary>\n            /// Gets the \"squish\" spinner.\n            /// </summary>\n            public static Spinner Squish { get; } = new SquishSpinner();\n            /// <summary>\n            /// Gets the \"toggle\" spinner.\n            /// </summary>\n            public static Spinner Toggle { get; } = new ToggleSpinner();\n            /// <summary>\n            /// Gets the \"toggle2\" spinner.\n            /// </summary>\n            public static Spinner Toggle2 { get; } = new Toggle2Spinner();\n            /// <summary>\n            /// Gets the \"toggle3\" spinner.\n            /// </summary>\n            public static Spinner Toggle3 { get; } = new Toggle3Spinner();\n            /// <summary>\n            /// Gets the \"toggle4\" spinner.\n            /// </summary>\n            public static Spinner Toggle4 { get; } = new Toggle4Spinner();\n            /// <summary>\n            /// Gets the \"toggle5\" spinner.\n            /// </summary>\n            public static Spinner Toggle5 { get; } = new Toggle5Spinner();\n            /// <summary>\n            /// Gets the \"toggle6\" spinner.\n            /// </summary>\n            public static Spinner Toggle6 { get; } = new Toggle6Spinner();\n            /// <summary>\n            /// Gets the \"toggle7\" spinner.\n            /// </summary>\n            public static Spinner Toggle7 { get; } = new Toggle7Spinner();\n            /// <summary>\n            /// Gets the \"toggle8\" spinner.\n            /// </summary>\n            public static Spinner Toggle8 { get; } = new Toggle8Spinner();\n            /// <summary>\n            /// Gets the \"toggle9\" spinner.\n            /// </summary>\n            public static Spinner Toggle9 { get; } = new Toggle9Spinner();\n            /// <summary>\n            /// Gets the \"toggle10\" spinner.\n            /// </summary>\n            public static Spinner Toggle10 { get; } = new Toggle10Spinner();\n            /// <summary>\n            /// Gets the \"toggle11\" spinner.\n            /// </summary>\n            public static Spinner Toggle11 { get; } = new Toggle11Spinner();\n            /// <summary>\n            /// Gets the \"toggle12\" spinner.\n            /// </summary>\n            public static Spinner Toggle12 { get; } = new Toggle12Spinner();\n            /// <summary>\n            /// Gets the \"toggle13\" spinner.\n            /// </summary>\n            public static Spinner Toggle13 { get; } = new Toggle13Spinner();\n            /// <summary>\n            /// Gets the \"arrow\" spinner.\n            /// </summary>\n            public static Spinner Arrow { get; } = new ArrowSpinner();\n            /// <summary>\n            /// Gets the \"arrow2\" spinner.\n            /// </summary>\n            public static Spinner Arrow2 { get; } = new Arrow2Spinner();\n            /// <summary>\n            /// Gets the \"arrow3\" spinner.\n            /// </summary>\n            public static Spinner Arrow3 { get; } = new Arrow3Spinner();\n            /// <summary>\n            /// Gets the \"bouncingBar\" spinner.\n            /// </summary>\n            public static Spinner BouncingBar { get; } = new BouncingBarSpinner();\n            /// <summary>\n            /// Gets the \"bouncingBall\" spinner.\n            /// </summary>\n            public static Spinner BouncingBall { get; } = new BouncingBallSpinner();\n            /// <summary>\n            /// Gets the \"smiley\" spinner.\n            /// </summary>\n            public static Spinner Smiley { get; } = new SmileySpinner();\n            /// <summary>\n            /// Gets the \"monkey\" spinner.\n            /// </summary>\n            public static Spinner Monkey { get; } = new MonkeySpinner();\n            /// <summary>\n            /// Gets the \"hearts\" spinner.\n            /// </summary>\n            public static Spinner Hearts { get; } = new HeartsSpinner();\n            /// <summary>\n            /// Gets the \"clock\" spinner.\n            /// </summary>\n            public static Spinner Clock { get; } = new ClockSpinner();\n            /// <summary>\n            /// Gets the \"earth\" spinner.\n            /// </summary>\n            public static Spinner Earth { get; } = new EarthSpinner();\n            /// <summary>\n            /// Gets the \"material\" spinner.\n            /// </summary>\n            public static Spinner Material { get; } = new MaterialSpinner();\n            /// <summary>\n            /// Gets the \"moon\" spinner.\n            /// </summary>\n            public static Spinner Moon { get; } = new MoonSpinner();\n            /// <summary>\n            /// Gets the \"runner\" spinner.\n            /// </summary>\n            public static Spinner Runner { get; } = new RunnerSpinner();\n            /// <summary>\n            /// Gets the \"pong\" spinner.\n            /// </summary>\n            public static Spinner Pong { get; } = new PongSpinner();\n            /// <summary>\n            /// Gets the \"shark\" spinner.\n            /// </summary>\n            public static Spinner Shark { get; } = new SharkSpinner();\n            /// <summary>\n            /// Gets the \"dqpb\" spinner.\n            /// </summary>\n            public static Spinner Dqpb { get; } = new DqpbSpinner();\n            /// <summary>\n            /// Gets the \"weather\" spinner.\n            /// </summary>\n            public static Spinner Weather { get; } = new WeatherSpinner();\n            /// <summary>\n            /// Gets the \"christmas\" spinner.\n            /// </summary>\n            public static Spinner Christmas { get; } = new ChristmasSpinner();\n            /// <summary>\n            /// Gets the \"grenade\" spinner.\n            /// </summary>\n            public static Spinner Grenade { get; } = new GrenadeSpinner();\n            /// <summary>\n            /// Gets the \"point\" spinner.\n            /// </summary>\n            public static Spinner Point { get; } = new PointSpinner();\n            /// <summary>\n            /// Gets the \"layer\" spinner.\n            /// </summary>\n            public static Spinner Layer { get; } = new LayerSpinner();\n            /// <summary>\n            /// Gets the \"betaWave\" spinner.\n            /// </summary>\n            public static Spinner BetaWave { get; } = new BetaWaveSpinner();\n            /// <summary>\n            /// Gets the \"fingerDance\" spinner.\n            /// </summary>\n            public static Spinner FingerDance { get; } = new FingerDanceSpinner();\n            /// <summary>\n            /// Gets the \"fistBump\" spinner.\n            /// </summary>\n            public static Spinner FistBump { get; } = new FistBumpSpinner();\n            /// <summary>\n            /// Gets the \"soccerHeader\" spinner.\n            /// </summary>\n            public static Spinner SoccerHeader { get; } = new SoccerHeaderSpinner();\n            /// <summary>\n            /// Gets the \"mindblown\" spinner.\n            /// </summary>\n            public static Spinner Mindblown { get; } = new MindblownSpinner();\n            /// <summary>\n            /// Gets the \"speaker\" spinner.\n            /// </summary>\n            public static Spinner Speaker { get; } = new SpeakerSpinner();\n            /// <summary>\n            /// Gets the \"orangePulse\" spinner.\n            /// </summary>\n            public static Spinner OrangePulse { get; } = new OrangePulseSpinner();\n            /// <summary>\n            /// Gets the \"bluePulse\" spinner.\n            /// </summary>\n            public static Spinner BluePulse { get; } = new BluePulseSpinner();\n            /// <summary>\n            /// Gets the \"orangeBluePulse\" spinner.\n            /// </summary>\n            public static Spinner OrangeBluePulse { get; } = new OrangeBluePulseSpinner();\n            /// <summary>\n            /// Gets the \"timeTravel\" spinner.\n            /// </summary>\n            public static Spinner TimeTravel { get; } = new TimeTravelSpinner();\n            /// <summary>\n            /// Gets the \"aesthetic\" spinner.\n            /// </summary>\n            public static Spinner Aesthetic { get; } = new AestheticSpinner();\n            /// <summary>\n            /// Gets the \"dwarfFortress\" spinner.\n            /// </summary>\n            public static Spinner DwarfFortress { get; } = new DwarfFortressSpinner();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/HorizontalAlignment.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents horizontal alignment.\n/// </summary>\npublic enum HorizontalAlignment\n{\n    /// <summary>\n    /// Left aligned.\n    /// </summary>\n    Left,\n\n    /// <summary>\n    /// Centered.\n    /// </summary>\n    Center,\n\n    /// <summary>\n    /// Right aligned.\n    /// </summary>\n    Right,\n}"
  },
  {
    "path": "src/Spectre.Console/IAlignable.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that is alignable.\n/// </summary>\npublic interface IAlignable\n{\n    /// <summary>\n    /// Gets or sets the alignment.\n    /// </summary>\n    Justify? Alignment { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAlignable\"/>.\n/// </summary>\npublic static class AlignableExtensions\n{\n    /// <summary>\n    /// Sets the alignment for an <see cref=\"IAlignable\"/> object.\n    /// </summary>\n    /// <typeparam name=\"T\">The alignable object type.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <param name=\"alignment\">The alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Alignment<T>(this T obj, Justify? alignment)\n        where T : class, IAlignable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Alignment = alignment;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IAlignable\"/> object to be left aligned.\n    /// </summary>\n    /// <typeparam name=\"T\">The alignable type.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T LeftAligned<T>(this T obj)\n        where T : class, IAlignable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Alignment = Justify.Left;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IAlignable\"/> object to be centered.\n    /// </summary>\n    /// <typeparam name=\"T\">The alignable type.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Centered<T>(this T obj)\n        where T : class, IAlignable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Alignment = Justify.Center;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IAlignable\"/> object to be right aligned.\n    /// </summary>\n    /// <typeparam name=\"T\">The alignable type.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T RightAligned<T>(this T obj)\n        where T : class, IAlignable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Alignment = Justify.Right;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IAnsiConsole.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a console.\n/// </summary>\npublic interface IAnsiConsole\n{\n    /// <summary>\n    /// Gets the console profile.\n    /// </summary>\n    Profile Profile { get; }\n\n    /// <summary>\n    /// Gets the console cursor.\n    /// </summary>\n    IAnsiConsoleCursor Cursor { get; }\n\n    /// <summary>\n    /// Gets the console input.\n    /// </summary>\n    IAnsiConsoleInput Input { get; }\n\n    /// <summary>\n    /// Gets the exclusivity mode.\n    /// </summary>\n    IExclusivityMode ExclusivityMode { get; }\n\n    /// <summary>\n    /// Gets the render pipeline.\n    /// </summary>\n    RenderPipeline Pipeline { get; }\n\n    /// <summary>\n    /// Clears the console.\n    /// </summary>\n    /// <param name=\"home\">If the cursor should be moved to the home position.</param>\n    void Clear(bool home);\n\n    /// <summary>\n    /// Writes a <see cref=\"IRenderable\"/> to the console.\n    /// </summary>\n    /// <param name=\"renderable\">The <see cref=\"IRenderable\"/> to write.</param>\n    void Write(IRenderable renderable);\n\n    /// <summary>\n    /// Writes ANSI/VT escapes sequences to the console.\n    /// </summary>\n    /// <param name=\"action\">The <see cref=\"AnsiWriter\"/> action.</param>\n    void WriteAnsi(Action<AnsiWriter> action);\n}"
  },
  {
    "path": "src/Spectre.Console/IAnsiConsoleCursor.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents the console's cursor.\n/// </summary>\npublic interface IAnsiConsoleCursor\n{\n    /// <summary>\n    /// Shows or hides the cursor.\n    /// </summary>\n    /// <param name=\"show\"><c>true</c> to show the cursor, <c>false</c> to hide it.</param>\n    void Show(bool show);\n\n    /// <summary>\n    /// Sets the cursor position.\n    /// </summary>\n    /// <param name=\"column\">The column to move the cursor to.</param>\n    /// <param name=\"line\">The line to move the cursor to.</param>\n    void SetPosition(int column, int line);\n\n    /// <summary>\n    /// Moves the cursor relative to the current position.\n    /// </summary>\n    /// <param name=\"direction\">The direction to move the cursor.</param>\n    /// <param name=\"steps\">The number of steps to move the cursor.</param>\n    void Move(CursorDirection direction, int steps);\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IAnsiConsoleCursor\"/>.\n/// </summary>\npublic static class CursorExtensions\n{\n    /// <summary>\n    /// Shows the cursor.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void Show(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Show(true);\n    }\n\n    /// <summary>\n    /// Hides the cursor.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void Hide(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Show(false);\n    }\n\n    /// <summary>\n    /// Moves the cursor up.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void MoveUp(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Up, 1);\n    }\n\n    /// <summary>\n    /// Moves the cursor up.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    /// <param name=\"steps\">The number of steps to move the cursor.</param>\n    public static void MoveUp(this IAnsiConsoleCursor cursor, int steps)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Up, steps);\n    }\n\n    /// <summary>\n    /// Moves the cursor down.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void MoveDown(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Down, 1);\n    }\n\n    /// <summary>\n    /// Moves the cursor down.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    /// <param name=\"steps\">The number of steps to move the cursor.</param>\n    public static void MoveDown(this IAnsiConsoleCursor cursor, int steps)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Down, steps);\n    }\n\n    /// <summary>\n    /// Moves the cursor to the left.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void MoveLeft(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Left, 1);\n    }\n\n    /// <summary>\n    /// Moves the cursor to the left.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    /// <param name=\"steps\">The number of steps to move the cursor.</param>\n    public static void MoveLeft(this IAnsiConsoleCursor cursor, int steps)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Left, steps);\n    }\n\n    /// <summary>\n    /// Moves the cursor to the right.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    public static void MoveRight(this IAnsiConsoleCursor cursor)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Right, 1);\n    }\n\n    /// <summary>\n    /// Moves the cursor to the right.\n    /// </summary>\n    /// <param name=\"cursor\">The cursor.</param>\n    /// <param name=\"steps\">The number of steps to move the cursor.</param>\n    public static void MoveRight(this IAnsiConsoleCursor cursor, int steps)\n    {\n        ArgumentNullException.ThrowIfNull(cursor);\n\n        cursor.Move(CursorDirection.Right, steps);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IAnsiConsoleInput.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents the console's input mechanism.\n/// </summary>\npublic interface IAnsiConsoleInput\n{\n    /// <summary>\n    /// Gets a value indicating whether or not\n    /// there is a key available.\n    /// </summary>\n    /// <returns><c>true</c> if there's a key available, otherwise <c>false</c>.</returns>\n    bool IsKeyAvailable();\n\n    /// <summary>\n    /// Reads a key from the console.\n    /// </summary>\n    /// <param name=\"intercept\">Whether or not to intercept the key.</param>\n    /// <returns>The key that was read.</returns>\n    ConsoleKeyInfo? ReadKey(bool intercept);\n\n    /// <summary>\n    /// Reads a key from the console.\n    /// </summary>\n    /// <param name=\"intercept\">Whether or not to intercept the key.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The key that was read.</returns>\n    Task<ConsoleKeyInfo?> ReadKeyAsync(bool intercept, CancellationToken cancellationToken);\n}"
  },
  {
    "path": "src/Spectre.Console/IAnsiConsoleOutput.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents console output.\n/// </summary>\npublic interface IAnsiConsoleOutput\n{\n    /// <summary>\n    /// Gets the <see cref=\"TextWriter\"/> used to write to the output.\n    /// </summary>\n    TextWriter Writer { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not the output is a terminal.\n    /// </summary>\n    bool IsTerminal { get; }\n\n    /// <summary>\n    /// Gets the output width.\n    /// </summary>\n    int Width { get; }\n\n    /// <summary>\n    /// Gets the output height.\n    /// </summary>\n    int Height { get; }\n\n    /// <summary>\n    /// Sets the output encoding.\n    /// </summary>\n    /// <param name=\"encoding\">The encoding.</param>\n    void SetEncoding(Encoding encoding);\n}"
  },
  {
    "path": "src/Spectre.Console/IColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a column.\n/// </summary>\npublic interface IColumn : IAlignable, IPaddable\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether\n    /// or not wrapping should be prevented.\n    /// </summary>\n    bool NoWrap { get; set; }\n\n    /// <summary>\n    /// Gets or sets the width of the column.\n    /// </summary>\n    int? Width { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IColumn\"/>.\n/// </summary>\npublic static class ColumnExtensions\n{\n    /// <summary>\n    /// Prevents a column from wrapping.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IColumn\"/>.</typeparam>\n    /// <param name=\"obj\">The column.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T NoWrap<T>(this T obj)\n        where T : class, IColumn\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.NoWrap = true;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the width of the column.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IColumn\"/>.</typeparam>\n    /// <param name=\"obj\">The column.</param>\n    /// <param name=\"width\">The column width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Width<T>(this T obj, int? width)\n        where T : class, IColumn\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Width = width;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IExclusivityMode.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents an exclusivity mode.\n/// </summary>\npublic interface IExclusivityMode\n{\n    /// <summary>\n    /// Runs the specified function in exclusive mode.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"func\">The func to run in exclusive mode.</param>\n    /// <returns>The result of the function.</returns>\n    T Run<T>(Func<T> func);\n\n    /// <summary>\n    /// Runs the specified function in exclusive mode asynchronously.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"func\">The func to run in exclusive mode.</param>\n    /// <returns>The result of the function.</returns>\n    Task<T> RunAsync<T>(Func<Task<T>> func);\n}"
  },
  {
    "path": "src/Spectre.Console/IExpandable.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that is expandable.\n/// </summary>\npublic interface IExpandable\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the object should\n    /// expand to the available space. If <c>false</c>, the object's\n    /// width will be auto calculated.\n    /// </summary>\n    bool Expand { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IExpandable\"/>.\n/// </summary>\npublic static class ExpandableExtensions\n{\n    /// <summary>\n    /// Tells the specified object to not expand to the available area\n    /// but take as little space as possible.\n    /// </summary>\n    /// <typeparam name=\"T\">The expandable object.</typeparam>\n    /// <param name=\"obj\">The object to collapse.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Collapse<T>(this T obj)\n        where T : class, IExpandable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Expand = false;\n        return obj;\n    }\n\n    /// <summary>\n    /// Tells the specified object to expand to the available area.\n    /// </summary>\n    /// <typeparam name=\"T\">The expandable object.</typeparam>\n    /// <param name=\"obj\">The object to expand.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Expand<T>(this T obj)\n        where T : class, IExpandable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Expand = true;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasBorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has a border.\n/// </summary>\npublic interface IHasBorder\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or not to use\n    /// a \"safe\" border on legacy consoles that might not be able\n    /// to render non-ASCII characters.\n    /// </summary>\n    bool UseSafeBorder { get; set; }\n\n    /// <summary>\n    /// Gets or sets the box style.\n    /// </summary>\n    public Style? BorderStyle { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasBorder\"/>.\n/// </summary>\npublic static class HasBorderExtensions\n{\n    /// <summary>\n    /// Enables the safe border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to enable the safe border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T SafeBorder<T>(this T obj)\n        where T : class, IHasBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.UseSafeBorder = true;\n        return obj;\n    }\n\n    /// <summary>\n    /// Disables the safe border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to disable the safe border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T NoSafeBorder<T>(this T obj)\n        where T : class, IHasBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.UseSafeBorder = false;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the border style.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border style for.</param>\n    /// <param name=\"style\">The border style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T BorderStyle<T>(this T obj, Style style)\n        where T : class, IHasBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.BorderStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the border color.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border color for.</param>\n    /// <param name=\"color\">The border color to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T BorderColor<T>(this T obj, Color color)\n        where T : class, IHasBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.BorderStyle = (obj.BorderStyle ?? Style.Plain).Foreground(color);\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasBoxBorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has a box border.\n/// </summary>\npublic interface IHasBoxBorder\n{\n    /// <summary>\n    /// Gets or sets the box.\n    /// </summary>\n    public BoxBorder Border { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasBoxBorder\"/>.\n/// </summary>\npublic static class HasBoxBorderExtensions\n{\n    /// <summary>\n    /// Sets the border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <param name=\"border\">The border to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Border<T>(this T obj, BoxBorder border)\n        where T : class, IHasBoxBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Border = border;\n        return obj;\n    }\n\n    /// <summary>\n    /// Do not display a border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T NoBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.None);\n    }\n\n    /// <summary>\n    /// Display a square border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T SquareBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.Square);\n    }\n\n    /// <summary>\n    /// Display an ASCII border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T AsciiBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.Ascii);\n    }\n\n    /// <summary>\n    /// Display a rounded border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T RoundedBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.Rounded);\n    }\n\n    /// <summary>\n    /// Display a heavy border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T HeavyBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.Heavy);\n    }\n\n    /// <summary>\n    /// Display a double border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T DoubleBorder<T>(this T obj)\n        where T : class, IHasBoxBorder\n    {\n        return Border(obj, BoxBorder.Double);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasCulture.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has a culture.\n/// </summary>\npublic interface IHasCulture\n{\n    /// <summary>\n    /// Gets or sets the culture.\n    /// </summary>\n    CultureInfo? Culture { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasCulture\"/>.\n/// </summary>\npublic static class HasCultureExtensions\n{\n    /// <summary>\n    /// Sets the culture.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a culture.</typeparam>\n    /// <param name=\"obj\">The object to set the culture for.</param>\n    /// <param name=\"culture\">The culture to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Culture<T>(this T obj, CultureInfo culture)\n        where T : class, IHasCulture\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n        ArgumentNullException.ThrowIfNull(culture);\n\n        obj.Culture = culture;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the culture.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a culture.</typeparam>\n    /// <param name=\"obj\">The object to set the culture for.</param>\n    /// <param name=\"name\">The culture to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Culture<T>(this T obj, string name)\n        where T : class, IHasCulture\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n        ArgumentNullException.ThrowIfNull(name);\n\n        return Culture(obj, CultureInfo.GetCultureInfo(name));\n    }\n\n    /// <summary>\n    /// Sets the culture.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a culture.</typeparam>\n    /// <param name=\"obj\">The object to set the culture for.</param>\n    /// <param name=\"culture\">The culture to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Culture<T>(this T obj, int culture)\n        where T : class, IHasCulture\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Culture(obj, CultureInfo.GetCultureInfo(culture));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasJustification.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has justification.\n/// </summary>\npublic interface IHasJustification\n{\n    /// <summary>\n    /// Gets or sets the justification.\n    /// </summary>\n    Justify? Justification { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasJustification\"/>.\n/// </summary>\npublic static class HasJustificationExtensions\n{\n    /// <summary>\n    /// Sets the justification for an <see cref=\"IHasJustification\"/> object.\n    /// </summary>\n    /// <typeparam name=\"T\">The type that can be justified.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <param name=\"alignment\">The alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Justify<T>(this T obj, Justify? alignment)\n        where T : class, IHasJustification\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Justification = alignment;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IHasJustification\"/> object to be left justified.\n    /// </summary>\n    /// <typeparam name=\"T\">The type that can be justified.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T LeftJustified<T>(this T obj)\n        where T : class, IHasJustification\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Justification = Console.Justify.Left;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IHasJustification\"/> object to be centered.\n    /// </summary>\n    /// <typeparam name=\"T\">The type that can be justified.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Centered<T>(this T obj)\n        where T : class, IHasJustification\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Justification = Console.Justify.Center;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"IHasJustification\"/> object to be right justified.\n    /// </summary>\n    /// <typeparam name=\"T\">The type that can be justified.</typeparam>\n    /// <param name=\"obj\">The alignable object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T RightJustified<T>(this T obj)\n        where T : class, IHasJustification\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Justification = Console.Justify.Right;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasTableBorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has a border.\n/// </summary>\npublic interface IHasTableBorder : IHasBorder\n{\n    /// <summary>\n    /// Gets or sets the border.\n    /// </summary>\n    public TableBorder Border { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasTableBorder\"/>.\n/// </summary>\npublic static class HasTableBorderExtensions\n{\n    /// <summary>\n    /// Do not display a border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T NoBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.None);\n    }\n\n    /// <summary>\n    /// Display a square border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T SquareBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Square);\n    }\n\n    /// <summary>\n    /// Display an ASCII border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T AsciiBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Ascii);\n    }\n\n    /// <summary>\n    /// Display another ASCII border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Ascii2Border<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Ascii2);\n    }\n\n    /// <summary>\n    /// Display an ASCII border with a double header border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T AsciiDoubleHeadBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.AsciiDoubleHead);\n    }\n\n    /// <summary>\n    /// Display a rounded border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T RoundedBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Rounded);\n    }\n\n    /// <summary>\n    /// Display a minimal border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T MinimalBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Minimal);\n    }\n\n    /// <summary>\n    /// Display a minimal border with a heavy head.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T MinimalHeavyHeadBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.MinimalHeavyHead);\n    }\n\n    /// <summary>\n    /// Display a minimal border with a double header border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T MinimalDoubleHeadBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.MinimalDoubleHead);\n    }\n\n    /// <summary>\n    /// Display a simple border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T SimpleBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Simple);\n    }\n\n    /// <summary>\n    /// Display a simple border with heavy lines.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T SimpleHeavyBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.SimpleHeavy);\n    }\n\n    /// <summary>\n    /// Display a simple border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T HorizontalBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Horizontal);\n    }\n\n    /// <summary>\n    /// Display a heavy border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T HeavyBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Heavy);\n    }\n\n    /// <summary>\n    /// Display a border with a heavy edge.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T HeavyEdgeBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.HeavyEdge);\n    }\n\n    /// <summary>\n    /// Display a border with a heavy header.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T HeavyHeadBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.HeavyHead);\n    }\n\n    /// <summary>\n    /// Display a double border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T DoubleBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Double);\n    }\n\n    /// <summary>\n    /// Display a border with a double edge.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T DoubleEdgeBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.DoubleEdge);\n    }\n\n    /// <summary>\n    /// Display a minimalist border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T MinimalistBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Minimalist);\n    }\n\n    /// <summary>\n    /// Display a markdown border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T MarkdownBorder<T>(this T obj)\n        where T : class, IHasTableBorder\n    {\n        return Border(obj, TableBorder.Markdown);\n    }\n\n    /// <summary>\n    /// Sets the border.\n    /// </summary>\n    /// <typeparam name=\"T\">An object type with a border.</typeparam>\n    /// <param name=\"obj\">The object to set the border for.</param>\n    /// <param name=\"border\">The border to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Border<T>(this T obj, TableBorder border)\n        where T : class, IHasTableBorder\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Border = border;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasTreeNodes.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that has tree nodes.\n/// </summary>\npublic interface IHasTreeNodes\n{\n    /// <summary>\n    /// Gets the tree's child nodes.\n    /// </summary>\n    List<TreeNode> Nodes { get; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasTreeNodes\"/>.\n/// </summary>\npublic static class HasTreeNodeExtensions\n{\n    /// <summary>\n    /// Adds a tree node.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree node to.</param>\n    /// <param name=\"markup\">The node's markup text.</param>\n    /// <returns>The added tree node.</returns>\n    public static TreeNode AddNode<T>(this T obj, string markup)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(markup);\n\n        return AddNode(obj, new Markup(markup));\n    }\n\n    /// <summary>\n    /// Adds a tree node.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree node to.</param>\n    /// <param name=\"renderable\">The renderable to add.</param>\n    /// <returns>The added tree node.</returns>\n    public static TreeNode AddNode<T>(this T obj, IRenderable renderable)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(renderable);\n\n        var node = new TreeNode(renderable);\n        obj.Nodes.Add(node);\n        return node;\n    }\n\n    /// <summary>\n    /// Adds a tree node.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree node to.</param>\n    /// <param name=\"node\">The tree node to add.</param>\n    /// <returns>The added tree node.</returns>\n    public static TreeNode AddNode<T>(this T obj, TreeNode node)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(node);\n\n        obj.Nodes.Add(node);\n        return node;\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, params string[] nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes.Select(node => new TreeNode(new Markup(node))));\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, IEnumerable<string> nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes.Select(node => new TreeNode(new Markup(node))));\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, params IRenderable[] nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes.Select(node => new TreeNode(node)));\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, IEnumerable<IRenderable> nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes.Select(node => new TreeNode(node)));\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, params TreeNode[] nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes);\n    }\n\n    /// <summary>\n    /// Add multiple tree nodes.\n    /// </summary>\n    /// <typeparam name=\"T\">An object with tree nodes.</typeparam>\n    /// <param name=\"obj\">The object to add the tree nodes to.</param>\n    /// <param name=\"nodes\">The tree nodes to add.</param>\n    public static void AddNodes<T>(this T obj, IEnumerable<TreeNode> nodes)\n        where T : IHasTreeNodes\n    {\n        if (obj is null)\n        {\n            throw new ArgumentNullException(nameof(obj));\n        }\n\n        ArgumentNullException.ThrowIfNull(nodes);\n\n        obj.Nodes.AddRange(nodes);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IHasVisibility.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that can be hidden.\n/// </summary>\npublic interface IHasVisibility\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the object should\n    /// be visible or not.\n    /// </summary>\n    bool IsVisible { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IHasVisibility\"/>.\n/// </summary>\npublic static class VisibilityExtensions\n{\n    /// <summary>\n    /// Marks the specified object as being invisible.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IHasVisibility\"/>.</typeparam>\n    /// <param name=\"obj\">The object to hide.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Invisible<T>(this T obj)\n        where T : class, IHasVisibility\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.IsVisible = false;\n        return obj;\n    }\n\n    /// <summary>\n    /// Marks the specified object as being visible.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IHasVisibility\"/>.</typeparam>\n    /// <param name=\"obj\">The object to show.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Visible<T>(this T obj)\n        where T : class, IHasVisibility\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.IsVisible = true;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IOverflowable.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that can overflow.\n/// </summary>\npublic interface IOverflowable\n{\n    /// <summary>\n    /// Gets or sets the text overflow strategy.\n    /// </summary>\n    Overflow? Overflow { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IOverflowable\"/>.\n/// </summary>\npublic static class OverflowableExtensions\n{\n    /// <summary>\n    /// Folds any overflowing text.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IOverflowable\"/>.</typeparam>\n    /// <param name=\"obj\">The overflowable object instance.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Fold<T>(this T obj)\n        where T : class, IOverflowable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Overflow(obj, Console.Overflow.Fold);\n    }\n\n    /// <summary>\n    /// Crops any overflowing text.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IOverflowable\"/>.</typeparam>\n    /// <param name=\"obj\">The overflowable object instance.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Crop<T>(this T obj)\n        where T : class, IOverflowable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Overflow(obj, Console.Overflow.Crop);\n    }\n\n    /// <summary>\n    /// Crops any overflowing text and adds an ellipsis to the end.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IOverflowable\"/>.</typeparam>\n    /// <param name=\"obj\">The overflowable object instance.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Ellipsis<T>(this T obj)\n        where T : class, IOverflowable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Overflow(obj, Console.Overflow.Ellipsis);\n    }\n\n    /// <summary>\n    /// Sets the overflow strategy.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IOverflowable\"/>.</typeparam>\n    /// <param name=\"obj\">The overflowable object instance.</param>\n    /// <param name=\"overflow\">The overflow strategy to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Overflow<T>(this T obj, Overflow overflow)\n        where T : class, IOverflowable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Overflow = overflow;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IPaddable.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that is paddable.\n/// </summary>\npublic interface IPaddable\n{\n    /// <summary>\n    /// Gets or sets the padding.\n    /// </summary>\n    public Padding? Padding { get; set; }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IPaddable\"/>.\n/// </summary>\npublic static class PaddableExtensions\n{\n    /// <summary>\n    /// Sets the left padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"left\">The left padding.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T PadLeft<T>(this T obj, int left)\n        where T : class, IPaddable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Padding(obj, new Padding(left, obj.Padding.GetTopSafe(), obj.Padding.GetRightSafe(), obj.Padding.GetBottomSafe()));\n    }\n\n    /// <summary>\n    /// Sets the top padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"top\">The top padding.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T PadTop<T>(this T obj, int top)\n        where T : class, IPaddable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Padding(obj, new Padding(obj.Padding.GetLeftSafe(), top, obj.Padding.GetRightSafe(), obj.Padding.GetBottomSafe()));\n    }\n\n    /// <summary>\n    /// Sets the right padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"right\">The right padding.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T PadRight<T>(this T obj, int right)\n        where T : class, IPaddable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Padding(obj, new Padding(obj.Padding.GetLeftSafe(), obj.Padding.GetTopSafe(), right, obj.Padding.GetBottomSafe()));\n    }\n\n    /// <summary>\n    /// Sets the bottom padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"bottom\">The bottom padding.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T PadBottom<T>(this T obj, int bottom)\n        where T : class, IPaddable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return Padding(obj, new Padding(obj.Padding.GetLeftSafe(), obj.Padding.GetTopSafe(), obj.Padding.GetRightSafe(), bottom));\n    }\n\n    /// <summary>\n    /// Sets the left, top, right and bottom padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"left\">The left padding to apply.</param>\n    /// <param name=\"top\">The top padding to apply.</param>\n    /// <param name=\"right\">The right padding to apply.</param>\n    /// <param name=\"bottom\">The bottom padding to apply.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Padding<T>(this T obj, int left, int top, int right, int bottom)\n        where T : class, IPaddable\n    {\n        return Padding(obj, new Padding(left, top, right, bottom));\n    }\n\n    /// <summary>\n    /// Sets the horizontal and vertical padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"horizontal\">The left and right padding.</param>\n    /// <param name=\"vertical\">The top and bottom padding.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Padding<T>(this T obj, int horizontal, int vertical)\n        where T : class, IPaddable\n    {\n        return Padding(obj, new Padding(horizontal, vertical));\n    }\n\n    /// <summary>\n    /// Sets the padding.\n    /// </summary>\n    /// <typeparam name=\"T\">An object implementing <see cref=\"IPaddable\"/>.</typeparam>\n    /// <param name=\"obj\">The paddable object instance.</param>\n    /// <param name=\"padding\">The padding to apply.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static T Padding<T>(this T obj, Padding padding)\n        where T : class, IPaddable\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Padding = padding;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/IProfileEnricher.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that can enrich a profile.\n/// </summary>\npublic interface IProfileEnricher\n{\n    /// <summary>\n    /// Gets the name of the enricher.\n    /// </summary>\n    public string Name { get; }\n\n    /// <summary>\n    /// Gets whether or not this enricher is enabled.\n    /// </summary>\n    /// <param name=\"environmentVariables\">The environment variables.</param>\n    /// <returns>Whether or not this enricher is enabled.</returns>\n    bool Enabled(IDictionary<string, string> environmentVariables);\n\n    /// <summary>\n    /// Enriches the profile.\n    /// </summary>\n    /// <param name=\"profile\">The profile to enrich.</param>\n    void Enrich(Profile profile);\n}"
  },
  {
    "path": "src/Spectre.Console/IReadOnlyCapabilities.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents (read-only) terminal capabilities.\n/// </summary>\npublic interface IReadOnlyCapabilities : IReadOnlyAnsiCapabilities\n{\n    /// <summary>\n    /// Gets a value indicating whether or not\n    /// this is a legacy console (cmd.exe) on an OS\n    /// prior to Windows 10.\n    /// </summary>\n    /// <remarks>\n    /// Only relevant when running on Microsoft Windows.\n    /// </remarks>\n    [Obsolete(\"This property will be removed in a future version\")]\n    bool Legacy { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether\n    /// or not the console supports interaction.\n    /// </summary>\n    bool Interactive { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether\n    /// or not the console supports Unicode.\n    /// </summary>\n    bool Unicode { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/InteractionDetector.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class InteractionDetector\n{\n    public static bool IsInteractive(InteractionSupport interaction)\n    {\n        return IsInteractive(\n            interaction,\n            System.Console.IsInputRedirected,\n            System.Console.IsOutputRedirected,\n            System.Console.IsErrorRedirected);\n    }\n\n    internal static bool IsInteractive(\n        InteractionSupport interaction,\n        bool isInputRedirected,\n        bool isOutputRedirected,\n        bool isErrorRedirected)\n    {\n        var interactive = interaction == InteractionSupport.Yes;\n\n        if (interaction == InteractionSupport.Detect)\n        {\n            // Consider the console interactive only when input, output and error are not redirected.\n            interactive =\n                !isInputRedirected &&\n                !isOutputRedirected &&\n                !isErrorRedirected;\n        }\n\n        return interactive;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/InteractionSupport.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Determines interactivity support.\n/// </summary>\npublic enum InteractionSupport\n{\n    /// <summary>\n    /// Interaction support should be\n    /// detected by the system.\n    /// </summary>\n    Detect = 0,\n\n    /// <summary>\n    /// Interactivity is supported.\n    /// </summary>\n    Yes = 1,\n\n    /// <summary>\n    /// Interactivity is not supported.\n    /// </summary>\n    No = 2,\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Aligner.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class Aligner\n{\n    public static string Align(string text, Justify? alignment, int maxWidth)\n    {\n        if (alignment == null || alignment == Justify.Left)\n        {\n            return text;\n        }\n\n        var width = Cell.GetCellLength(text);\n        if (width >= maxWidth)\n        {\n            return text;\n        }\n\n        switch (alignment)\n        {\n            case Justify.Right:\n                {\n                    var diff = maxWidth - width;\n                    return new string(' ', diff) + text;\n                }\n\n            case Justify.Center:\n                {\n                    var diff = (maxWidth - width) / 2;\n\n                    var left = new string(' ', diff);\n                    var right = new string(' ', diff);\n\n                    // Right side\n                    var remainder = (maxWidth - width) % 2;\n                    if (remainder != 0)\n                    {\n                        right += new string(' ', remainder);\n                    }\n\n                    return left + text + right;\n                }\n\n            default:\n                throw new NotSupportedException(\"Unknown alignment\");\n        }\n    }\n\n    public static void Align<T>(T segments, Justify? alignment, int maxWidth)\n        where T : List<Segment>\n    {\n        if (alignment == null || alignment == Justify.Left)\n        {\n            return;\n        }\n\n        var width = Segment.CellCount(segments);\n        if (width >= maxWidth)\n        {\n            return;\n        }\n\n        switch (alignment)\n        {\n            case Justify.Right:\n                {\n                    var diff = maxWidth - width;\n                    segments.Insert(0, Segment.Padding(diff));\n                    break;\n                }\n\n            case Justify.Center:\n                {\n                    // Left side.\n                    var diff = (maxWidth - width) / 2;\n                    segments.Insert(0, Segment.Padding(diff));\n\n                    // Right side\n                    segments.Add(Segment.Padding(diff));\n                    var remainder = (maxWidth - width) % 2;\n                    if (remainder != 0)\n                    {\n                        segments.Add(Segment.Padding(remainder));\n                    }\n\n                    break;\n                }\n\n            default:\n                throw new NotSupportedException(\"Unknown alignment\");\n        }\n    }\n\n    public static void AlignHorizontally<T>(T segments, HorizontalAlignment alignment, int maxWidth)\n        where T : List<Segment>\n    {\n        var width = Segment.CellCount(segments);\n        if (width >= maxWidth)\n        {\n            return;\n        }\n\n        switch (alignment)\n        {\n            case HorizontalAlignment.Left:\n                {\n                    var diff = maxWidth - width;\n                    segments.Add(Segment.Padding(diff));\n                    break;\n                }\n\n            case HorizontalAlignment.Right:\n                {\n                    var diff = maxWidth - width;\n                    segments.Insert(0, Segment.Padding(diff));\n                    break;\n                }\n\n            case HorizontalAlignment.Center:\n                {\n                    // Left side.\n                    var diff = (maxWidth - width) / 2;\n                    segments.Insert(0, Segment.Padding(diff));\n\n                    // Right side\n                    segments.Add(Segment.Padding(diff));\n                    var remainder = (maxWidth - width) % 2;\n                    if (remainder != 0)\n                    {\n                        segments.Add(Segment.Padding(remainder));\n                    }\n\n                    break;\n                }\n\n            default:\n                throw new NotSupportedException(\"Unknown alignment\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleBackend.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class AnsiConsoleBackend : IAnsiConsoleBackend\n{\n    private readonly IAnsiConsole _console;\n    private readonly AnsiWriter _writer;\n\n    public IAnsiConsoleCursor Cursor { get; }\n    public Capabilities Capabilities => _console.Profile.Capabilities;\n\n    public AnsiConsoleBackend(IAnsiConsole console)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _writer = new AnsiWriter(_console.Profile.Out.Writer, _console.Profile.Capabilities);\n\n        Cursor = new AnsiConsoleCursor(this);\n    }\n\n    public void Clear(bool home)\n    {\n        Write(w => w.EraseInDisplay(2));\n        Write(w => w.ClearScrollback());\n\n        if (home)\n        {\n            Write(w => w.CursorPosition(1, 1));\n        }\n    }\n\n    public void Write(IRenderable renderable)\n    {\n        _writer.Write(_console, renderable);\n    }\n\n    public void Write(Action<AnsiWriter> action)\n    {\n        action(_writer);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleCursor.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class AnsiConsoleCursor : IAnsiConsoleCursor\n{\n    private readonly AnsiConsoleBackend _backend;\n\n    public AnsiConsoleCursor(AnsiConsoleBackend backend)\n    {\n        _backend = backend ?? throw new ArgumentNullException(nameof(backend));\n    }\n\n    public void Show(bool show)\n    {\n        if (show)\n        {\n            _backend.Write(w => w.ShowCursor());\n        }\n        else\n        {\n            _backend.Write(w => w.HideCursor());\n        }\n    }\n\n    public void Move(CursorDirection direction, int steps)\n    {\n        if (steps == 0)\n        {\n            return;\n        }\n\n        switch (direction)\n        {\n            case CursorDirection.Up:\n                _backend.Write(w => w.CursorUp(steps));\n                break;\n            case CursorDirection.Down:\n                _backend.Write(w => w.CursorDown(steps));\n                break;\n            case CursorDirection.Right:\n                _backend.Write(w => w.CursorRight(steps));\n                break;\n            case CursorDirection.Left:\n                _backend.Write(w => w.CursorLeft(steps));\n                break;\n        }\n    }\n\n    public void SetPosition(int column, int line)\n    {\n        _backend.Write(w => w.CursorPosition(line, column));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/Ansi/AnsiStringWriter.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class AnsiStringWriter\n{\n    private readonly SemaphoreSlim _lock;\n    private readonly StringBuilder _builder;\n    private readonly AnsiWriter _writer;\n\n    public static AnsiStringWriter Shared { get; } = new();\n\n    private AnsiStringWriter()\n    {\n        _lock = new SemaphoreSlim(1, 1);\n        _builder = new StringBuilder();\n        _writer = new AnsiWriter(\n            new StringWriter(_builder),\n            new Capabilities\n            {\n                ColorSystem = ColorSystem.NoColors,\n                Ansi = true,\n                Links = true,\n                Interactive = false,\n                Unicode = true,\n                AlternateBuffer = true,\n            });\n    }\n\n    public string Write(IReadOnlyCapabilities capabilities, Action<AnsiWriter> action)\n    {\n        _lock.Wait();\n\n        try\n        {\n            _builder.Clear();\n            _writer.Capabilities = capabilities;\n            action(_writer);\n            return _builder.ToString();\n        }\n        finally\n        {\n            _lock.Release();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/AnsiConsoleFacade.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class AnsiConsoleFacade : IAnsiConsole\n{\n    private readonly Lock _renderLock;\n    private readonly AnsiConsoleBackend _ansiBackend;\n    private readonly LegacyConsoleBackend _legacyBackend;\n\n    public Profile Profile { get; }\n    public IAnsiConsoleCursor Cursor => GetBackend().Cursor;\n    public IAnsiConsoleInput Input { get; }\n    public IExclusivityMode ExclusivityMode { get; }\n    public RenderPipeline Pipeline { get; }\n\n    public AnsiConsoleFacade(Profile profile, IExclusivityMode exclusivityMode)\n    {\n        _renderLock = LockFactory.Create();\n\n        Profile = profile ?? throw new ArgumentNullException(nameof(profile));\n        Input = new DefaultInput(Profile);\n        ExclusivityMode = exclusivityMode ?? throw new ArgumentNullException(nameof(exclusivityMode));\n        Pipeline = new RenderPipeline();\n\n        _ansiBackend = new AnsiConsoleBackend(this);\n        _legacyBackend = new LegacyConsoleBackend(this);\n    }\n\n    public void Clear(bool home)\n    {\n        lock (_renderLock)\n        {\n            GetBackend().Clear(home);\n        }\n    }\n\n    public void Write(IRenderable renderable)\n    {\n        lock (_renderLock)\n        {\n            GetBackend().Write(renderable);\n        }\n    }\n\n    public void WriteAnsi(Action<AnsiWriter> action)\n    {\n        lock (_renderLock)\n        {\n            GetBackend().Write(action);\n        }\n    }\n\n    private IAnsiConsoleBackend GetBackend()\n    {\n        if (Profile.Capabilities.Ansi)\n        {\n            return _ansiBackend;\n        }\n\n        return _legacyBackend;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/IAnsiConsoleBackend.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a console backend.\n/// </summary>\ninternal interface IAnsiConsoleBackend\n{\n    IAnsiConsoleCursor Cursor { get; }\n\n    void Clear(bool home);\n    void Write(IRenderable renderable);\n    void Write(Action<AnsiWriter> action);\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/Legacy/LegacyConsoleBackend.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class LegacyConsoleBackend : IAnsiConsoleBackend\n{\n    private readonly IAnsiConsole _console;\n    private Style _lastStyle;\n\n    public IAnsiConsoleCursor Cursor { get; }\n\n    public LegacyConsoleBackend(IAnsiConsole console)\n    {\n        _console = console ?? throw new System.ArgumentNullException(nameof(console));\n        _lastStyle = Style.Plain;\n\n        Cursor = new LegacyConsoleCursor();\n    }\n\n    public void Clear(bool home)\n    {\n        var (x, y) = (System.Console.CursorLeft, System.Console.CursorTop);\n\n        System.Console.Clear();\n\n        if (!home)\n        {\n            // Set the cursor position\n            System.Console.SetCursorPosition(x, y);\n        }\n    }\n\n    public void Write(IRenderable renderable)\n    {\n        foreach (var segment in renderable.GetSegments(_console))\n        {\n            if (segment.IsControlCode)\n            {\n                continue;\n            }\n\n            if (!_lastStyle.Equals(segment.Style))\n            {\n                SetStyle(segment.Style);\n            }\n\n            _console.Profile.Out.Writer.Write(segment.Text.NormalizeNewLines(native: true));\n        }\n    }\n\n    public void Write(Action<AnsiWriter> action)\n    {\n        // Do nothing. The backend is not capable of emitting ANSI/VT escape sequences.\n    }\n\n    private void SetStyle(Style style)\n    {\n        _lastStyle = style;\n\n        System.Console.ResetColor();\n\n        var background = Color.ToConsoleColor(style.Background);\n        if (_console.Profile.Capabilities.ColorSystem != ColorSystem.NoColors && (int)background != -1)\n        {\n            System.Console.BackgroundColor = background;\n        }\n\n        var foreground = Color.ToConsoleColor(style.Foreground);\n        if (_console.Profile.Capabilities.ColorSystem != ColorSystem.NoColors && (int)foreground != -1)\n        {\n            System.Console.ForegroundColor = foreground;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Backends/Legacy/LegacyConsoleCursor.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class LegacyConsoleCursor : IAnsiConsoleCursor\n{\n    public void Show(bool show)\n    {\n        System.Console.CursorVisible = show;\n    }\n\n    public void Move(CursorDirection direction, int steps)\n    {\n        if (steps == 0)\n        {\n            return;\n        }\n\n        switch (direction)\n        {\n            case CursorDirection.Up:\n                System.Console.CursorTop -= steps;\n                break;\n            case CursorDirection.Down:\n                System.Console.CursorTop += steps;\n                break;\n            case CursorDirection.Left:\n                System.Console.CursorLeft -= steps;\n                break;\n            case CursorDirection.Right:\n                System.Console.CursorLeft += steps;\n                break;\n        }\n    }\n\n    public void SetPosition(int x, int y)\n    {\n        System.Console.CursorLeft = x;\n        System.Console.CursorTop = y;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Cell.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class Cell\n{\n    private const sbyte Sentinel = -2;\n\n    /// <summary>\n    /// UnicodeCalculator.GetWidth documents the width as (-1, 0, 1, 2). We only need space for these values and a sentinel for uninitialized values.\n    /// This is only five values in total so we are storing one byte per value. We could store 2 per byte but that would add more logic to the retrieval.\n    /// We should add one to char.MaxValue because the total number of characters includes \\0 too so there are 65536 valid chars.\n    /// </summary>\n    private static readonly sbyte[] _runeWidthCache = new sbyte[char.MaxValue + 1];\n\n    static Cell()\n    {\n#if !NETSTANDARD2_0\n        Array.Fill(_runeWidthCache, Sentinel);\n#else\n        for (var i = 0; i < _runeWidthCache.Length; i++)\n        {\n            _runeWidthCache[i] = Sentinel;\n        }\n#endif\n    }\n\n    public static int GetCellLength(string text) => GetCellLength(text.AsSpan());\n\n    public static int GetCellLength(ReadOnlySpan<char> text)\n    {\n        var sum = 0;\n        foreach (var rune in text)\n        {\n            sum += GetCellLength(rune);\n        }\n\n        return sum;\n    }\n\n    public static int GetCellLength(char rune)\n    {\n        // TODO: We need to figure out why Segment.SplitLines fails\n        // if we let wcwidth (which returns -1 instead of 1)\n        // calculate the size for new line characters.\n        // That is correct from a Unicode perspective, but the\n        // algorithm was written before wcwidth was added and used\n        // to work with string length and not cell length.\n        if (rune == '\\n')\n        {\n            return 1;\n        }\n\n        var width = _runeWidthCache[rune];\n        if (width == Sentinel)\n        {\n            width = (sbyte)UnicodeCalculator.GetWidth(rune);\n            _runeWidthCache[rune] = width;\n        }\n\n        return width;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Collections/ListWithCallback.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListWithCallback<T> : IList<T>, IReadOnlyList<T>\n{\n    private readonly List<T> _list;\n    private readonly Action _callback;\n\n    public T this[int index]\n    {\n        get => _list[index];\n        set => _list[index] = value;\n    }\n\n    public int Count => _list.Count;\n    public bool IsReadOnly => false;\n\n    public ListWithCallback(Action callback)\n    {\n        _list = [];\n        _callback = callback ?? throw new ArgumentNullException(nameof(callback));\n    }\n\n    public void Add(T item)\n    {\n        _list.Add(item);\n        _callback();\n    }\n\n    public void Clear()\n    {\n        _list.Clear();\n        _callback();\n    }\n\n    public bool Contains(T item)\n    {\n        return _list.Contains(item);\n    }\n\n    public void CopyTo(T[] array, int arrayIndex)\n    {\n        _list.CopyTo(array, arrayIndex);\n        _callback();\n    }\n\n    public IEnumerator<T> GetEnumerator()\n    {\n        return _list.GetEnumerator();\n    }\n\n    public int IndexOf(T item)\n    {\n        return _list.IndexOf(item);\n    }\n\n    public void Insert(int index, T item)\n    {\n        _list.Insert(index, item);\n        _callback();\n    }\n\n    public bool Remove(T item)\n    {\n        var result = _list.Remove(item);\n        if (result)\n        {\n            _callback();\n        }\n\n        return result;\n    }\n\n    public void RemoveAt(int index)\n    {\n        _list.RemoveAt(index);\n        _callback();\n    }\n\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/ConsoleHelper.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class ConsoleHelper\n{\n    public static int GetSafeWidth(int defaultValue = Constants.DefaultTerminalWidth)\n    {\n        try\n        {\n            var width = System.Console.BufferWidth;\n            if (width == 0)\n            {\n                width = defaultValue;\n            }\n\n            return width;\n        }\n        catch (IOException)\n        {\n            return defaultValue;\n        }\n    }\n\n    public static int GetSafeHeight(int defaultValue = Constants.DefaultTerminalHeight)\n    {\n        try\n        {\n            var height = System.Console.WindowHeight;\n            if (height == 0)\n            {\n                height = defaultValue;\n            }\n\n            return height;\n        }\n        catch (IOException)\n        {\n            return defaultValue;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Constants.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class Constants\n{\n    public const int DefaultTerminalWidth = 80;\n    public const int DefaultTerminalHeight = 24;\n\n    public const string EmptyLink = \"https://emptylink\";\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/DecorationTable.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class DecorationTable\n{\n    private static readonly Dictionary<string, Decoration?> _lookup;\n    private static readonly Dictionary<Decoration, string> _reverseLookup;\n\n    static DecorationTable()\n    {\n        _lookup = new Dictionary<string, Decoration?>(StringComparer.OrdinalIgnoreCase)\n            {\n                { \"none\", Decoration.None },\n                { \"bold\", Decoration.Bold },\n                { \"b\", Decoration.Bold },\n                { \"dim\", Decoration.Dim },\n                { \"italic\", Decoration.Italic },\n                { \"i\", Decoration.Italic },\n                { \"underline\", Decoration.Underline },\n                { \"u\", Decoration.Underline },\n                { \"invert\", Decoration.Invert },\n                { \"reverse\", Decoration.Invert },\n                { \"conceal\", Decoration.Conceal },\n                { \"blink\", Decoration.SlowBlink },\n                { \"slowblink\", Decoration.SlowBlink },\n                { \"rapidblink\", Decoration.RapidBlink },\n                { \"strike\", Decoration.Strikethrough },\n                { \"strikethrough\", Decoration.Strikethrough },\n                { \"s\", Decoration.Strikethrough },\n            };\n\n        _reverseLookup = new Dictionary<Decoration, string>();\n        foreach (var (name, decoration) in _lookup)\n        {\n            // Cannot happen, but the compiler thinks so...\n            if (decoration == null)\n            {\n                continue;\n            }\n\n            _reverseLookup.TryAdd(decoration.Value, name);\n        }\n    }\n\n    public static Decoration? GetDecoration(string name)\n    {\n        _lookup.TryGetValue(name, out var result);\n        return result;\n    }\n\n    public static List<string> GetMarkupNames(Decoration decoration)\n    {\n        var result = new List<string>();\n\n        EnumUtils.GetValues<Decoration>()\n            .Where(flag => (decoration & flag) != 0)\n            .ForEach(flag =>\n            {\n                if (flag != Decoration.None && _reverseLookup.TryGetValue(flag, out var name))\n                {\n                    result.Add(name);\n                }\n            });\n\n        return result;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/DefaultExclusivityMode.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class DefaultExclusivityMode : IExclusivityMode\n{\n    private readonly SemaphoreSlim _semaphore;\n\n    public DefaultExclusivityMode()\n    {\n        _semaphore = new SemaphoreSlim(1, 1);\n    }\n\n    public T Run<T>(Func<T> func)\n    {\n        // Try acquiring the exclusivity semaphore\n        if (!_semaphore.Wait(0))\n        {\n            throw CreateExclusivityException();\n        }\n\n        try\n        {\n            return func();\n        }\n        finally\n        {\n            _semaphore.Release(1);\n        }\n    }\n\n    public async Task<T> RunAsync<T>(Func<Task<T>> func)\n    {\n        // Try acquiring the exclusivity semaphore\n        if (!await _semaphore.WaitAsync(0).ConfigureAwait(false))\n        {\n            throw CreateExclusivityException();\n        }\n\n        try\n        {\n            return await func().ConfigureAwait(false);\n        }\n        finally\n        {\n            _semaphore.Release(1);\n        }\n    }\n\n    private static Exception CreateExclusivityException() => new InvalidOperationException(\n        \"Trying to run one or more interactive functions concurrently. \" +\n        \"Operations with dynamic displays (e.g. a prompt and a progress display) \" +\n        \"cannot be running at the same time.\");\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/DefaultInput.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class DefaultInput : IAnsiConsoleInput\n{\n    private readonly Profile _profile;\n\n    public DefaultInput(Profile profile)\n    {\n        _profile = profile ?? throw new ArgumentNullException(nameof(profile));\n    }\n\n    public bool IsKeyAvailable()\n    {\n        if (!_profile.Capabilities.Interactive)\n        {\n            throw new InvalidOperationException(\"Failed to read input in non-interactive mode.\");\n        }\n\n        return System.Console.KeyAvailable;\n    }\n\n    public ConsoleKeyInfo? ReadKey(bool intercept)\n    {\n        if (!_profile.Capabilities.Interactive)\n        {\n            throw new InvalidOperationException(\"Failed to read input in non-interactive mode.\");\n        }\n\n        return System.Console.ReadKey(intercept);\n    }\n\n    public async Task<ConsoleKeyInfo?> ReadKeyAsync(bool intercept, CancellationToken cancellationToken)\n    {\n        if (!_profile.Capabilities.Interactive)\n        {\n            throw new InvalidOperationException(\"Failed to read input in non-interactive mode.\");\n        }\n\n        while (true)\n        {\n            if (cancellationToken.IsCancellationRequested)\n            {\n                return null;\n            }\n\n            if (System.Console.KeyAvailable)\n            {\n                break;\n            }\n\n            await Task.Delay(5, cancellationToken).ConfigureAwait(false);\n        }\n\n        return ReadKey(intercept);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/FileSize.cs",
    "content": "namespace Spectre.Console;\n\ninternal readonly struct FileSize\n{\n    public double Bytes { get; }\n    public double Bits => Bytes * 8;\n\n    public FileSizePrefix Prefix { get; } = FileSizePrefix.None;\n\n    private readonly FileSizeBase _prefixBase = FileSizeBase.Binary;\n\n    /// <summary>\n    /// If enabled, will display the output in bits, rather than bytes.\n    /// </summary>\n    private readonly bool _showBits = false;\n\n    public string Suffix => GetSuffix();\n\n    public FileSize(double bytes)\n    {\n        Bytes = bytes;\n        Prefix = DetectPrefix(bytes);\n    }\n\n    public FileSize(double bytes, FileSizeBase @base)\n    {\n        Bytes = bytes;\n        _prefixBase = @base;\n        Prefix = DetectPrefix(bytes);\n    }\n\n    public FileSize(double bytes, FileSizeBase @base, bool showBits)\n    {\n        Bytes = bytes;\n        _showBits = showBits;\n\n        _prefixBase = @base;\n        Prefix = DetectPrefix(bytes);\n    }\n\n    public FileSize(double bytes, FileSizePrefix prefix)\n    {\n        Bytes = bytes;\n        Prefix = prefix;\n    }\n\n    public FileSize(double bytes, FileSizePrefix prefix, FileSizeBase @base, bool showBits)\n    {\n        Bytes = bytes;\n        _showBits = showBits;\n\n        _prefixBase = @base;\n        Prefix = prefix;\n    }\n\n    public string Format(CultureInfo? culture = null)\n    {\n        var unitBase = Math.Pow((int)_prefixBase, (int)Prefix);\n\n        if (_showBits)\n        {\n            var bits = Bits / unitBase;\n            return Prefix == FileSizePrefix.None ?\n                ((int)bits).ToString(culture ?? CultureInfo.InvariantCulture)\n                : bits.ToString(\"F1\", culture ?? CultureInfo.InvariantCulture);\n        }\n\n        var bytes = Bytes / unitBase;\n        return Prefix == FileSizePrefix.None ?\n            ((int)bytes).ToString(culture ?? CultureInfo.InvariantCulture)\n            : bytes.ToString(\"F1\", culture ?? CultureInfo.InvariantCulture);\n    }\n\n    public override string ToString()\n    {\n        return ToString(suffix: true, CultureInfo.InvariantCulture);\n    }\n\n    public string ToString(bool suffix = true, CultureInfo? culture = null)\n    {\n        if (suffix)\n        {\n            return $\"{Format(culture)} {Suffix}\";\n        }\n\n        return Format(culture);\n    }\n\n    private string GetSuffix()\n    {\n        return (Bytes, Unit: Prefix, PrefixBase: _prefixBase, ShowBits: _showBits) switch\n        {\n            (_, FileSizePrefix.Kilo, FileSizeBase.Binary, false) => \"KiB\",\n            (_, FileSizePrefix.Mega, FileSizeBase.Binary, false) => \"MiB\",\n            (_, FileSizePrefix.Giga, FileSizeBase.Binary, false) => \"GiB\",\n            (_, FileSizePrefix.Tera, FileSizeBase.Binary, false) => \"TiB\",\n            (_, FileSizePrefix.Peta, FileSizeBase.Binary, false) => \"PiB\",\n            (_, FileSizePrefix.Exa, FileSizeBase.Binary, false) => \"EiB\",\n            (_, FileSizePrefix.Zetta, FileSizeBase.Binary, false) => \"ZiB\",\n            (_, FileSizePrefix.Yotta, FileSizeBase.Binary, false) => \"YiB\",\n\n            (_, FileSizePrefix.Kilo, FileSizeBase.Binary, true) => \"Kibit\",\n            (_, FileSizePrefix.Mega, FileSizeBase.Binary, true) => \"Mibit\",\n            (_, FileSizePrefix.Giga, FileSizeBase.Binary, true) => \"Gibit\",\n            (_, FileSizePrefix.Tera, FileSizeBase.Binary, true) => \"Tibit\",\n            (_, FileSizePrefix.Peta, FileSizeBase.Binary, true) => \"Pibit\",\n            (_, FileSizePrefix.Exa, FileSizeBase.Binary, true) => \"Eibit\",\n            (_, FileSizePrefix.Zetta, FileSizeBase.Binary, true) => \"Zibit\",\n            (_, FileSizePrefix.Yotta, FileSizeBase.Binary, true) => \"Yibit\",\n\n            (_, FileSizePrefix.Kilo, FileSizeBase.Decimal, false) => \"KB\",\n            (_, FileSizePrefix.Mega, FileSizeBase.Decimal, false) => \"MB\",\n            (_, FileSizePrefix.Giga, FileSizeBase.Decimal, false) => \"GB\",\n            (_, FileSizePrefix.Tera, FileSizeBase.Decimal, false) => \"TB\",\n            (_, FileSizePrefix.Peta, FileSizeBase.Decimal, false) => \"PB\",\n            (_, FileSizePrefix.Exa, FileSizeBase.Decimal, false) => \"EB\",\n            (_, FileSizePrefix.Zetta, FileSizeBase.Decimal, false) => \"ZB\",\n            (_, FileSizePrefix.Yotta, FileSizeBase.Decimal, false) => \"YB\",\n\n            (_, FileSizePrefix.Kilo, FileSizeBase.Decimal, true) => \"Kbit\",\n            (_, FileSizePrefix.Mega, FileSizeBase.Decimal, true) => \"Mbit\",\n            (_, FileSizePrefix.Giga, FileSizeBase.Decimal, true) => \"Gbit\",\n            (_, FileSizePrefix.Tera, FileSizeBase.Decimal, true) => \"Tbit\",\n            (_, FileSizePrefix.Peta, FileSizeBase.Decimal, true) => \"Pbit\",\n            (_, FileSizePrefix.Exa, FileSizeBase.Decimal, true) => \"Ebit\",\n            (_, FileSizePrefix.Zetta, FileSizeBase.Decimal, true) => \"Zbit\",\n            (_, FileSizePrefix.Yotta, FileSizeBase.Decimal, true) => \"Ybit\",\n\n            (1, _, _, true) => \"bit\",\n            (_, _, _, true) => \"bits\",\n            (1, _, _, false) => \"byte\",\n            (_, _, _, false) => \"bytes\",\n        };\n    }\n\n    private FileSizePrefix DetectPrefix(double bytes)\n    {\n        if (_showBits)\n        {\n            bytes *= 8;\n        }\n\n        foreach (var prefix in EnumUtils.GetValues<FileSizePrefix>())\n        {\n            // Trying to find the largest unit, that the number of bytes can fit under. Ex. 40kb < 1mb\n            if (bytes < Math.Pow((int)_prefixBase, (int)prefix + 1))\n            {\n                return prefix;\n            }\n        }\n\n        return FileSizePrefix.None;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/FileSizeBase.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Determines possible file size base prefixes.  (base 2/base 10).\n/// </summary>\npublic enum FileSizeBase\n{\n    /// <summary>\n    /// The SI prefix definition (base 10) of kilobyte, megabyte, etc.\n    /// </summary>\n    Decimal = 1000,\n\n    /// <summary>\n    /// The IEC binary prefix definition (base 2) of kibibyte, mebibyte, etc.\n    /// </summary>\n    Binary = 1024,\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/FileSizePrefix.cs",
    "content": "namespace Spectre.Console;\n\ninternal enum FileSizePrefix\n{\n    None = 0,\n    Kilo = 1,\n    Mega = 2,\n    Giga = 3,\n    Tera = 4,\n    Peta = 5,\n    Exa = 6,\n    Zetta = 7,\n    Yotta = 8,\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/IRatioResolvable.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents something that can be used to resolve ratios.\n/// </summary>\ninternal interface IRatioResolvable\n{\n    /// <summary>\n    /// Gets the ratio.\n    /// </summary>\n    int Ratio { get; }\n\n    /// <summary>\n    /// Gets the size.\n    /// </summary>\n    int? Size { get; }\n\n    /// <summary>\n    /// Gets the minimum size.\n    /// </summary>\n    int MinimumSize { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Polyfill/CancellationToken.cs",
    "content": "#if NETSTANDARD2_0\nnamespace Spectre.Console;\n\ninternal static class CancellationTokenHelpers\n{\n    public static Task CancelAsync(this CancellationTokenSource cts)\n    {\n        cts.Cancel();\n        return Task.CompletedTask;\n    }\n}\n#endif"
  },
  {
    "path": "src/Spectre.Console/Internal/Polyfill/EnumHelpers.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class EnumUtils\n{\n    public static T[] GetValues<T>()\n        where T : struct, Enum\n    {\n        return\n#if NET6_0_OR_GREATER\n        Enum.GetValues<T>();\n#else\n            (T[])Enum.GetValues(typeof(T));\n#endif\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Ratio.cs",
    "content": "// Ported from Rich by Will McGugan, licensed under MIT.\n// https://github.com/willmcgugan/rich/blob/527475837ebbfc427530b3ee0d4d0741d2d0fc6d/rich/_ratio.py\n\nnamespace Spectre.Console;\n\ninternal static class Ratio\n{\n    public static List<int> Resolve(int total, IEnumerable<IRatioResolvable> edges)\n    {\n        static (int Div, float Mod) DivMod(float x, float y)\n        {\n            var (div, mod) = ((int)(x / y), x % y);\n\n            // If remainder is within .0001 of 1 then we round up\n            if (!(mod > 0.9999))\n            {\n                return (div, mod);\n            }\n\n            div++;\n            mod = 0;\n            return (div, mod);\n        }\n\n        static int? GetEdgeWidth(IRatioResolvable edge)\n        {\n            if (edge.Size != null && edge.Size < edge.MinimumSize)\n            {\n                return edge.MinimumSize;\n            }\n\n            return edge.Size;\n        }\n\n        var sizes = edges.Select(GetEdgeWidth).ToArray();\n\n        while (sizes.Any(s => s == null))\n        {\n            // Get all edges and map them back to their index.\n            // Ignore edges which have a explicit size.\n            var flexibleEdges = sizes.Zip(edges, (a, b) => (Size: a, Edge: b))\n                .Enumerate()\n                .Select(x => (x.Index, x.Item.Size, x.Item.Edge))\n                .Where(x => x.Size == null)\n                .ToList();\n\n            // Get the remaining space\n            var remaining = total - sizes.Select(size => size ?? 0).Sum();\n            if (remaining <= 0)\n            {\n                // No more room for flexible edges.\n                return sizes\n                    .Zip(edges, (size, edge) => (Size: size, Edge: edge))\n                    .Select(zip => zip.Size ?? zip.Edge.MinimumSize)\n                    .Select(size => size > 0 ? size : 1)\n                    .ToList();\n            }\n\n            var portion = (float)remaining / flexibleEdges.Sum(x => Math.Max(1, x.Edge.Ratio));\n\n            var invalidate = false;\n            foreach (var (index, size, edge) in flexibleEdges)\n            {\n                if (portion * edge.Ratio <= edge.MinimumSize)\n                {\n                    sizes[index] = edge.MinimumSize;\n\n                    // New fixed size will invalidate calculations,\n                    // so we need to repeat the process\n                    invalidate = true;\n                    break;\n                }\n            }\n\n            if (!invalidate)\n            {\n                var remainder = 0f;\n                foreach (var flexibleEdge in flexibleEdges)\n                {\n                    var (div, mod) = DivMod((portion * flexibleEdge.Edge.Ratio) + remainder, 1);\n                    remainder = mod;\n                    sizes[flexibleEdge.Index] = div;\n                }\n            }\n        }\n\n        return sizes.Select(x => x ?? 1).ToList();\n    }\n\n    public static List<int> Reduce(int total, List<int> ratios, List<int> maximums, List<int> values)\n    {\n        ratios = ratios.Zip(maximums, (a, b) => (ratio: a, max: b)).Select(a => a.max > 0 ? a.ratio : 0).ToList();\n        var totalRatio = ratios.Sum();\n        if (totalRatio <= 0)\n        {\n            return values;\n        }\n\n        var totalRemaining = total;\n        var result = new List<int>();\n\n        foreach (var (ratio, maximum, value) in ratios.ZipThree(maximums, values))\n        {\n            if (ratio != 0 && totalRatio > 0)\n            {\n                var distributed = (int)Math.Min(maximum, Math.Round((double)(ratio * totalRemaining / totalRatio)));\n                result.Add(value - distributed);\n                totalRemaining -= distributed;\n                totalRatio -= ratio;\n            }\n            else\n            {\n                result.Add(value);\n            }\n        }\n\n        return result;\n    }\n\n    public static List<int> Distribute(int total, IList<int> ratios, IList<int>? minimums = null)\n    {\n        if (minimums != null)\n        {\n            ratios = ratios.Zip(minimums, (a, b) => (ratio: a, min: b)).Select(a => a.min > 0 ? a.ratio : 0).ToList();\n        }\n\n        var totalRatio = ratios.Sum();\n        Debug.Assert(totalRatio > 0, \"Sum or ratios must be > 0\");\n\n        var totalRemaining = total;\n        var distributedTotal = new List<int>();\n\n        minimums ??= ratios.Select(_ => 0).ToList();\n\n        foreach (var (ratio, minimum) in ratios.Zip(minimums, (a, b) => (a, b)))\n        {\n            var distributed = (totalRatio > 0)\n                ? Math.Max(minimum, (int)Math.Ceiling(ratio * totalRemaining / (double)totalRatio))\n                : totalRemaining;\n\n            distributedTotal.Add(distributed);\n            totalRatio -= ratio;\n            totalRemaining -= distributed;\n        }\n\n        return distributedTotal;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/ResourceReader.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class ResourceReader\n{\n    public static string ReadManifestData(string resourceName)\n    {\n        ArgumentNullException.ThrowIfNull(resourceName);\n\n        var assembly = typeof(ResourceReader).Assembly;\n        resourceName = resourceName.ReplaceExact(\"/\", \".\");\n\n        using (var stream = assembly.GetManifestResourceStream(resourceName))\n        {\n            if (stream == null)\n            {\n                throw new InvalidOperationException(\"Could not load manifest resource stream.\");\n            }\n\n            using (var reader = new StreamReader(stream))\n            {\n                return reader.ReadToEnd().NormalizeNewLines();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Text/Encoding/EncoderCapabilities.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class EncoderCapabilities : IReadOnlyCapabilities\n{\n    public ColorSystem ColorSystem { get; }\n\n    public bool Ansi => false;\n    public bool Links => false;\n    public bool Legacy => false;\n    public bool IsTerminal => false;\n    public bool Interactive => false;\n    public bool Unicode => true;\n    public bool AlternateBuffer => false;\n\n    public EncoderCapabilities(ColorSystem colors)\n    {\n        ColorSystem = colors;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Text/Encoding/HtmlEncoder.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class HtmlEncoder : IAnsiConsoleEncoder\n{\n    public string Encode(IAnsiConsole console, IEnumerable<IRenderable> renderables)\n    {\n        var context = RenderOptions.Create(console, new EncoderCapabilities(ColorSystem.TrueColor));\n        var builder = new StringBuilder();\n\n        builder.Append(\"<pre style=\\\"font-size:90%;font-family:consolas,'Courier New',monospace\\\">\\n\");\n\n        foreach (var renderable in renderables)\n        {\n            var segments = renderable.Render(context, console.Profile.Width);\n            foreach (var (_, first, _, segment) in segments.Enumerate())\n            {\n                if (segment.IsControlCode)\n                {\n                    continue;\n                }\n\n                if (segment.Text == \"\\n\" && !first)\n                {\n                    builder.Append('\\n');\n                    continue;\n                }\n\n                var parts = segment.Text.Split(['\\n'], StringSplitOptions.None);\n                foreach (var (_, _, last, line) in parts.Enumerate())\n                {\n                    if (string.IsNullOrEmpty(line))\n                    {\n                        continue;\n                    }\n\n                    builder.Append(\"<span\");\n                    if (!segment.Style.Equals(Style.Plain))\n                    {\n                        builder.Append(\" style=\\\"\");\n                        builder.Append(BuildCss(segment.Style));\n                        builder.Append('\"');\n                    }\n\n                    builder.Append('>');\n                    builder.Append(line);\n                    builder.Append(\"</span>\");\n\n                    if (parts.Length > 1 && !last)\n                    {\n                        builder.Append('\\n');\n                    }\n                }\n            }\n        }\n\n        builder.Append(\"</pre>\");\n\n        return builder.ToString().TrimEnd('\\n');\n    }\n\n    private static string BuildCss(Style style)\n    {\n        var css = new List<string>();\n\n        var foreground = style.Foreground;\n        var background = style.Background;\n\n        if ((style.Decoration & Decoration.Invert) != 0)\n        {\n            var temp = foreground;\n            foreground = background;\n            background = temp;\n        }\n\n        if ((style.Decoration & Decoration.Dim) != 0)\n        {\n            var blender = background;\n            if (blender.Equals(Color.Default))\n            {\n                blender = Color.White;\n            }\n\n            foreground = foreground.Blend(blender, 0.5f);\n        }\n\n        if (!foreground.Equals(Color.Default))\n        {\n            css.Add($\"color: #{foreground.ToHex()}\");\n        }\n\n        if (!background.Equals(Color.Default))\n        {\n            css.Add($\"background-color: #{background.ToHex()}\");\n        }\n\n        if ((style.Decoration & Decoration.Bold) != 0)\n        {\n            css.Add(\"font-weight: bold\");\n        }\n\n        if ((style.Decoration & Decoration.Italic) != 0)\n        {\n            css.Add(\"font-style: italic\");\n        }\n\n        if ((style.Decoration & Decoration.Underline) != 0)\n        {\n            css.Add(\"text-decoration: underline\");\n        }\n\n        if ((style.Decoration & Decoration.Strikethrough) != 0)\n        {\n            css.Add(\"text-decoration: line-through\");\n        }\n\n        return string.Join(\";\", css);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Text/Encoding/TextEncoder.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class TextEncoder : IAnsiConsoleEncoder\n{\n    public string Encode(IAnsiConsole console, IEnumerable<IRenderable> renderables)\n    {\n        var context = RenderOptions.Create(console, new EncoderCapabilities(ColorSystem.TrueColor));\n        var builder = new StringBuilder();\n\n        foreach (var renderable in renderables)\n        {\n            var segments = renderable.Render(context, console.Profile.Width);\n            foreach (var segment in Segment.Merge(segments))\n            {\n                if (segment.IsControlCode)\n                {\n                    continue;\n                }\n\n                builder.Append(segment.Text);\n            }\n        }\n\n        return builder.ToString().TrimEnd('\\n');\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Text/StringBuffer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class StringBuffer : IDisposable\n{\n    private readonly StringReader _reader;\n    private readonly int _length;\n\n    public int Position { get; private set; }\n    public bool Eof => Position >= _length;\n\n    public StringBuffer(string text)\n    {\n        text ??= string.Empty;\n\n        _reader = new StringReader(text);\n        _length = text.Length;\n\n        Position = 0;\n    }\n\n    public void Dispose()\n    {\n        _reader.Dispose();\n    }\n\n    public char Expect(char character)\n    {\n        var read = Read();\n        if (read != character)\n        {\n            throw new InvalidOperationException($\"Expected '{character}', but found '{read}'\");\n        }\n\n        return read;\n    }\n\n    public char Peek()\n    {\n        if (Eof)\n        {\n            return '\\0';\n        }\n\n        return (char)_reader.Peek();\n    }\n\n    public char Read()\n    {\n        if (Eof)\n        {\n            return '\\0';\n        }\n\n        Position++;\n        return (char)_reader.Read();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/Text/WhiteSpaceSegmentEnumerator.cs",
    "content": "namespace Spectre.Console;\n\ninternal ref struct WhiteSpaceSegmentEnumerator\n{\n    private ReadOnlySpan<char> _remaining;\n    private ReadOnlySpan<char> _current;\n\n    public WhiteSpaceSegmentEnumerator(ReadOnlySpan<char> buffer)\n    {\n        _remaining = buffer;\n        _current = default;\n    }\n\n    public ReadOnlySpan<char> Current => _current;\n    public WhiteSpaceSegmentEnumerator GetEnumerator() => this;\n\n    public bool MoveNext()\n    {\n        if (_remaining.IsEmpty)\n        {\n            _current = default;\n            return false;\n        }\n\n        var i = 0;\n        var isWhiteSpace = false;\n        for (; i < _remaining.Length; i++)\n        {\n            if (i == 0)\n            {\n                isWhiteSpace = char.IsWhiteSpace(_remaining[i]);\n            }\n            else if (char.IsWhiteSpace(_remaining[i]) != isWhiteSpace)\n            {\n                break;\n            }\n        }\n\n        _current = _remaining[..i];\n        _remaining = _remaining[i..];\n        return true;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Internal/TypeConverterHelper.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class TypeConverterHelper\n{\n    internal const DynamicallyAccessedMemberTypes ConverterAnnotation = DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields;\n\n    internal static bool IsGetConverterSupported =>\n        !AppContext.TryGetSwitch(\"Spectre.Console.TypeConverterHelper.IsGetConverterSupported \", out var enabled) || enabled;\n\n    public static string ConvertToString<T>(T input)\n    {\n        var result = GetTypeConverter<T>().ConvertToInvariantString(input);\n        if (result == null)\n        {\n            throw new InvalidOperationException(\"Could not convert input to a string\");\n        }\n\n        return result;\n    }\n\n    public static bool TryConvertFromString<T>(string input, [MaybeNull] out T? result)\n    {\n        try\n        {\n            result = (T?)GetTypeConverter<T>().ConvertFromInvariantString(input);\n            return true;\n        }\n        catch\n        {\n            result = default;\n            return false;\n        }\n    }\n\n    public static bool TryConvertFromStringWithCulture<T>(string input, CultureInfo? info, [MaybeNull] out T? result)\n    {\n        try\n        {\n            if (info == null)\n            {\n                return TryConvertFromString<T>(input, out result);\n            }\n            else\n            {\n                result = (T?)GetTypeConverter<T>().ConvertFromString(null!, info, input);\n            }\n\n            return true;\n        }\n        catch\n        {\n            result = default;\n            return false;\n        }\n    }\n\n    public static TypeConverter GetTypeConverter<T>()\n    {\n        var converter = GetConverter();\n        if (converter != null)\n        {\n            return converter;\n        }\n\n        var attribute = typeof(T).GetCustomAttribute<TypeConverterAttribute>();\n        if (attribute != null)\n        {\n            var type = Type.GetType(attribute.ConverterTypeName, false, false);\n            if (type != null)\n            {\n                converter = Activator.CreateInstance(type) as TypeConverter;\n                if (converter != null)\n                {\n                    return converter;\n                }\n            }\n        }\n\n        throw new InvalidOperationException(\"Could not find type converter\");\n\n        [UnconditionalSuppressMessage(\"ReflectionAnalysis\", \"IL2087\", Justification = \"Feature switches are not currently supported in the analyzer\")]\n        [UnconditionalSuppressMessage(\"ReflectionAnalysis\", \"IL2026\", Justification = \"Feature switches are not currently supported in the analyzer\")]\n        static TypeConverter? GetConverter()\n        {\n            if (IsGetConverterSupported)\n            {\n                // Spectre.Console.TypeConverterHelper.IsGetConverterSupported has been set so\n                // fallback to original behavior\n                return TypeDescriptor.GetConverter(typeof(T));\n            }\n\n            // otherwise try and use the intrinsic converter. if we can't find one, then\n            // try and use GetConverter.\n            var intrinsicConverter = GetIntrinsicConverter(typeof(T));\n            return intrinsicConverter ?? TypeDescriptor.GetConverter(typeof(T));\n        }\n    }\n\n    private delegate TypeConverter FuncWithDam([DynamicallyAccessedMembers(ConverterAnnotation)] Type type);\n\n    private static readonly Dictionary<Type, FuncWithDam> _intrinsicConverters;\n\n    static TypeConverterHelper()\n    {\n        _intrinsicConverters = new()\n        {\n            [typeof(bool)] = _ => new BooleanConverter(),\n            [typeof(byte)] = _ => new ByteConverter(),\n            [typeof(sbyte)] = _ => new SByteConverter(),\n            [typeof(char)] = _ => new CharConverter(),\n            [typeof(double)] = _ => new DoubleConverter(),\n            [typeof(string)] = _ => new StringConverter(),\n            [typeof(int)] = _ => new Int32Converter(),\n            [typeof(short)] = _ => new Int16Converter(),\n            [typeof(long)] = _ => new Int64Converter(),\n            [typeof(float)] = _ => new SingleConverter(),\n            [typeof(ushort)] = _ => new UInt16Converter(),\n            [typeof(uint)] = _ => new UInt32Converter(),\n            [typeof(ulong)] = _ => new UInt64Converter(),\n            [typeof(object)] = _ => new TypeConverter(),\n            [typeof(CultureInfo)] = _ => new CultureInfoConverter(),\n            [typeof(DateTime)] = _ => new DateTimeConverter(),\n            [typeof(DateTimeOffset)] = _ => new DateTimeOffsetConverter(),\n            [typeof(decimal)] = _ => new DecimalConverter(),\n            [typeof(TimeSpan)] = _ => new TimeSpanConverter(),\n            [typeof(Guid)] = _ => new GuidConverter(),\n            [typeof(Uri)] = _ => new UriTypeConverter(),\n            [typeof(Array)] = _ => new ArrayConverter(),\n            [typeof(ICollection)] = _ => new CollectionConverter(),\n            [typeof(Enum)] = CreateEnumConverter(),\n#if !NETSTANDARD2_0\n            [typeof(Int128)] = _ => new Int128Converter(),\n            [typeof(Half)] = _ => new HalfConverter(),\n            [typeof(UInt128)] = _ => new UInt128Converter(),\n            [typeof(DateOnly)] = _ => new DateOnlyConverter(),\n            [typeof(TimeOnly)] = _ => new TimeOnlyConverter(),\n            [typeof(Version)] = _ => new VersionConverter(),\n#endif\n        };\n    }\n\n    [UnconditionalSuppressMessage(\"ReflectionAnalysis\", \"IL2111\", Justification = \"Delegate reflection is safe for all usages in this type.\")]\n    private static FuncWithDam CreateEnumConverter() => ([DynamicallyAccessedMembers(ConverterAnnotation)] Type type) => new EnumConverter(type);\n\n    /// <summary>\n    /// A highly-constrained version of <see cref=\"TypeDescriptor.GetConverter(Type)\" /> that only returns intrinsic converters.\n    /// </summary>\n    private static TypeConverter? GetIntrinsicConverter([DynamicallyAccessedMembers(ConverterAnnotation)] Type type)\n    {\n        if (type.IsArray)\n        {\n            type = typeof(Array);\n        }\n\n        if (typeof(ICollection).IsAssignableFrom(type))\n        {\n            type = typeof(ICollection);\n        }\n\n        if (type.IsEnum)\n        {\n            type = typeof(Enum);\n        }\n\n        if (_intrinsicConverters.TryGetValue(type, out var factory))\n        {\n            return factory(type);\n        }\n\n        return null;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Justify.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents text justification.\n/// </summary>\npublic enum Justify\n{\n    /// <summary>\n    /// Left justified.\n    /// </summary>\n    Left = 0,\n\n    /// <summary>\n    /// Right justified.\n    /// </summary>\n    Right = 1,\n\n    /// <summary>\n    /// Centered.\n    /// </summary>\n    Center = 2,\n}"
  },
  {
    "path": "src/Spectre.Console/Live/LiveDisplay.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a live display.\n/// </summary>\npublic sealed class LiveDisplay\n{\n    private readonly IAnsiConsole _console;\n    private readonly IRenderable _target;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the live display should\n    /// be cleared when it's done.\n    /// Defaults to <c>false</c>.\n    /// </summary>\n    public bool AutoClear { get; set; }\n\n    /// <summary>\n    /// Gets or sets the vertical overflow strategy.\n    /// </summary>\n    public VerticalOverflow Overflow { get; set; } = VerticalOverflow.Ellipsis;\n\n    /// <summary>\n    /// Gets or sets the vertical overflow cropping strategy.\n    /// </summary>\n    public VerticalOverflowCropping Cropping { get; set; } = VerticalOverflowCropping.Top;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"LiveDisplay\"/> class.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"target\">The target renderable to update.</param>\n    public LiveDisplay(IAnsiConsole console, IRenderable target)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _target = target ?? throw new ArgumentNullException(nameof(target));\n    }\n\n    /// <summary>\n    /// Starts the live display.\n    /// </summary>\n    /// <param name=\"action\">The action to execute.</param>\n    public void Start(Action<LiveDisplayContext> action)\n    {\n        var task = StartAsync(ctx =>\n        {\n            action(ctx);\n            return Task.CompletedTask;\n        });\n\n        task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts the live display.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"func\">The action to execute.</param>\n    /// <returns>The result.</returns>\n    public T Start<T>(Func<LiveDisplayContext, T> func)\n    {\n        var task = StartAsync(ctx => Task.FromResult(func(ctx)));\n        return task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts the live display.\n    /// </summary>\n    /// <param name=\"func\">The action to execute.</param>\n    /// <returns>The result.</returns>\n    public async Task StartAsync(Func<LiveDisplayContext, Task> func)\n    {\n        ArgumentNullException.ThrowIfNull(func);\n\n        _ = await StartAsync<object?>(async ctx =>\n        {\n            await func(ctx).ConfigureAwait(false);\n            return default;\n        }).ConfigureAwait(false);\n    }\n\n    /// <summary>\n    /// Starts the live display.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"func\">The action to execute.</param>\n    /// <returns>The result.</returns>\n    public async Task<T> StartAsync<T>(Func<LiveDisplayContext, Task<T>> func)\n    {\n        ArgumentNullException.ThrowIfNull(func);\n\n        return await _console.RunExclusive(async () =>\n        {\n            var context = new LiveDisplayContext(_console, _target);\n            context.SetOverflow(Overflow, Cropping);\n\n            var renderer = new LiveDisplayRenderer(_console, context);\n            renderer.Started();\n\n            try\n            {\n                using (new RenderHookScope(_console, renderer))\n                {\n                    var result = await func(context).ConfigureAwait(false);\n                    context.Refresh();\n                    return result;\n                }\n            }\n            finally\n            {\n                renderer.Completed(AutoClear);\n            }\n        }).ConfigureAwait(false);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"LiveDisplay\"/>.\n/// </summary>\npublic static class LiveDisplayExtensions\n{\n    /// <summary>\n    /// Sets whether or not auto clear is enabled.\n    /// If enabled, the live display will be cleared when done.\n    /// </summary>\n    /// <param name=\"live\">The <see cref=\"LiveDisplay\"/> instance.</param>\n    /// <param name=\"enabled\">Whether or not auto clear is enabled.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static LiveDisplay AutoClear(this LiveDisplay live, bool enabled)\n    {\n        ArgumentNullException.ThrowIfNull(live);\n\n        live.AutoClear = enabled;\n\n        return live;\n    }\n\n    /// <summary>\n    /// Sets the vertical overflow strategy.\n    /// </summary>\n    /// <param name=\"live\">The <see cref=\"LiveDisplay\"/> instance.</param>\n    /// <param name=\"overflow\">The overflow strategy to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static LiveDisplay Overflow(this LiveDisplay live, VerticalOverflow overflow)\n    {\n        ArgumentNullException.ThrowIfNull(live);\n\n        live.Overflow = overflow;\n\n        return live;\n    }\n\n    /// <summary>\n    /// Sets the vertical overflow cropping strategy.\n    /// </summary>\n    /// <param name=\"live\">The <see cref=\"LiveDisplay\"/> instance.</param>\n    /// <param name=\"cropping\">The overflow cropping strategy to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static LiveDisplay Cropping(this LiveDisplay live, VerticalOverflowCropping cropping)\n    {\n        ArgumentNullException.ThrowIfNull(live);\n\n        live.Cropping = cropping;\n\n        return live;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/LiveDisplayContext.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a context that can be used to interact with a <see cref=\"LiveDisplay\"/>.\n/// </summary>\npublic sealed class LiveDisplayContext\n{\n    private readonly IAnsiConsole _console;\n\n    internal object Lock { get; }\n    internal LiveRenderable Live { get; }\n\n    internal LiveDisplayContext(IAnsiConsole console, IRenderable target)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n\n        Live = new LiveRenderable(_console, target);\n        Lock = new();\n    }\n\n    /// <summary>\n    /// Updates the live display target.\n    /// </summary>\n    /// <param name=\"target\">The new live display target.</param>\n    public void UpdateTarget(IRenderable? target)\n    {\n        lock (Lock)\n        {\n            Live.SetRenderable(target);\n            Refresh();\n        }\n    }\n\n    /// <summary>\n    /// Refreshes the live display.\n    /// </summary>\n    public void Refresh()\n    {\n        lock (Lock)\n        {\n            _console.Write(ControlCode.Empty);\n        }\n    }\n\n    internal void SetOverflow(VerticalOverflow overflow, VerticalOverflowCropping cropping)\n    {\n        Live.Overflow = overflow;\n        Live.OverflowCropping = cropping;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/LiveDisplayRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class LiveDisplayRenderer : IRenderHook\n{\n    private readonly IAnsiConsole _console;\n    private readonly LiveDisplayContext _context;\n    public LiveDisplayRenderer(IAnsiConsole console, LiveDisplayContext context)\n    {\n        _console = console;\n        _context = context;\n    }\n\n    public void Started()\n    {\n        _console.Cursor.Hide();\n    }\n\n    public void Completed(bool autoclear)\n    {\n        lock (_context.Lock)\n        {\n            if (autoclear)\n            {\n                _console.Write(_context.Live.RestoreCursor());\n            }\n            else\n            {\n                if (_context.Live.HasRenderable && _context.Live.DidOverflow)\n                {\n                    // Redraw the whole live renderable\n                    _console.Write(_context.Live.RestoreCursor());\n                    _context.Live.Overflow = VerticalOverflow.Visible;\n                    _console.Write(_context.Live.Target);\n                }\n\n                _console.WriteLine();\n            }\n\n            _console.Cursor.Show();\n        }\n    }\n\n    public IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_context.Lock)\n        {\n            yield return _context.Live.PositionCursor(options);\n\n            foreach (var renderable in renderables)\n            {\n                yield return renderable;\n            }\n\n            yield return _context.Live;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/LiveRenderable.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class LiveRenderable : Renderable\n{\n    private readonly object _lock = new();\n    private readonly IAnsiConsole _console;\n    private IRenderable? _renderable;\n    private SegmentShape? _shape;\n\n    public IRenderable? Target => _renderable;\n    public bool DidOverflow { get; private set; }\n\n    [MemberNotNullWhen(true, nameof(Target))]\n    public bool HasRenderable => _renderable != null;\n    public VerticalOverflow Overflow { get; set; }\n    public VerticalOverflowCropping OverflowCropping { get; set; }\n\n    public LiveRenderable(IAnsiConsole console)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n\n        Overflow = VerticalOverflow.Ellipsis;\n        OverflowCropping = VerticalOverflowCropping.Top;\n    }\n\n    public LiveRenderable(IAnsiConsole console, IRenderable renderable)\n        : this(console)\n    {\n        _renderable = renderable ?? throw new ArgumentNullException(nameof(renderable));\n    }\n\n    public void SetRenderable(IRenderable? renderable)\n    {\n        lock (_lock)\n        {\n            _renderable = renderable;\n        }\n    }\n\n    public IRenderable PositionCursor(RenderOptions options)\n    {\n        lock (_lock)\n        {\n            if (_shape == null)\n            {\n                return ControlCode.Empty;\n            }\n\n            // Check if the size have been reduced\n            if (_shape.Value.Height > options.ConsoleSize.Height || _shape.Value.Width > options.ConsoleSize.Width)\n            {\n                // Important reset shape, so the size can shrink\n                _shape = null;\n                return ControlCode.Create(options.Capabilities, w =>\n                {\n                    w.EraseInDisplay(2);\n                    w.ClearScrollback();\n                    w.CursorHome();\n                });\n            }\n\n            var linesToMoveUp = _shape.Value.Height - 1;\n            return ControlCode.Create(options.Capabilities, w =>\n            {\n                w.Write(\"\\r\"); // More efficient than CHA (CSI 1 G)?\n                w.CursorUp(linesToMoveUp);\n            });\n        }\n    }\n\n    public IRenderable RestoreCursor()\n    {\n        lock (_lock)\n        {\n            if (_shape == null)\n            {\n                return ControlCode.Empty;\n            }\n\n            var linesToClear = _shape.Value.Height - 1;\n            return ControlCode.Create(_console.Profile.Capabilities, w =>\n            {\n                w.Write(\"\\r\"); // More efficient than CHA (CSI 1 G)?\n                w.EraseInLine(2);\n\n                for (var count = 0; count < linesToClear; count++)\n                {\n                    w.CursorUp(1);\n                    w.EraseInLine(2);\n                }\n            });\n        }\n    }\n\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        lock (_lock)\n        {\n            DidOverflow = false;\n\n            if (_renderable != null)\n            {\n                var segments = _renderable.Render(options, maxWidth);\n                var lines = Segment.SplitLines(segments);\n\n                var shape = SegmentShape.Calculate(options, lines);\n                if (shape.Height > _console.Profile.Height)\n                {\n                    if (Overflow == VerticalOverflow.Crop)\n                    {\n                        if (OverflowCropping == VerticalOverflowCropping.Bottom)\n                        {\n                            // Remove bottom lines\n                            var index = Math.Min(_console.Profile.Height, lines.Count);\n                            var count = lines.Count - index;\n                            lines.RemoveRange(index, count);\n                        }\n                        else\n                        {\n                            // Remove top lines\n                            var start = lines.Count - _console.Profile.Height;\n                            lines.RemoveRange(0, start);\n                        }\n\n                        shape = SegmentShape.Calculate(options, lines);\n                    }\n                    else if (Overflow == VerticalOverflow.Ellipsis)\n                    {\n                        var ellipsisText = _console.Profile.Capabilities.Unicode ? \"…\" : \"...\";\n                        var ellipsis = new SegmentLine(((IRenderable)new Markup($\"[yellow]{ellipsisText}[/]\")).Render(options, maxWidth));\n\n                        if (OverflowCropping == VerticalOverflowCropping.Bottom)\n                        {\n                            // Remove bottom lines\n                            var index = Math.Min(_console.Profile.Height - 1, lines.Count);\n                            var count = lines.Count - index;\n                            lines.RemoveRange(index, count);\n                            lines.Add(ellipsis);\n                        }\n                        else\n                        {\n                            // Remove top lines\n                            var start = lines.Count - _console.Profile.Height;\n                            lines.RemoveRange(0, start + 1);\n                            lines.Insert(0, ellipsis);\n                        }\n\n                        shape = SegmentShape.Calculate(options, lines);\n                    }\n\n                    DidOverflow = true;\n                }\n\n                _shape = _shape?.Inflate(shape) ?? shape;\n                _shape.Value.Apply(options, ref lines);\n\n                foreach (var (_, _, last, line) in lines.Enumerate())\n                {\n                    foreach (var item in line)\n                    {\n                        yield return item;\n                    }\n\n                    if (!last)\n                    {\n                        yield return Segment.LineBreak;\n                    }\n                }\n\n                yield break;\n            }\n\n            _shape = null;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/DownloadedColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing download progress.\n/// </summary>\npublic sealed class DownloadedColumn : ProgressColumn\n{\n    /// <summary>\n    /// Gets or sets the <see cref=\"CultureInfo\"/> to use.\n    /// </summary>\n    public CultureInfo? Culture { get; set; }\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"FileSizeBase\"/> to use.\n    /// </summary>\n    public FileSizeBase Base { get; set; } = FileSizeBase.Binary;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether to display the transfer speed in bits.\n    /// </summary>\n    public bool ShowBits { get; set; }\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var total = new FileSize(task.MaxValue, Base, ShowBits);\n\n        if (task.IsFinished)\n        {\n            return new Markup(string.Format(\n                \"[green]{0} {1}[/]\",\n                total.Format(Culture),\n                total.Suffix));\n        }\n        else\n        {\n            var downloaded = new FileSize(task.Value, total.Prefix, Base, ShowBits);\n\n            return new Markup(string.Format(\n                \"{0}[grey]/[/]{1} [grey]{2}[/]\",\n                downloaded.Format(Culture),\n                total.Format(Culture),\n                total.Suffix));\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/ElapsedTimeColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing the elapsed time of a task.\n/// </summary>\npublic sealed class ElapsedTimeColumn : ProgressColumn\n{\n    /// <inheritdoc/>\n    protected internal override bool NoWrap => true;\n\n    /// <summary>\n    /// Gets or sets the style of the remaining time text.\n    /// </summary>\n    public Style Style { get; set; } = Color.Blue;\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var elapsed = task.ElapsedTime;\n        if (elapsed == null)\n        {\n            return new Markup(\"--:--:--\");\n        }\n\n        if (elapsed.Value.TotalHours > 99)\n        {\n            return new Markup(\"**:**:**\");\n        }\n\n        return new Text($\"{elapsed.Value:hh\\\\:mm\\\\:ss}\", Style);\n    }\n\n    /// <inheritdoc/>\n    public override int? GetColumnWidth(RenderOptions options)\n    {\n        return 8;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/PercentageColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing task progress in percentage.\n/// </summary>\npublic sealed class PercentageColumn : ProgressColumn\n{\n    /// <summary>\n    /// Gets or sets the style for a non-complete task.\n    /// </summary>\n    public Style Style { get; set; } = Style.Plain;\n\n    /// <summary>\n    /// Gets or sets the style for a completed task.\n    /// </summary>\n    public Style CompletedStyle { get; set; } = Color.Green;\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var percentage = (int)task.Percentage;\n        var style = percentage == 100 ? CompletedStyle : Style;\n        return new Text($\"{percentage}%\", style).RightJustified();\n    }\n\n    /// <inheritdoc/>\n    public override int? GetColumnWidth(RenderOptions options)\n    {\n        return 4;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"PercentageColumn\"/>.\n/// </summary>\npublic static class PercentageColumnExtensions\n{\n    /// <summary>\n    /// Sets the style for a non-complete task.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static PercentageColumn Style(this PercentageColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.Style = style;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the style for a completed task.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static PercentageColumn CompletedStyle(this PercentageColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.CompletedStyle = style;\n        return column;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/ProgressBarColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing task progress as a progress bar.\n/// </summary>\npublic sealed class ProgressBarColumn : ProgressColumn\n{\n    /// <summary>\n    /// Gets or sets the width of the column.\n    /// </summary>\n    public int? Width { get; set; } = 40;\n\n    /// <summary>\n    /// Gets or sets the style of completed portions of the progress bar.\n    /// </summary>\n    public Style CompletedStyle { get; set; } = Color.Yellow;\n\n    /// <summary>\n    /// Gets or sets the style of a finished progress bar.\n    /// </summary>\n    public Style FinishedStyle { get; set; } = Color.Green;\n\n    /// <summary>\n    /// Gets or sets the style of remaining portions of the progress bar.\n    /// </summary>\n    public Style RemainingStyle { get; set; } = Color.Grey;\n\n    /// <summary>\n    /// Gets or sets the style of an indeterminate progress bar.\n    /// </summary>\n    public Style IndeterminateStyle { get; set; } = ProgressBar.DefaultPulseStyle;\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        return new ProgressBar\n        {\n            MaxValue = task.MaxValue,\n            Value = task.Value,\n            Width = Width,\n            CompletedStyle = CompletedStyle,\n            FinishedStyle = FinishedStyle,\n            RemainingStyle = RemainingStyle,\n            IndeterminateStyle = IndeterminateStyle,\n            IsIndeterminate = task.IsIndeterminate,\n        };\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"ProgressBarColumn\"/>.\n/// </summary>\npublic static class ProgressBarColumnExtensions\n{\n    /// <summary>\n    /// Sets the style of completed portions of the progress bar.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressBarColumn CompletedStyle(this ProgressBarColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.CompletedStyle = style;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the style of a finished progress bar.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressBarColumn FinishedStyle(this ProgressBarColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.FinishedStyle = style;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the style of remaining portions of the progress bar.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressBarColumn RemainingStyle(this ProgressBarColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.RemainingStyle = style;\n        return column;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/RemainingTimeColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing the remaining time of a task.\n/// Displays \"**:**:**\" if the task is indeterminate or the remaining time is greater than 99 hours.\n/// </summary>\npublic sealed class RemainingTimeColumn : ProgressColumn\n{\n    /// <inheritdoc/>\n    protected internal override bool NoWrap => true;\n\n    /// <summary>\n    /// Gets or sets the style of the remaining time text.\n    /// </summary>\n    public Style Style { get; set; } = Color.Blue;\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var remaining = task.RemainingTime;\n        if (remaining == null)\n        {\n            return new Markup(\"--:--:--\");\n        }\n\n        if (remaining.Value.TotalHours > 99 || task.IsIndeterminate)\n        {\n            return new Markup(\"**:**:**\");\n        }\n\n        return new Text($\"{remaining.Value:hh\\\\:mm\\\\:ss}\", Style);\n    }\n\n    /// <inheritdoc/>\n    public override int? GetColumnWidth(RenderOptions options)\n    {\n        return 8;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"RemainingTimeColumn\"/>.\n/// </summary>\npublic static class RemainingTimeColumnExtensions\n{\n    /// <summary>\n    /// Sets the style of the remaining time text.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static RemainingTimeColumn Style(this RemainingTimeColumn column, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.Style = style;\n        return column;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/SpinnerColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing a spinner.\n/// </summary>\npublic sealed class SpinnerColumn : ProgressColumn\n{\n    private const string ACCUMULATED = \"SPINNER_ACCUMULATED\";\n    private const string INDEX = \"SPINNER_INDEX\";\n\n    private readonly Lock _lock;\n    private Spinner _spinner;\n    private int? _maxWidth;\n    private string? _completed;\n    private string? _pending;\n\n    /// <inheritdoc/>\n    protected internal override bool NoWrap => true;\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"Console.Spinner\"/>.\n    /// </summary>\n    public Spinner Spinner\n    {\n        get => _spinner;\n        set\n        {\n            lock (_lock)\n            {\n                _spinner = value ?? Spinner.Known.Default;\n                _maxWidth = null;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the text that should be shown instead\n    /// of the spinner once a task completes.\n    /// </summary>\n    public string? CompletedText\n    {\n        get => _completed;\n        set\n        {\n            _completed = value;\n            _maxWidth = null;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the text that should be shown instead\n    /// of the spinner before a task begins.\n    /// </summary>\n    public string? PendingText\n    {\n        get => _pending;\n        set\n        {\n            _pending = value;\n            _maxWidth = null;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the completed style.\n    /// </summary>\n    public Style? CompletedStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the pending style.\n    /// </summary>\n    public Style? PendingStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style of the spinner.\n    /// </summary>\n    public Style? Style { get; set; } = Color.Yellow;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SpinnerColumn\"/> class.\n    /// </summary>\n    public SpinnerColumn()\n        : this(Spinner.Known.Default)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SpinnerColumn\"/> class.\n    /// </summary>\n    /// <param name=\"spinner\">The spinner to use.</param>\n    public SpinnerColumn(Spinner spinner)\n    {\n        _spinner = spinner ?? throw new ArgumentNullException(nameof(spinner));\n        _lock = LockFactory.Create();\n    }\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var useAscii = !options.Unicode && _spinner.IsUnicode;\n        var spinner = useAscii ? Spinner.Known.Ascii : _spinner ?? Spinner.Known.Default;\n\n        if (!task.IsStarted)\n        {\n            return new Markup(PendingText ?? \" \", PendingStyle ?? Spectre.Console.Style.Plain);\n        }\n\n        if (task.IsFinished)\n        {\n            return new Markup(CompletedText ?? \" \", CompletedStyle ?? Spectre.Console.Style.Plain);\n        }\n\n        var accumulated = task.State.Update<double>(ACCUMULATED, acc => acc + deltaTime.TotalMilliseconds);\n        if (accumulated >= spinner.Interval.TotalMilliseconds)\n        {\n            task.State.Update<double>(ACCUMULATED, _ => 0);\n            task.State.Update<int>(INDEX, index => index + 1);\n        }\n\n        var index = task.State.Get<int>(INDEX);\n        var frame = spinner.Frames[index % spinner.Frames.Count];\n        return new Markup(frame.EscapeMarkup(), Style ?? Spectre.Console.Style.Plain);\n    }\n\n    /// <inheritdoc/>\n    public override int? GetColumnWidth(RenderOptions options)\n    {\n        return GetMaxWidth(options);\n    }\n\n    private int GetMaxWidth(RenderOptions options)\n    {\n        lock (_lock)\n        {\n            if (_maxWidth == null)\n            {\n                var useAscii = !options.Unicode && _spinner.IsUnicode;\n                var spinner = useAscii ? Spinner.Known.Ascii : _spinner ?? Spinner.Known.Default;\n\n                _maxWidth = Math.Max(\n                    Math.Max(\n                        ((IRenderable)new Markup(PendingText ?? \" \")).Measure(options, int.MaxValue).Max,\n                        ((IRenderable)new Markup(CompletedText ?? \" \")).Measure(options, int.MaxValue).Max),\n                    spinner.Frames.Max(frame => Cell.GetCellLength(frame)));\n            }\n\n            return _maxWidth.Value;\n        }\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"SpinnerColumn\"/>.\n/// </summary>\npublic static class SpinnerColumnExtensions\n{\n    /// <summary>\n    /// Sets the style of the spinner.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SpinnerColumn Style(this SpinnerColumn column, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.Style = style;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the text that should be shown instead of the spinner\n    /// once a task completes.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"text\">The text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SpinnerColumn CompletedText(this SpinnerColumn column, string? text)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.CompletedText = text;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the completed style of the spinner.\n    /// </summary>\n    /// <param name=\"column\">The column.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SpinnerColumn CompletedStyle(this SpinnerColumn column, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        column.CompletedStyle = style;\n        return column;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/TaskDescriptionColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing the task description.\n/// </summary>\npublic sealed class TaskDescriptionColumn : ProgressColumn\n{\n    /// <inheritdoc/>\n    protected internal override bool NoWrap => true;\n\n    /// <summary>\n    /// Gets or sets the alignment of the task description.\n    /// </summary>\n    public Justify Alignment { get; set; } = Justify.Right;\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        var text = task.Description?.RemoveNewLines()?.Trim();\n        return new Markup(text ?? string.Empty).Overflow(Overflow.Ellipsis).Justify(Alignment);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Columns/TransferSpeedColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A column showing transfer speed.\n/// </summary>\npublic sealed class TransferSpeedColumn : ProgressColumn\n{\n    /// <summary>\n    /// Gets or sets the <see cref=\"CultureInfo\"/> to use.\n    /// </summary>\n    public CultureInfo? Culture { get; set; }\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"FileSizeBase\"/> to use.\n    /// </summary>\n    public FileSizeBase Base { get; set; } = FileSizeBase.Binary;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether to display the transfer speed in bits.\n    /// </summary>\n    public bool ShowBits { get; set; }\n\n    /// <inheritdoc/>\n    public override IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime)\n    {\n        if (task.Speed == null)\n        {\n            return new Text(\"?/s\");\n        }\n\n        if (task.IsFinished)\n        {\n            return new Markup(string.Empty, Style.Plain);\n        }\n        else\n        {\n            var size = new FileSize(task.Speed.Value, Base, ShowBits);\n            return new Markup(string.Format(\"{0}/s\", size.ToString(suffix: true, Culture)));\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Progress.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a task list.\n/// </summary>\npublic sealed class Progress\n{\n    private readonly IAnsiConsole _console;\n    private readonly TimeProvider _timeProvider;\n\n    /// <summary>\n    /// Gets or sets a optional custom render function.\n    /// </summary>\n    public Func<IRenderable, IReadOnlyList<ProgressTask>, IRenderable> RenderHook { get; set; } = (renderable, _) => renderable;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not task list should auto refresh.\n    /// Defaults to <c>true</c>.\n    /// </summary>\n    public bool AutoRefresh { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the task list should\n    /// be cleared once it completes.\n    /// Defaults to <c>false</c>.\n    /// </summary>\n    public bool AutoClear { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the task list should\n    /// only include tasks not completed\n    /// Defaults to <c>false</c>.\n    /// </summary>\n    public bool HideCompleted { get; set; }\n\n    /// <summary>\n    /// Gets or sets the refresh rate if <c>AutoRefresh</c> is enabled.\n    /// Defaults to 10 times/second.\n    /// </summary>\n    public TimeSpan RefreshRate { get; set; } = TimeSpan.FromMilliseconds(100);\n\n    internal List<ProgressColumn> Columns { get; }\n\n    internal ProgressRenderer? FallbackRenderer { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Progress\"/> class.\n    /// </summary>\n    /// <param name=\"console\">The console to render to.</param>\n    /// <param name=\"timeProvider\">The time provider to use. Defaults to <see cref=\"TimeProvider.System\"/>.</param>\n    public Progress(IAnsiConsole console, TimeProvider? timeProvider = null)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _timeProvider = timeProvider ?? TimeProvider.System;\n\n        // Initialize with default columns\n        Columns =\n        [\n            new TaskDescriptionColumn(),\n            new ProgressBarColumn(),\n            new PercentageColumn()\n        ];\n    }\n\n    /// <summary>\n    /// Starts the progress task list.\n    /// </summary>\n    /// <param name=\"action\">The action to execute.</param>\n    public void Start(Action<ProgressContext> action)\n    {\n        var task = StartAsync(ctx =>\n        {\n            action(ctx);\n            return Task.CompletedTask;\n        });\n\n        task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts the progress task list and returns a result.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"func\">he action to execute.</param>\n    /// <returns>The result.</returns>\n    public T Start<T>(Func<ProgressContext, T> func)\n    {\n        var task = StartAsync(ctx => Task.FromResult(func(ctx)));\n        return task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts the progress task list.\n    /// </summary>\n    /// <param name=\"action\">The action to execute.</param>\n    /// <returns>A <see cref=\"Task\"/> representing the asynchronous operation.</returns>\n    public async Task StartAsync(Func<ProgressContext, Task> action)\n    {\n        ArgumentNullException.ThrowIfNull(action);\n\n        _ = await StartAsync<object?>(async progressContext =>\n        {\n            await action(progressContext).ConfigureAwait(false);\n            return null;\n        }).ConfigureAwait(false);\n    }\n\n    /// <summary>\n    /// Starts the progress task list and returns a result.\n    /// </summary>\n    /// <param name=\"action\">The action to execute.</param>\n    /// <typeparam name=\"T\">The result type of task.</typeparam>\n    /// <returns>A <see cref=\"Task{T}\"/> representing the asynchronous operation.</returns>\n    public async Task<T> StartAsync<T>(Func<ProgressContext, Task<T>> action)\n    {\n        ArgumentNullException.ThrowIfNull(action);\n\n        return await _console.RunExclusive(async () =>\n        {\n            var renderer = CreateRenderer();\n            renderer.Started();\n\n            T result;\n\n            try\n            {\n                using (new RenderHookScope(_console, renderer))\n                {\n                    var context = new ProgressContext(_console, renderer, _timeProvider);\n\n                    if (AutoRefresh)\n                    {\n                        using (var thread = new ProgressRefreshThread(context, renderer.RefreshRate))\n                        {\n                            result = await action(context).ConfigureAwait(false);\n                        }\n                    }\n                    else\n                    {\n                        result = await action(context).ConfigureAwait(false);\n                    }\n\n                    context.Refresh();\n                }\n            }\n            finally\n            {\n                renderer.Completed(AutoClear);\n            }\n\n            return result;\n        }).ConfigureAwait(false);\n    }\n\n    private ProgressRenderer CreateRenderer()\n    {\n        var caps = _console.Profile.Capabilities;\n        var interactive = caps.Interactive && caps.Ansi;\n\n        if (interactive)\n        {\n            var columns = new List<ProgressColumn>(Columns);\n            return new DefaultProgressRenderer(_console, columns, RefreshRate, HideCompleted, RenderHook);\n        }\n        else\n        {\n            return FallbackRenderer ?? new FallbackProgressRenderer(_timeProvider);\n        }\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Progress\"/>.\n/// </summary>\npublic static class ProgressExtensions\n{\n    /// <summary>\n    /// Sets the columns to be used for an <see cref=\"Progress\"/> instance.\n    /// </summary>\n    /// <param name=\"progress\">The <see cref=\"Progress\"/> instance.</param>\n    /// <param name=\"columns\">The columns to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Progress Columns(this Progress progress, params ProgressColumn[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(progress);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        if (!columns.Any())\n        {\n            throw new InvalidOperationException(\"At least one column must be specified.\");\n        }\n\n        progress.Columns.Clear();\n        progress.Columns.AddRange(columns);\n\n        return progress;\n    }\n\n    /// <summary>\n    /// Sets an optional hook to intercept rendering.\n    /// </summary>\n    /// <param name=\"progress\">The <see cref=\"Progress\"/> instance.</param>\n    /// <param name=\"renderHook\">The custom render function.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Progress UseRenderHook(this Progress progress, Func<IRenderable, IReadOnlyList<ProgressTask>, IRenderable> renderHook)\n    {\n        progress.RenderHook = renderHook;\n\n        return progress;\n    }\n\n    /// <summary>\n    /// Sets whether or not auto refresh is enabled.\n    /// If disabled, you will manually have to refresh the progress.\n    /// </summary>\n    /// <param name=\"progress\">The <see cref=\"Progress\"/> instance.</param>\n    /// <param name=\"enabled\">Whether or not auto refresh is enabled.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Progress AutoRefresh(this Progress progress, bool enabled)\n    {\n        ArgumentNullException.ThrowIfNull(progress);\n\n        progress.AutoRefresh = enabled;\n\n        return progress;\n    }\n\n    /// <summary>\n    /// Sets whether or not auto clear is enabled.\n    /// If enabled, the task tabled will be removed once\n    /// all tasks have completed.\n    /// </summary>\n    /// <param name=\"progress\">The <see cref=\"Progress\"/> instance.</param>\n    /// <param name=\"enabled\">Whether or not auto clear is enabled.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Progress AutoClear(this Progress progress, bool enabled)\n    {\n        ArgumentNullException.ThrowIfNull(progress);\n\n        progress.AutoClear = enabled;\n\n        return progress;\n    }\n\n    /// <summary>\n    /// Sets whether or not hide completed is enabled.\n    /// If enabled, the task tabled will be removed once it is\n    /// completed.\n    /// </summary>\n    /// <param name=\"progress\">The <see cref=\"Progress\"/> instance.</param>\n    /// <param name=\"enabled\">Whether or not hide completed is enabled.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Progress HideCompleted(this Progress progress, bool enabled)\n    {\n        ArgumentNullException.ThrowIfNull(progress);\n\n        progress.HideCompleted = enabled;\n\n        return progress;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a progress column.\n/// </summary>\npublic abstract class ProgressColumn\n{\n    /// <summary>\n    /// Gets a value indicating whether or not content should not wrap.\n    /// </summary>\n    protected internal virtual bool NoWrap { get; }\n\n    /// <summary>\n    /// Gets a renderable representing the column.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"deltaTime\">The elapsed time since last call.</param>\n    /// <returns>A renderable representing the column.</returns>\n    public abstract IRenderable Render(RenderOptions options, ProgressTask task, TimeSpan deltaTime);\n\n    /// <summary>\n    /// Gets the width of the column.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <returns>The width of the column, or <c>null</c> to calculate.</returns>\n    public virtual int? GetColumnWidth(RenderOptions options)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressContext.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a context that can be used to interact with a <see cref=\"Progress\"/>.\n/// </summary>\npublic sealed class ProgressContext\n{\n    private readonly List<ProgressTask> _tasks;\n    private readonly Lock _taskLock;\n    private readonly IAnsiConsole _console;\n    private readonly ProgressRenderer _renderer;\n    private readonly TimeProvider _timeProvider;\n    private int _taskId;\n\n    /// <summary>\n    /// Gets a value indicating whether or not all started tasks have completed.\n    /// </summary>\n    public bool IsFinished\n    {\n        get\n        {\n            lock (_taskLock)\n            {\n                return _tasks.Where(x => x.IsStarted).All(task => task.IsFinished);\n            }\n        }\n    }\n\n    internal ProgressContext(IAnsiConsole console, ProgressRenderer renderer, TimeProvider timeProvider)\n    {\n        _tasks = [];\n        _taskLock = LockFactory.Create();\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _renderer = renderer ?? throw new ArgumentNullException(nameof(renderer));\n        _timeProvider = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider));\n    }\n\n    /// <summary>\n    /// Adds a task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"autoStart\">Whether or not the task should start immediately.</param>\n    /// <param name=\"maxValue\">The task's max value.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTask(string description, bool autoStart = true, double maxValue = 100)\n    {\n        lock (_taskLock)\n        {\n            var settings = new ProgressTaskSettings { AutoStart = autoStart, MaxValue = maxValue, };\n\n            return AddTaskAtInternal(description, settings, _tasks.Count);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"index\">The index at which the task should be inserted.</param>\n    /// <param name=\"autoStart\">Whether or not the task should start immediately.</param>\n    /// <param name=\"maxValue\">The task's max value.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskAt(string description, int index, bool autoStart = true, double maxValue = 100)\n    {\n        lock (_taskLock)\n        {\n            var settings = new ProgressTaskSettings { AutoStart = autoStart, MaxValue = maxValue, };\n\n            return AddTaskAtInternal(description, settings, index);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task before the reference task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"referenceProgressTask\">The reference task to add before.</param>\n    /// <param name=\"autoStart\">Whether or not the task should start immediately.</param>\n    /// <param name=\"maxValue\">The task's max value.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskBefore(string description, ProgressTask referenceProgressTask, bool autoStart = true, double maxValue = 100)\n    {\n        lock (_taskLock)\n        {\n            var settings = new ProgressTaskSettings { AutoStart = autoStart, MaxValue = maxValue, };\n            var indexOfReference = _tasks.IndexOf(referenceProgressTask);\n\n            return AddTaskAtInternal(description, settings, indexOfReference);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task after the reference task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"referenceProgressTask\">The reference task to add after.</param>\n    /// <param name=\"autoStart\">Whether or not the task should start immediately.</param>\n    /// <param name=\"maxValue\">The task's max value.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskAfter(string description, ProgressTask referenceProgressTask, bool autoStart = true, double maxValue = 100)\n    {\n        lock (_taskLock)\n        {\n            var settings = new ProgressTaskSettings { AutoStart = autoStart, MaxValue = maxValue, };\n            var indexOfReference = _tasks.IndexOf(referenceProgressTask);\n\n            return AddTaskAtInternal(description, settings, indexOfReference + 1);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"settings\">The task settings.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTask(string description, ProgressTaskSettings settings)\n    {\n        lock (_taskLock)\n        {\n            return AddTaskAtInternal(description, settings, _tasks.Count);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task at the specified index.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"settings\">The task settings.</param>\n    /// <param name=\"index\">The index at which the task should be inserted.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskAt(string description, ProgressTaskSettings settings, int index)\n    {\n        lock (_taskLock)\n        {\n            return AddTaskAtInternal(description, settings, index);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task before the reference task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"settings\">The task settings.</param>\n    /// <param name=\"referenceProgressTask\">The reference task to add before.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskBefore(string description, ProgressTaskSettings settings, ProgressTask referenceProgressTask)\n    {\n        lock (_taskLock)\n        {\n            var indexOfReference = _tasks.IndexOf(referenceProgressTask);\n\n            return AddTaskAtInternal(description, settings, indexOfReference);\n        }\n    }\n\n    /// <summary>\n    /// Adds a task after the reference task.\n    /// </summary>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"settings\">The task settings.</param>\n    /// <param name=\"referenceProgressTask\">The reference task to add after.</param>\n    /// <returns>The newly created task.</returns>\n    public ProgressTask AddTaskAfter(string description, ProgressTaskSettings settings, ProgressTask referenceProgressTask)\n    {\n        lock (_taskLock)\n        {\n            var indexOfReference = _tasks.IndexOf(referenceProgressTask);\n\n            return AddTaskAtInternal(description, settings, indexOfReference + 1);\n        }\n    }\n\n    /// <summary>\n    /// Removes the task from the task collection.\n    /// </summary>\n    /// <param name=\"task\">The task to remove.</param>\n    /// <returns><c>true</c> if the task was successfully removed; otherwise, <c>false</c>.</returns>\n    public bool RemoveTask(ProgressTask task)\n    {\n        lock (_taskLock)\n        {\n            return _tasks.Remove(task);\n        }\n    }\n\n    /// <summary>\n    /// Refreshes the current progress.\n    /// </summary>\n    public void Refresh()\n    {\n        _renderer.Update(this);\n        _console.Write(ControlCode.Empty);\n    }\n\n    private ProgressTask AddTaskAtInternal(string description, ProgressTaskSettings settings, int position)\n    {\n        ArgumentNullException.ThrowIfNull(settings);\n\n        var task = new ProgressTask(_taskId++, description, settings.MaxValue, settings.AutoStart, _timeProvider);\n\n        _tasks.Insert(position, task);\n\n        return task;\n    }\n\n    internal IReadOnlyList<ProgressTask> GetTasks()\n    {\n        lock (_taskLock)\n        {\n            return new List<ProgressTask>(_tasks);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressRefreshThread.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ProgressRefreshThread : IDisposable\n{\n    private readonly ProgressContext _context;\n    private readonly TimeSpan _refreshRate;\n    private readonly ManualResetEvent _running;\n    private readonly ManualResetEvent _stopped;\n    private readonly Thread? _thread;\n\n    public ProgressRefreshThread(ProgressContext context, TimeSpan refreshRate)\n    {\n        _context = context ?? throw new ArgumentNullException(nameof(context));\n        _refreshRate = refreshRate;\n        _running = new ManualResetEvent(false);\n        _stopped = new ManualResetEvent(false);\n\n        _thread = new Thread(Run);\n        _thread.IsBackground = true;\n        _thread.Start();\n    }\n\n    public void Dispose()\n    {\n        if (_thread == null || !_running.WaitOne(0))\n        {\n            return;\n        }\n\n        _stopped.Set();\n        _thread.Join();\n\n        _stopped.Dispose();\n        _running.Dispose();\n    }\n\n    private void Run()\n    {\n        _running.Set();\n\n        try\n        {\n            while (!_stopped.WaitOne(_refreshRate))\n            {\n                _context.Refresh();\n            }\n        }\n        finally\n        {\n            _stopped.Reset();\n            _running.Reset();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal abstract class ProgressRenderer : IRenderHook\n{\n    public abstract TimeSpan RefreshRate { get; }\n\n    public virtual void Started()\n    {\n    }\n\n    public virtual void Completed(bool clear)\n    {\n    }\n\n    public abstract void Update(ProgressContext context);\n    public abstract IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables);\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressSample.cs",
    "content": "namespace Spectre.Console;\n\ninternal readonly struct ProgressSample\n{\n    public double Value { get; }\n    public DateTime Timestamp { get; }\n\n    public ProgressSample(DateTime timestamp, double value)\n    {\n        Timestamp = timestamp;\n        Value = value;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressTask.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a progress task.\n/// </summary>\npublic sealed class ProgressTask : IProgress<double>\n{\n    private readonly Lazy<CircularBuffer<ProgressSample>> lazySamples;\n    private readonly Lock _lock;\n    private readonly TimeProvider _timeProvider;\n\n    private double _maxValue;\n    private string _description;\n    private double _value;\n\n    private volatile bool _samplesChanged;\n\n    private double? _cachedLastSpeed;\n    private DateTime _lastSpeedCalculation = DateTime.MinValue;\n    private CircularBuffer<ProgressSample> Samples => lazySamples.Value;\n\n    /// <summary>\n    /// Gets the task ID.\n    /// </summary>\n    public int Id { get; }\n\n    /// <summary>\n    /// Gets or sets optional user tag data.\n    /// </summary>\n    public object? Tag { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether to override the default hiding behavior of this task when completed.\n    /// </summary>\n    public bool? HideWhenCompleted { get; set; }\n\n    /// <summary>\n    /// Gets or sets the task description.\n    /// </summary>\n    public string Description\n    {\n        get => _description;\n        set => Update(description: value);\n    }\n\n    /// <summary>\n    /// Gets or sets the max value of the task.\n    /// </summary>\n    public double MaxValue\n    {\n        get => _maxValue;\n        set => Update(maxValue: value);\n    }\n\n    /// <summary>\n    /// Gets or sets the value of the task.\n    /// </summary>\n    public double Value\n    {\n        get => _value;\n        set => Update(value: value);\n    }\n\n    /// <summary>\n    /// Gets the start time of the task.\n    /// </summary>\n    public DateTime? StartTime { get; private set; }\n\n    /// <summary>\n    /// Gets the stop time of the task.\n    /// </summary>\n    public DateTime? StopTime { get; private set; }\n\n    /// <summary>\n    /// Gets the task state.\n    /// </summary>\n    public ProgressTaskState State { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not the task has started.\n    /// </summary>\n    public bool IsStarted => StartTime != null;\n\n    /// <summary>\n    /// Gets a value indicating whether or not the task has finished.\n    /// </summary>\n    public bool IsFinished => StopTime != null || Value >= MaxValue;\n\n    /// <summary>\n    /// Gets the percentage done of the task.\n    /// </summary>\n    public double Percentage => GetPercentage();\n\n    /// <summary>\n    /// Gets the speed measured in steps/second.\n    /// </summary>\n    public double? Speed => GetSpeed();\n\n    /// <summary>\n    /// Gets the elapsed time.\n    /// </summary>\n    public TimeSpan? ElapsedTime => GetElapsedTime();\n\n    /// <summary>\n    /// Gets the remaining time.\n    /// </summary>\n    public TimeSpan? RemainingTime => GetRemainingTime();\n\n    /// <summary>\n    /// Gets or sets the maximum time a calculated speed value is cached.\n    /// When estimating speed, if the oldest sample is older than this value, the current time is used as the end of the timespan instead.\n    /// This causes the predicted speed to naturally decay if no new samples are received.\n    /// </summary>\n    public TimeSpan MaxTimeForSpeedCache { get; set; } = TimeSpan.FromSeconds(1);\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the ProgressBar shows\n    /// actual values or generic, continuous progress feedback.\n    /// </summary>\n    public bool IsIndeterminate { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ProgressTask\"/> class.\n    /// </summary>\n    /// <param name=\"id\">The task ID.</param>\n    /// <param name=\"description\">The task description.</param>\n    /// <param name=\"maxValue\">The task max value.</param>\n    /// <param name=\"autoStart\">Whether or not the task should start automatically.</param>\n    /// <param name=\"timeProvider\">The time provider to use. Defaults to <see cref=\"TimeProvider.System\"/>.</param>\n    public ProgressTask(int id, string description, double maxValue, bool autoStart = true, TimeProvider? timeProvider = null)\n    {\n        lazySamples = new(() => new CircularBuffer<ProgressSample>(MaxSamplesKept) { UniqueRemovedCheck = false });\n        _lock = LockFactory.Create();\n        _timeProvider = timeProvider ?? TimeProvider.System;\n        _maxValue = maxValue;\n        _value = 0;\n        _description = description?.RemoveNewLines()?.Trim() ??\n                       throw new ArgumentNullException(nameof(description));\n\n        if (string.IsNullOrWhiteSpace(_description))\n        {\n            throw new ArgumentException(\"Task name cannot be empty\", nameof(description));\n        }\n\n        Id = id;\n        State = new ProgressTaskState();\n        StartTime = autoStart ? _timeProvider.GetLocalNow().LocalDateTime : null;\n    }\n\n    /// <summary>\n    /// Starts the task.\n    /// </summary>\n    public void StartTask()\n    {\n        lock (_lock)\n        {\n            if (StopTime != null)\n            {\n                throw new InvalidOperationException(\"Stopped tasks cannot be restarted\");\n            }\n\n            StartTime = _timeProvider.GetLocalNow().LocalDateTime;\n            StopTime = null;\n        }\n    }\n\n    /// <summary>\n    /// Stops and marks the task as finished.\n    /// </summary>\n    public void StopTask()\n    {\n        lock (_lock)\n        {\n            var now = _timeProvider.GetLocalNow().LocalDateTime;\n            StartTime ??= now;\n            StopTime = now;\n        }\n    }\n\n    /// <summary>\n    /// Increments the task's value.\n    /// </summary>\n    /// <param name=\"value\">The value to increment with.</param>\n    public void Increment(double value)\n    {\n        Update(increment: value);\n    }\n\n    /// <summary>\n    /// Gets or sets the maximum age of samples kept for calculating speed and estimated time remaining.\n    /// Samples older than this value are discarded to more accurately reflect the current speed.\n    /// </summary>\n    public TimeSpan MaxSamplingAge { get; set; } = TimeSpan.FromSeconds(30);\n\n    /// <summary>\n    /// Gets or sets the maximum number of samples to keep for calculating speed and estimated time remaining.\n    /// If set to 0, no samples are kept.\n    /// </summary>\n    public int MaxSamplesKept { get; set; } = 1000;\n\n    private void Update(\n        string? description = null,\n        double? maxValue = null,\n        double? increment = null,\n        double? value = null)\n    {\n        lock (_lock)\n        {\n            var startValue = Value;\n\n            if (description != null)\n            {\n                description = description?.RemoveNewLines()?.Trim();\n                if (string.IsNullOrWhiteSpace(description))\n                {\n                    throw new InvalidOperationException(\"Task name cannot be empty.\");\n                }\n\n                _description = description;\n            }\n\n            if (maxValue != null)\n            {\n                _maxValue = maxValue.Value;\n            }\n\n            if (increment != null)\n            {\n                _value += increment.Value;\n            }\n\n            if (value != null)\n            {\n                _value = value.Value;\n            }\n\n            // Need to cap the max value?\n            if (_value > _maxValue)\n            {\n                _value = _maxValue;\n            }\n\n            if (MaxSamplesKept == 0)\n            {\n                return;\n            }\n\n            _samplesChanged = true;\n\n            var timestamp = _timeProvider.GetLocalNow().LocalDateTime;\n            if (Samples.Count == 0 && StartTime != null)\n            {\n                Samples.Add(new ProgressSample(StartTime.Value, 0));\n            }\n\n            Samples.Add(new ProgressSample(timestamp, Value - startValue));\n        }\n    }\n\n    private double GetPercentage()\n    {\n        if (MaxValue == 0)\n        {\n            return 100;\n        }\n\n        var percentage = (Value / MaxValue) * 100;\n        percentage = Math.Min(100, Math.Max(0, percentage));\n        return percentage;\n    }\n\n    private double? GetSpeed()\n    {\n        var now = _timeProvider.GetLocalNow().LocalDateTime;\n        if (!_samplesChanged && (now - _lastSpeedCalculation) < MaxTimeForSpeedCache)\n        {\n            return _cachedLastSpeed;\n        }\n\n        lock (_lock)\n        {\n            if (StartTime == null || !lazySamples.IsValueCreated || Samples.Count == 0 || StopTime != null)\n            {\n                return _cachedLastSpeed;\n            }\n\n            _lastSpeedCalculation = now;\n            _samplesChanged = false;\n\n            var threshold = now - MaxSamplingAge;\n            var validSamples = Samples.Where(a => a.Timestamp >= threshold).ToList();\n            if (validSamples.Count == 0)\n            {\n                return _cachedLastSpeed = null;\n            }\n\n            var first = validSamples[0];\n            var newestSampleTime = Samples[Samples.Count - 1].Timestamp;\n            if (StopTime == null)\n            {\n                if (now - newestSampleTime > MaxTimeForSpeedCache)\n                {\n                    newestSampleTime = now;\n                }\n            }\n\n            var totalTime = newestSampleTime - first.Timestamp;\n            if (totalTime == TimeSpan.Zero)\n            {\n                return _cachedLastSpeed = null;\n            }\n\n            var totalCompleted = validSamples.Sum(x => x.Value);\n            return _cachedLastSpeed = totalCompleted / totalTime.TotalSeconds;\n        }\n    }\n\n    private TimeSpan? GetElapsedTime()\n    {\n        lock (_lock)\n        {\n            if (StartTime == null)\n            {\n                return null;\n            }\n\n            if (StopTime != null)\n            {\n                return StopTime - StartTime;\n            }\n\n            return _timeProvider.GetLocalNow().LocalDateTime - StartTime;\n        }\n    }\n\n    private TimeSpan? GetRemainingTime()\n    {\n        lock (_lock)\n        {\n            if (IsFinished)\n            {\n                return TimeSpan.Zero;\n            }\n\n            var speed = GetSpeed();\n            if (speed == null || speed == 0)\n            {\n                return null;\n            }\n\n            // If the speed is near zero, the estimate below causes the\n            // TimeSpan creation to throw an OverflowException. Just return\n            // the maximum possible remaining time instead of overflowing.\n            var estimate = (MaxValue - Value) / speed.Value;\n            if (estimate > TimeSpan.MaxValue.TotalSeconds)\n            {\n                return TimeSpan.MaxValue;\n            }\n\n            return TimeSpan.FromSeconds(estimate);\n        }\n    }\n\n    /// <inheritdoc />\n    void IProgress<double>.Report(double value)\n    {\n        Update(increment: value - Value);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"ProgressTask\"/>.\n/// </summary>\npublic static class ProgressTaskExtensions\n{\n    /// <summary>\n    /// Sets the task description.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"description\">The description.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask Description(this ProgressTask task, string description)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.Description = description;\n        return task;\n    }\n\n    /// <summary>\n    /// Sets the max value of the task.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"value\">The max value.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask MaxValue(this ProgressTask task, double value)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.MaxValue = value;\n        return task;\n    }\n\n    /// <summary>\n    /// Sets the value of the task.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"value\">The value.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask Value(this ProgressTask task, double value)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.Value = value;\n        return task;\n    }\n\n    /// <summary>\n    /// Sets whether the task is considered indeterminate or not.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"indeterminate\">Whether the task is considered indeterminate or not.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask IsIndeterminate(this ProgressTask task, bool indeterminate = true)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.IsIndeterminate = indeterminate;\n        return task;\n    }\n\n    /// <summary>\n    /// Sets whether to override the default hiding behavior of this task when completed.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"hideWhenCompleted\">Whether the task should be hidden once completed or not.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask HideWhenCompleted(this ProgressTask task, bool hideWhenCompleted = true)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.HideWhenCompleted = hideWhenCompleted;\n        return task;\n    }\n\n    /// <summary>\n    /// Sets the task's tag.\n    /// </summary>\n    /// <param name=\"task\">The task.</param>\n    /// <param name=\"tag\">The tag.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ProgressTask Tag(this ProgressTask task, object? tag)\n    {\n        ArgumentNullException.ThrowIfNull(task);\n\n        task.Tag = tag;\n        return task;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressTaskSettings.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents settings for a progress task.\n/// </summary>\npublic sealed class ProgressTaskSettings\n{\n    /// <summary>\n    /// Gets or sets the task's max value.\n    /// Defaults to <c>100</c>.\n    /// </summary>\n    public double MaxValue { get; set; } = 100;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the task\n    /// will be auto started. Defaults to <c>true</c>.\n    /// </summary>\n    public bool AutoStart { get; set; } = true;\n\n    /// <summary>\n    /// Gets the default progress task settings.\n    /// </summary>\n    internal static ProgressTaskSettings Default { get; } = new ProgressTaskSettings();\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/ProgressTaskState.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents progress task state.\n/// </summary>\npublic sealed class ProgressTaskState\n{\n    private readonly Dictionary<string, object> _state;\n    private readonly Lock _lock;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ProgressTaskState\"/> class.\n    /// </summary>\n    public ProgressTaskState()\n    {\n        _state = new Dictionary<string, object>();\n        _lock = LockFactory.Create();\n    }\n\n    /// <summary>\n    /// Gets the state value for the specified key.\n    /// </summary>\n    /// <typeparam name=\"T\">The state value type.</typeparam>\n    /// <param name=\"key\">The state key.</param>\n    /// <returns>The value for the specified key.</returns>\n    public T Get<T>(string key)\n        where T : struct\n    {\n        lock (_lock)\n        {\n            if (!_state.TryGetValue(key, out var value))\n            {\n                return default;\n            }\n\n            if (!(value is T))\n            {\n                throw new InvalidOperationException(\"State value is of the wrong type.\");\n            }\n\n            return (T)value;\n        }\n    }\n\n    /// <summary>\n    /// Updates a task state value.\n    /// </summary>\n    /// <typeparam name=\"T\">The state value type.</typeparam>\n    /// <param name=\"key\">The key.</param>\n    /// <param name=\"func\">The transformation function.</param>\n    /// <returns>The updated value.</returns>\n    public T Update<T>(string key, Func<T, T> func)\n        where T : struct\n    {\n        lock (_lock)\n        {\n            ArgumentNullException.ThrowIfNull(func);\n\n            var old = default(T);\n            if (_state.TryGetValue(key, out var value))\n            {\n                if (!(value is T))\n                {\n                    throw new InvalidOperationException(\"State value is of the wrong type.\");\n                }\n\n                old = (T)value;\n            }\n\n            _state[key] = func(old);\n            return (T)_state[key];\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Renderers/DefaultProgressRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class DefaultProgressRenderer : ProgressRenderer\n{\n    private readonly IAnsiConsole _console;\n    private readonly List<ProgressColumn> _columns;\n    private readonly LiveRenderable _live;\n    private readonly object _lock;\n    private readonly Stopwatch _stopwatch;\n    private readonly bool _hideCompleted;\n    private readonly Func<IRenderable, IReadOnlyList<ProgressTask>, IRenderable> _renderHook;\n    private TimeSpan _lastUpdate;\n\n    public override TimeSpan RefreshRate { get; }\n\n    public DefaultProgressRenderer(IAnsiConsole console, List<ProgressColumn> columns, TimeSpan refreshRate, bool hideCompleted, Func<IRenderable, IReadOnlyList<ProgressTask>, IRenderable> renderHook)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _columns = columns ?? throw new ArgumentNullException(nameof(columns));\n        _live = new LiveRenderable(console);\n        _lock = new();\n        _stopwatch = new Stopwatch();\n        _lastUpdate = TimeSpan.Zero;\n        _hideCompleted = hideCompleted;\n        _renderHook = renderHook;\n\n        RefreshRate = refreshRate;\n    }\n\n    public override void Started()\n    {\n        _console.Cursor.Hide();\n    }\n\n    public override void Completed(bool clear)\n    {\n        lock (_lock)\n        {\n            if (clear)\n            {\n                _console.Write(_live.RestoreCursor());\n            }\n            else\n            {\n                if (_live.HasRenderable && _live.DidOverflow)\n                {\n                    // Redraw the whole live renderable\n                    _console.Write(_live.RestoreCursor());\n                    _live.Overflow = VerticalOverflow.Visible;\n                    _console.Write(_live.Target);\n                }\n\n                _console.WriteLine();\n            }\n\n            _console.Cursor.Show();\n        }\n    }\n\n    public override void Update(ProgressContext context)\n    {\n        lock (_lock)\n        {\n            if (!_stopwatch.IsRunning)\n            {\n                _stopwatch.Start();\n            }\n\n            var renderContext = RenderOptions.Create(_console, _console.Profile.Capabilities);\n\n            var delta = _stopwatch.Elapsed - _lastUpdate;\n            _lastUpdate = _stopwatch.Elapsed;\n\n            var grid = new Grid();\n            for (var columnIndex = 0; columnIndex < _columns.Count; columnIndex++)\n            {\n                var column = new GridColumn().PadRight(1);\n\n                var columnWidth = _columns[columnIndex].GetColumnWidth(renderContext);\n                if (columnWidth != null)\n                {\n                    column.Width = columnWidth;\n                }\n\n                if (_columns[columnIndex].NoWrap)\n                {\n                    column.NoWrap();\n                }\n\n                // Last column?\n                if (columnIndex == _columns.Count - 1)\n                {\n                    column.PadRight(0);\n                }\n\n                grid.AddColumn(column);\n            }\n\n            // Add rows\n            var tasks = context.GetTasks();\n\n            var layout = new Grid();\n            layout.AddColumn();\n\n            foreach (var task in tasks.Where(tsk => !((tsk.HideWhenCompleted ?? _hideCompleted) && tsk.IsFinished)))\n            {\n                var columns = _columns.Select(column => column.Render(renderContext, task, delta));\n                grid.AddRow(columns.ToArray());\n            }\n\n            layout.AddRow(grid);\n\n            _live.SetRenderable(new Padder(_renderHook(layout, tasks), new Padding(0, 1)));\n        }\n    }\n\n    public override IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_lock)\n        {\n            yield return _live.PositionCursor(options);\n\n            foreach (var renderable in renderables)\n            {\n                yield return renderable;\n            }\n\n            yield return _live;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Renderers/FallbackProgressRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class FallbackProgressRenderer : ProgressRenderer\n{\n    private const double FirstMilestone = 25;\n    private static readonly double?[] _milestones = [FirstMilestone, 50, 75, 95, 96, 97, 98, 99, 100];\n\n    private readonly Dictionary<int, double> _taskMilestones;\n    private readonly Lock _lock;\n    private readonly TimeProvider _timeProvider;\n    private IRenderable? _renderable;\n    private DateTime _lastUpdate;\n\n    public override TimeSpan RefreshRate => TimeSpan.FromSeconds(1);\n\n    public FallbackProgressRenderer(TimeProvider timeProvider)\n    {\n        _taskMilestones = new Dictionary<int, double>();\n        _lock = LockFactory.Create();\n        _timeProvider = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider));\n    }\n\n    public override void Update(ProgressContext context)\n    {\n        lock (_lock)\n        {\n            var hasStartedTasks = false;\n            var updates = new List<(string, double)>();\n\n            foreach (var task in context.GetTasks())\n            {\n                if (!task.IsStarted || task.IsFinished)\n                {\n                    continue;\n                }\n\n                hasStartedTasks = true;\n\n                if (TryAdvance(task.Id, task.Percentage))\n                {\n                    updates.Add((task.Description, task.Percentage));\n                }\n            }\n\n            // Got started tasks but no updates for 30 seconds?\n            if (hasStartedTasks && updates.Count == 0 && (_timeProvider.GetLocalNow().LocalDateTime - _lastUpdate) > TimeSpan.FromSeconds(30))\n            {\n                foreach (var task in context.GetTasks())\n                {\n                    updates.Add((task.Description, task.Percentage));\n                }\n            }\n\n            if (updates.Count > 0)\n            {\n                _lastUpdate = _timeProvider.GetLocalNow().LocalDateTime;\n            }\n\n            _renderable = BuildTaskGrid(updates);\n        }\n    }\n\n    public override IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_lock)\n        {\n            var result = new List<IRenderable>();\n            result.AddRange(renderables);\n\n            if (_renderable != null)\n            {\n                result.Add(_renderable);\n            }\n\n            _renderable = null;\n\n            return result;\n        }\n    }\n\n    private bool TryAdvance(int task, double percentage)\n    {\n        if (!_taskMilestones.TryGetValue(task, out var milestone))\n        {\n            _taskMilestones.Add(task, FirstMilestone);\n            return true;\n        }\n\n        if (percentage > milestone)\n        {\n            var nextMilestone = GetNextMilestone(percentage);\n            if (nextMilestone != null && _taskMilestones[task] != nextMilestone)\n            {\n                _taskMilestones[task] = nextMilestone.Value;\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    private static double? GetNextMilestone(double percentage)\n    {\n        return Array.Find(_milestones, p => p > percentage);\n    }\n\n    private static IRenderable? BuildTaskGrid(List<(string Name, double Percentage)> updates)\n    {\n        if (updates.Count > 0)\n        {\n            var renderables = new List<IRenderable>();\n            foreach (var (name, percentage) in updates)\n            {\n                renderables.Add(new Markup($\"[blue]{name}[/]: {(int)percentage}%\"));\n            }\n\n            return new Rows(renderables);\n        }\n\n        return null;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Renderers/FallbackStatusRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class FallbackStatusRenderer : ProgressRenderer\n{\n    private readonly Lock _lock;\n    private IRenderable? _renderable;\n    private string? _lastStatus;\n\n    public override TimeSpan RefreshRate => TimeSpan.FromMilliseconds(100);\n\n    public FallbackStatusRenderer()\n    {\n        _lock = LockFactory.Create();\n    }\n\n    public override void Update(ProgressContext context)\n    {\n        lock (_lock)\n        {\n            var task = context.GetTasks().SingleOrDefault();\n            if (task != null)\n            {\n                // Not same description?\n                if (_lastStatus != task.Description)\n                {\n                    _lastStatus = task.Description;\n                    _renderable = new Markup(task.Description + Environment.NewLine);\n                    return;\n                }\n            }\n\n            _renderable = null;\n            return;\n        }\n    }\n\n    public override IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_lock)\n        {\n            var result = new List<IRenderable>();\n            result.AddRange(renderables);\n\n            if (_renderable != null)\n            {\n                result.Add(_renderable);\n            }\n\n            _renderable = null;\n\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Progress/Spinner.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a spinner used in a <see cref=\"SpinnerColumn\"/>.\n/// </summary>\npublic abstract partial class Spinner\n{\n    /// <summary>\n    /// Gets the update interval for the spinner.\n    /// </summary>\n    public abstract TimeSpan Interval { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not the spinner\n    /// uses Unicode characters.\n    /// </summary>\n    public abstract bool IsUnicode { get; }\n\n    /// <summary>\n    /// Gets the spinner frames.\n    /// </summary>\n    public abstract IReadOnlyList<string> Frames { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Status/Status.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a status display.\n/// </summary>\npublic sealed class Status\n{\n    private readonly IAnsiConsole _console;\n\n    /// <summary>\n    /// Gets or sets the spinner.\n    /// </summary>\n    public Spinner? Spinner { get; set; }\n\n    /// <summary>\n    /// Gets or sets the spinner style.\n    /// </summary>\n    public Style? SpinnerStyle { get; set; } = Color.Yellow;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not status\n    /// should auto refresh. Defaults to <c>true</c>.\n    /// </summary>\n    public bool AutoRefresh { get; set; } = true;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Status\"/> class.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    public Status(IAnsiConsole console)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n    }\n\n    /// <summary>\n    /// Starts a new status display.\n    /// </summary>\n    /// <param name=\"status\">The status to display.</param>\n    /// <param name=\"action\">The action to execute.</param>\n    public void Start(string status, Action<StatusContext> action)\n    {\n        var task = StartAsync(status, ctx =>\n        {\n            action(ctx);\n            return Task.CompletedTask;\n        });\n\n        task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts a new status display.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type.</typeparam>\n    /// <param name=\"status\">The status to display.</param>\n    /// <param name=\"func\">The action to execute.</param>\n    /// <returns>The result.</returns>\n    public T Start<T>(string status, Func<StatusContext, T> func)\n    {\n        var task = StartAsync(status, ctx => Task.FromResult(func(ctx)));\n        return task.GetAwaiter().GetResult();\n    }\n\n    /// <summary>\n    /// Starts a new status display.\n    /// </summary>\n    /// <param name=\"status\">The status to display.</param>\n    /// <param name=\"action\">The action to execute.</param>\n    /// <returns>A <see cref=\"Task\"/> representing the asynchronous operation.</returns>\n    public async Task StartAsync(string status, Func<StatusContext, Task> action)\n    {\n        ArgumentNullException.ThrowIfNull(action);\n\n        _ = await StartAsync<object?>(status, async statusContext =>\n        {\n            await action(statusContext).ConfigureAwait(false);\n            return default;\n        }).ConfigureAwait(false);\n    }\n\n    /// <summary>\n    /// Starts a new status display and returns a result.\n    /// </summary>\n    /// <typeparam name=\"T\">The result type of task.</typeparam>\n    /// <param name=\"status\">The status to display.</param>\n    /// <param name=\"func\">The action to execute.</param>\n    /// <returns>A <see cref=\"Task{T}\"/> representing the asynchronous operation.</returns>\n    public async Task<T> StartAsync<T>(string status, Func<StatusContext, Task<T>> func)\n    {\n        ArgumentNullException.ThrowIfNull(func);\n\n        // Set the progress columns\n        var spinnerColumn = new SpinnerColumn(Spinner ?? Spinner.Known.Default)\n        {\n            Style = SpinnerStyle ?? Style.Plain,\n        };\n\n        var progress = new Progress(_console)\n        {\n            FallbackRenderer = new FallbackStatusRenderer(),\n            AutoClear = true,\n            AutoRefresh = AutoRefresh,\n        };\n\n        progress.Columns(new ProgressColumn[]\n        {\n                spinnerColumn,\n                new TaskDescriptionColumn(),\n        });\n\n        return await progress.StartAsync(async ctx =>\n        {\n            var statusContext = new StatusContext(ctx, ctx.AddTask(status), spinnerColumn);\n            return await func(statusContext).ConfigureAwait(false);\n        }).ConfigureAwait(false);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Status\"/>.\n/// </summary>\npublic static class StatusExtensions\n{\n    /// <summary>\n    /// Sets whether or not auto refresh is enabled.\n    /// If disabled, you will manually have to refresh the progress.\n    /// </summary>\n    /// <param name=\"status\">The <see cref=\"Status\"/> instance.</param>\n    /// <param name=\"enabled\">Whether or not auto refresh is enabled.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Status AutoRefresh(this Status status, bool enabled)\n    {\n        ArgumentNullException.ThrowIfNull(status);\n\n        status.AutoRefresh = enabled;\n        return status;\n    }\n\n    /// <summary>\n    /// Sets the spinner.\n    /// </summary>\n    /// <param name=\"status\">The <see cref=\"Status\"/> instance.</param>\n    /// <param name=\"spinner\">The spinner.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Status Spinner(this Status status, Spinner spinner)\n    {\n        ArgumentNullException.ThrowIfNull(status);\n\n        status.Spinner = spinner;\n        return status;\n    }\n\n    /// <summary>\n    /// Sets the spinner style.\n    /// </summary>\n    /// <param name=\"status\">The <see cref=\"Status\"/> instance.</param>\n    /// <param name=\"style\">The spinner style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Status SpinnerStyle(this Status status, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(status);\n\n        status.SpinnerStyle = style;\n        return status;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Live/Status/StatusContext.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a context that can be used to interact with a <see cref=\"Status\"/>.\n/// </summary>\npublic sealed class StatusContext\n{\n    private readonly ProgressContext _context;\n    private readonly ProgressTask _task;\n    private readonly SpinnerColumn _spinnerColumn;\n\n    /// <summary>\n    /// Gets or sets the current status.\n    /// </summary>\n    public string Status\n    {\n        get => _task.Description;\n        set => SetStatus(value);\n    }\n\n    /// <summary>\n    /// Gets or sets the current spinner.\n    /// </summary>\n    public Spinner Spinner\n    {\n        get => _spinnerColumn.Spinner;\n        set => SetSpinner(value);\n    }\n\n    /// <summary>\n    /// Gets or sets the current spinner style.\n    /// </summary>\n    public Style? SpinnerStyle\n    {\n        get => _spinnerColumn.Style;\n        set => _spinnerColumn.Style = value;\n    }\n\n    internal StatusContext(ProgressContext context, ProgressTask task, SpinnerColumn spinnerColumn)\n    {\n        _context = context ?? throw new ArgumentNullException(nameof(context));\n        _task = task ?? throw new ArgumentNullException(nameof(task));\n        _spinnerColumn = spinnerColumn ?? throw new ArgumentNullException(nameof(spinnerColumn));\n    }\n\n    /// <summary>\n    /// Refreshes the status.\n    /// </summary>\n    public void Refresh()\n    {\n        _context.Refresh();\n    }\n\n    private void SetStatus(string status)\n    {\n        ArgumentNullException.ThrowIfNull(status);\n\n        _task.Description = status;\n    }\n\n    private void SetSpinner(Spinner spinner)\n    {\n        ArgumentNullException.ThrowIfNull(spinner);\n\n        _spinnerColumn.Spinner = spinner;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"StatusContext\"/>.\n/// </summary>\npublic static class StatusContextExtensions\n{\n    /// <summary>\n    /// Sets the status message.\n    /// </summary>\n    /// <param name=\"context\">The status context.</param>\n    /// <param name=\"status\">The status message.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static StatusContext Status(this StatusContext context, string status)\n    {\n        ArgumentNullException.ThrowIfNull(context);\n\n        context.Status = status;\n        return context;\n    }\n\n    /// <summary>\n    /// Sets the spinner.\n    /// </summary>\n    /// <param name=\"context\">The status context.</param>\n    /// <param name=\"spinner\">The spinner.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static StatusContext Spinner(this StatusContext context, Spinner spinner)\n    {\n        ArgumentNullException.ThrowIfNull(context);\n\n        context.Spinner = spinner;\n        return context;\n    }\n\n    /// <summary>\n    /// Sets the spinner style.\n    /// </summary>\n    /// <param name=\"context\">The status context.</param>\n    /// <param name=\"style\">The spinner style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static StatusContext SpinnerStyle(this StatusContext context, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(context);\n\n        context.SpinnerStyle = style;\n        return context;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Overflow.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents text overflow.\n/// </summary>\npublic enum Overflow\n{\n    /// <summary>\n    /// Put any excess characters on the next line.\n    /// </summary>\n    Fold = 0,\n\n    /// <summary>\n    /// Truncates the text at the end of the line.\n    /// </summary>\n    Crop = 1,\n\n    /// <summary>\n    /// Truncates the text at the end of the line and\n    /// also inserts an ellipsis character.\n    /// </summary>\n    Ellipsis = 2,\n}"
  },
  {
    "path": "src/Spectre.Console/Padding.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents padding.\n/// </summary>\npublic readonly struct Padding : IEquatable<Padding>\n{\n    /// <summary>\n    /// Gets the left padding.\n    /// </summary>\n    public int Left { get; }\n\n    /// <summary>\n    /// Gets the top padding.\n    /// </summary>\n    public int Top { get; }\n\n    /// <summary>\n    /// Gets the right padding.\n    /// </summary>\n    public int Right { get; }\n\n    /// <summary>\n    /// Gets the bottom padding.\n    /// </summary>\n    public int Bottom { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Padding\"/> struct.\n    /// </summary>\n    /// <param name=\"size\">The padding for all sides.</param>\n    public Padding(int size)\n        : this(size, size, size, size)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Padding\"/> struct.\n    /// </summary>\n    /// <param name=\"horizontal\">The left and right padding.</param>\n    /// <param name=\"vertical\">The top and bottom padding.</param>\n    public Padding(int horizontal, int vertical)\n        : this(horizontal, vertical, horizontal, vertical)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Padding\"/> struct.\n    /// </summary>\n    /// <param name=\"left\">The left padding.</param>\n    /// <param name=\"top\">The top padding.</param>\n    /// <param name=\"right\">The right padding.</param>\n    /// <param name=\"bottom\">The bottom padding.</param>\n    public Padding(int left, int top, int right, int bottom)\n    {\n        Left = left;\n        Top = top;\n        Right = right;\n        Bottom = bottom;\n    }\n\n    /// <inheritdoc/>\n    public override bool Equals(object? obj)\n    {\n        return obj is Padding padding && Equals(padding);\n    }\n\n    /// <inheritdoc/>\n    public override int GetHashCode()\n    {\n        unchecked\n        {\n            var hash = (int)2166136261;\n            hash = (hash * 16777619) ^ Left.GetHashCode();\n            hash = (hash * 16777619) ^ Top.GetHashCode();\n            hash = (hash * 16777619) ^ Right.GetHashCode();\n            hash = (hash * 16777619) ^ Bottom.GetHashCode();\n            return hash;\n        }\n    }\n\n    /// <inheritdoc/>\n    public bool Equals(Padding other)\n    {\n        return Left == other.Left\n            && Top == other.Top\n            && Right == other.Right\n            && Bottom == other.Bottom;\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Padding\"/> instances are equal.\n    /// </summary>\n    /// <param name=\"left\">The first <see cref=\"Padding\"/> instance to compare.</param>\n    /// <param name=\"right\">The second <see cref=\"Padding\"/> instance to compare.</param>\n    /// <returns><c>true</c> if the two instances are equal, otherwise <c>false</c>.</returns>\n    public static bool operator ==(Padding left, Padding right)\n    {\n        return left.Equals(right);\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Padding\"/> instances are not equal.\n    /// </summary>\n    /// <param name=\"left\">The first <see cref=\"Padding\"/> instance to compare.</param>\n    /// <param name=\"right\">The second <see cref=\"Padding\"/> instance to compare.</param>\n    /// <returns><c>true</c> if the two instances are not equal, otherwise <c>false</c>.</returns>\n    public static bool operator !=(Padding left, Padding right)\n    {\n        return !(left == right);\n    }\n\n    /// <summary>\n    /// Gets the padding width.\n    /// </summary>\n    /// <returns>The padding width.</returns>\n    public int GetWidth()\n    {\n        return Left + Right;\n    }\n\n    /// <summary>\n    /// Gets the padding height.\n    /// </summary>\n    /// <returns>The padding height.</returns>\n    public int GetHeight()\n    {\n        return Top + Bottom;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Padding\"/>.\n/// </summary>\npublic static class PaddingExtensions\n{\n    /// <summary>\n    /// Gets the left padding.\n    /// </summary>\n    /// <param name=\"padding\">The padding.</param>\n    /// <returns>The left padding or zero if <c>padding</c> is null.</returns>\n    public static int GetLeftSafe(this Padding? padding)\n    {\n        return padding?.Left ?? 0;\n    }\n\n    /// <summary>\n    /// Gets the right padding.\n    /// </summary>\n    /// <param name=\"padding\">The padding.</param>\n    /// <returns>The right padding or zero if <c>padding</c> is null.</returns>\n    public static int GetRightSafe(this Padding? padding)\n    {\n        return padding?.Right ?? 0;\n    }\n\n    /// <summary>\n    /// Gets the top padding.\n    /// </summary>\n    /// <param name=\"padding\">The padding.</param>\n    /// <returns>The top padding or zero if <c>padding</c> is null.</returns>\n    public static int GetTopSafe(this Padding? padding)\n    {\n        return padding?.Top ?? 0;\n    }\n\n    /// <summary>\n    /// Gets the bottom padding.\n    /// </summary>\n    /// <param name=\"padding\">The padding.</param>\n    /// <returns>The bottom padding or zero if <c>padding</c> is null.</returns>\n    public static int GetBottomSafe(this Padding? padding)\n    {\n        return padding?.Bottom ?? 0;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Profile.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a console profile.\n/// </summary>\npublic sealed class Profile\n{\n    private readonly HashSet<string> _enrichers;\n    private static readonly string[] _defaultEnricher = [\"Default\"];\n\n    private IAnsiConsoleOutput _out;\n    private Encoding _encoding;\n    private Capabilities _capabilities;\n    private int? _width;\n    private int? _height;\n\n    /// <summary>\n    /// Gets the enrichers used to build this profile.\n    /// </summary>\n    public IReadOnlyCollection<string> Enrichers\n    {\n        get\n        {\n            if (_enrichers.Count > 0)\n            {\n                return _enrichers;\n            }\n\n            return _defaultEnricher;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the out buffer.\n    /// </summary>\n    public IAnsiConsoleOutput Out\n    {\n        get => _out;\n        set\n        {\n            _out = value ?? throw new InvalidOperationException(\"Output buffer cannot be null\");\n\n            // Reset the width and height if this is a terminal.\n            if (value.IsTerminal)\n            {\n                _width = null;\n                _height = null;\n            }\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the console output encoding.\n    /// </summary>\n    public Encoding Encoding\n    {\n        get => _encoding;\n        set\n        {\n            if (value == null)\n            {\n                throw new InvalidOperationException(\"Encoding cannot be null\");\n            }\n\n            _out.SetEncoding(value);\n            _encoding = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets an explicit console width.\n    /// </summary>\n    public int Width\n    {\n        get => _width ?? _out.Width;\n        set\n        {\n            if (value <= 0)\n            {\n                throw new InvalidOperationException(\"Console width must be greater than zero\");\n            }\n\n            _width = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets an explicit console height.\n    /// </summary>\n    public int Height\n    {\n        get => _height ?? _out.Height;\n        set\n        {\n            if (value <= 0)\n            {\n                throw new InvalidOperationException(\"Console height must be greater than zero\");\n            }\n\n            _height = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the capabilities of the profile.\n    /// </summary>\n    public Capabilities Capabilities\n    {\n        get => _capabilities;\n        set\n        {\n            _capabilities = value ?? throw new InvalidOperationException(\"Profile capabilities cannot be null\");\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Profile\"/> class.\n    /// </summary>\n    /// <param name=\"out\">The output buffer.</param>\n    /// <param name=\"capabilities\">The capabilities.</param>\n    /// <param name=\"encoding\">The output encoding.</param>\n    public Profile(IAnsiConsoleOutput @out, Capabilities capabilities, Encoding encoding)\n    {\n        _enrichers = new HashSet<string>(StringComparer.OrdinalIgnoreCase);\n        _out = @out ?? throw new ArgumentNullException(nameof(@out));\n        _capabilities = capabilities ?? throw new ArgumentNullException(nameof(capabilities));\n        _encoding = encoding ?? throw new ArgumentNullException(nameof(encoding));\n    }\n\n    /// <summary>\n    /// Checks whether the current profile supports\n    /// the specified color system.\n    /// </summary>\n    /// <param name=\"colorSystem\">The color system to check.</param>\n    /// <returns><c>true</c> if the color system is supported, otherwise <c>false</c>.</returns>\n    public bool Supports(ColorSystem colorSystem)\n    {\n        return (int)colorSystem <= (int)Capabilities.ColorSystem;\n    }\n\n    internal void AddEnricher(string name)\n    {\n        ArgumentNullException.ThrowIfNull(name);\n\n        _enrichers.Add(name);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/ConfirmationPrompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A prompt that is answered with a yes or no.\n/// </summary>\npublic sealed class ConfirmationPrompt : IPrompt<bool>\n{\n    private readonly string _prompt;\n\n    /// <summary>\n    /// Gets or sets the character that represents \"yes\".\n    /// </summary>\n    public char Yes { get; set; } = 'y';\n\n    /// <summary>\n    /// Gets or sets the character that represents \"no\".\n    /// </summary>\n    public char No { get; set; } = 'n';\n\n    /// <summary>\n    /// Gets or sets a value indicating whether \"yes\" is the default answer.\n    /// </summary>\n    public bool DefaultValue { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the message for invalid choices.\n    /// </summary>\n    public string InvalidChoiceMessage { get; set; } = \"[red]Please select one of the available options[/]\";\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// choices should be shown.\n    /// </summary>\n    public bool ShowChoices { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// default values should be shown.\n    /// </summary>\n    public bool ShowDefaultValue { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the style in which the default value is displayed. Defaults to green when <see langword=\"null\"/>.\n    /// </summary>\n    public Style? DefaultValueStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style in which the list of choices is displayed. Defaults to blue when <see langword=\"null\"/>.\n    /// </summary>\n    public Style? ChoicesStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the string comparer to use when comparing user input\n    /// against Yes/No choices.\n    /// </summary>\n    /// <remarks>\n    /// Defaults to <see cref=\"StringComparer.CurrentCultureIgnoreCase\"/>.\n    /// </remarks>\n    public StringComparer Comparer { get; set; } = StringComparer.CurrentCultureIgnoreCase;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ConfirmationPrompt\"/> class.\n    /// </summary>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    public ConfirmationPrompt(string prompt)\n    {\n        _prompt = prompt ?? throw new System.ArgumentNullException(nameof(prompt));\n    }\n\n    /// <inheritdoc/>\n    public bool Show(IAnsiConsole console)\n    {\n        return ShowAsync(console, CancellationToken.None).GetAwaiter().GetResult();\n    }\n\n    /// <inheritdoc/>\n    public async Task<bool> ShowAsync(IAnsiConsole console, CancellationToken cancellationToken)\n    {\n        var comparer = Comparer ?? StringComparer.CurrentCultureIgnoreCase;\n\n        var prompt = new TextPrompt<char>(_prompt, comparer)\n            .InvalidChoiceMessage(InvalidChoiceMessage)\n            .ValidationErrorMessage(InvalidChoiceMessage)\n            .ShowChoices(ShowChoices)\n            .ChoicesStyle(ChoicesStyle)\n            .ShowDefaultValue(ShowDefaultValue)\n            .DefaultValue(DefaultValue ? Yes : No)\n            .DefaultValueStyle(DefaultValueStyle)\n            .AddChoice(Yes)\n            .AddChoice(No);\n\n        var result = await prompt.ShowAsync(console, cancellationToken).ConfigureAwait(false);\n\n        return comparer.Compare(Yes.ToString(), result.ToString()) == 0;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"ConfirmationPrompt\"/>.\n/// </summary>\npublic static class ConfirmationPromptExtensions\n{\n    /// <summary>\n    /// Show or hide choices.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"show\">Whether or not the choices should be visible.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt ShowChoices(this ConfirmationPrompt obj, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ShowChoices = show;\n        return obj;\n    }\n\n    /// <summary>\n    /// Shows choices.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt ShowChoices(this ConfirmationPrompt obj)\n    {\n        return ShowChoices(obj, true);\n    }\n\n    /// <summary>\n    /// Hides choices.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt HideChoices(this ConfirmationPrompt obj)\n    {\n        return ShowChoices(obj, false);\n    }\n\n    /// <summary>\n    /// Sets the style in which the list of choices is displayed.\n    /// </summary>\n    /// <param name=\"obj\">The confirmation prompt.</param>\n    /// <param name=\"style\">The style to use for displaying the choices or <see langword=\"null\"/> to use the default style (blue).</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt ChoicesStyle(this ConfirmationPrompt obj, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ChoicesStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Show or hide the default value.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"show\">Whether or not the default value should be visible.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt ShowDefaultValue(this ConfirmationPrompt obj, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ShowDefaultValue = show;\n        return obj;\n    }\n\n    /// <summary>\n    /// Shows the default value.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt ShowDefaultValue(this ConfirmationPrompt obj)\n    {\n        return ShowDefaultValue(obj, true);\n    }\n\n    /// <summary>\n    /// Hides the default value.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt HideDefaultValue(this ConfirmationPrompt obj)\n    {\n        return ShowDefaultValue(obj, false);\n    }\n\n    /// <summary>\n    /// Sets the style in which the default value is displayed.\n    /// </summary>\n    /// <param name=\"obj\">The confirmation prompt.</param>\n    /// <param name=\"style\">The default value style or <see langword=\"null\"/> to use the default style (green).</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt DefaultValueStyle(this ConfirmationPrompt obj, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.DefaultValueStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the \"invalid choice\" message for the prompt.\n    /// </summary>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"message\">The \"invalid choice\" message.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt InvalidChoiceMessage(this ConfirmationPrompt obj, string message)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.InvalidChoiceMessage = message;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the character to interpret as \"yes\".\n    /// </summary>\n    /// <param name=\"obj\">The confirmation prompt.</param>\n    /// <param name=\"character\">The character to interpret as \"yes\".</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt Yes(this ConfirmationPrompt obj, char character)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Yes = character;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the character to interpret as \"no\".\n    /// </summary>\n    /// <param name=\"obj\">The confirmation prompt.</param>\n    /// <param name=\"character\">The character to interpret as \"no\".</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static ConfirmationPrompt No(this ConfirmationPrompt obj, char character)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.No = character;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/DefaultPromptValue.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class DefaultPromptValue<T>\n{\n    public T Value { get; }\n\n    public DefaultPromptValue(T value)\n    {\n        Value = value;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/IMultiSelectionItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represent a multi selection prompt item.\n/// </summary>\n/// <typeparam name=\"T\">The data type.</typeparam>\npublic interface IMultiSelectionItem<T> : ISelectionItem<T>\n    where T : notnull\n{\n    /// <summary>\n    /// Gets a value indicating whether or not this item is selected.\n    /// </summary>\n    bool IsSelected { get; }\n\n    /// <summary>\n    /// Selects the item.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    IMultiSelectionItem<T> Select();\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/IPrompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a prompt.\n/// </summary>\n/// <typeparam name=\"T\">The prompt result type.</typeparam>\npublic interface IPrompt<T>\n{\n    /// <summary>\n    /// Shows the prompt.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>The prompt input result.</returns>\n    T Show(IAnsiConsole console);\n\n    /// <summary>\n    /// Shows the prompt asynchronously.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"cancellationToken\">The token to monitor for cancellation requests.</param>\n    /// <returns>The prompt input result.</returns>\n    Task<T> ShowAsync(IAnsiConsole console, CancellationToken cancellationToken);\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/ISelectionItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represent a selection item.\n/// </summary>\n/// <typeparam name=\"T\">The data type.</typeparam>\npublic interface ISelectionItem<T>\n    where T : notnull\n{\n    /// <summary>\n    /// Adds a child to the item.\n    /// </summary>\n    /// <param name=\"child\">The child to add.</param>\n    /// <returns>A new <see cref=\"ISelectionItem{T}\"/> instance representing the child.</returns>\n    ISelectionItem<T> AddChild(T child);\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/IListPromptStrategy.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a strategy for a list prompt.\n/// </summary>\n/// <typeparam name=\"T\">The list data type.</typeparam>\ninternal interface IListPromptStrategy<T>\n    where T : notnull\n{\n    /// <summary>\n    /// Handles any input received from the user.\n    /// </summary>\n    /// <param name=\"key\">The key that was pressed.</param>\n    /// <param name=\"state\">The current state.</param>\n    /// <returns>A result representing an action.</returns>\n    ListPromptInputResult HandleInput(ConsoleKeyInfo key, ListPromptState<T> state);\n\n    /// <summary>\n    /// Calculates the page size.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"totalItemCount\">The total number of items.</param>\n    /// <param name=\"requestedPageSize\">The requested number of items to show.</param>\n    /// <returns>The page size that should be used.</returns>\n    public int CalculatePageSize(IAnsiConsole console, int totalItemCount, int requestedPageSize);\n\n    /// <summary>\n    /// Builds a <see cref=\"IRenderable\"/> from the current state.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"scrollable\">Whether or not the list is scrollable.</param>\n    /// <param name=\"cursorIndex\">The cursor index.</param>\n    /// <param name=\"items\">The visible items.</param>\n    /// <param name=\"skipUnselectableItems\">A value indicating whether or not the prompt should skip unselectable items.</param>\n    /// <param name=\"searchText\">The search text.</param>\n    /// <returns>A <see cref=\"IRenderable\"/> representing the items.</returns>\n    public IRenderable Render(IAnsiConsole console, bool scrollable, int cursorIndex,\n        IEnumerable<(int Index, ListPromptItem<T> Node)> items, bool skipUnselectableItems, string searchText);\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPrompt.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPrompt<T>\n    where T : notnull\n{\n    private readonly IAnsiConsole _console;\n    private readonly IListPromptStrategy<T> _strategy;\n\n    public ListPrompt(IAnsiConsole console, IListPromptStrategy<T> strategy)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _strategy = strategy ?? throw new ArgumentNullException(nameof(strategy));\n    }\n\n    public async Task<ListPromptState<T>> Show(\n        ListPromptTree<T> tree,\n        Func<T, string> converter,\n        SelectionMode selectionMode,\n        bool skipUnselectableItems,\n        bool searchEnabled,\n        int requestedPageSize,\n        bool wrapAround,\n        CancellationToken cancellationToken = default)\n    {\n        ArgumentNullException.ThrowIfNull(tree);\n\n        if (!_console.Profile.Capabilities.Interactive)\n        {\n            throw new NotSupportedException(\n                \"Cannot show selection prompt since the current \" +\n                \"terminal isn't interactive.\");\n        }\n\n        if (!_console.Profile.Capabilities.Ansi)\n        {\n            throw new NotSupportedException(\n                \"Cannot show selection prompt since the current \" +\n                \"terminal does not support ANSI escape sequences.\");\n        }\n\n        var nodes = tree.Traverse().ToList();\n        if (nodes.Count == 0)\n        {\n            throw new InvalidOperationException(\"Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt.\");\n        }\n\n        var state = new ListPromptState<T>(nodes, converter, _strategy.CalculatePageSize(_console, nodes.Count, requestedPageSize), wrapAround, selectionMode, skipUnselectableItems, searchEnabled);\n        var hook = new ListPromptRenderHook<T>(_console, () => BuildRenderable(state));\n\n        using (new RenderHookScope(_console, hook))\n        {\n            _console.Cursor.Hide();\n            hook.Refresh();\n\n            while (true)\n            {\n                cancellationToken.ThrowIfCancellationRequested();\n                var rawKey = await _console.Input.ReadKeyAsync(true, cancellationToken).ConfigureAwait(false);\n                if (rawKey == null)\n                {\n                    continue;\n                }\n\n                var key = rawKey.Value;\n                var result = _strategy.HandleInput(key, state);\n                if (result == ListPromptInputResult.Submit)\n                {\n                    break;\n                }\n                else if (result == ListPromptInputResult.Abort)\n                {\n                    state.Cancel();\n                    break;\n                }\n\n                if (state.Update(key) || result == ListPromptInputResult.Refresh)\n                {\n                    hook.Refresh();\n                }\n            }\n        }\n\n        hook.Clear();\n        _console.Cursor.Show();\n\n        return state;\n    }\n\n    private IRenderable BuildRenderable(ListPromptState<T> state)\n    {\n        var pageSize = state.PageSize;\n        var middleOfList = pageSize / 2;\n\n        var skip = 0;\n        var take = state.ItemCount;\n        var cursorIndex = state.Index;\n\n        var scrollable = state.ItemCount > pageSize;\n        if (scrollable)\n        {\n            skip = Math.Max(0, state.Index - middleOfList);\n            take = Math.Min(pageSize, state.ItemCount - skip);\n\n            if (take < pageSize)\n            {\n                // Pointer should be below the middle of the (visual) list\n                var diff = pageSize - take;\n                skip -= diff;\n                take += diff;\n                cursorIndex = middleOfList + diff;\n            }\n            else\n            {\n                // Take skip into account\n                cursorIndex -= skip;\n            }\n        }\n\n        // Build the renderable\n        return _strategy.Render(\n            _console,\n            scrollable, cursorIndex,\n            state.Items.Skip(skip).Take(take)\n                .Select((node, index) => (index, node)),\n            state.SkipUnselectableItems,\n            state.SearchText);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptConstants.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPromptConstants\n{\n    public const string Arrow = \">\";\n    public const string Checkbox = \"[[ ]]\";\n    public const string SelectedCheckbox = \"[[[blue]X[/]]]\";\n    public const string GroupSelectedCheckbox = \"[[[grey]X[/]]]\";\n    public const string InstructionsMarkup = \"[grey](Press <space> to select, <enter> to accept)[/]\";\n    public const string MoreChoicesMarkup = \"[grey](Move up and down to reveal more choices)[/]\";\n    public const string SearchPlaceholderMarkup = \"[grey](Type to search)[/]\";\n\n    public static string GetSelectedCheckbox(bool isGroup, SelectionMode mode, Style? style = null)\n    {\n        if (style != null)\n        {\n            return \"[[\" + $\"[{style.Value.ToMarkup()}]X[/]\" + \"]]\";\n        }\n\n        return isGroup && mode == SelectionMode.Leaf\n            ? GroupSelectedCheckbox : SelectedCheckbox;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptInputResult.cs",
    "content": "namespace Spectre.Console;\n\ninternal enum ListPromptInputResult\n{\n    None = 0,\n    Refresh = 1,\n    Submit = 2,\n    Abort = 3,\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptItem.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPromptItem<T> : IMultiSelectionItem<T>\n    where T : notnull\n{\n    public T Data { get; }\n    public ListPromptItem<T>? Parent { get; }\n    public List<ListPromptItem<T>> Children { get; }\n    public int Depth { get; }\n    public bool IsSelected { get; set; }\n\n    public bool IsGroup => Children.Count > 0;\n\n    public ListPromptItem(T data, ListPromptItem<T>? parent = null)\n    {\n        Data = data;\n        Parent = parent;\n        Children = [];\n        Depth = CalculateDepth(parent);\n    }\n\n    public IMultiSelectionItem<T> Select()\n    {\n        IsSelected = true;\n        return this;\n    }\n\n    public ISelectionItem<T> AddChild(T item)\n    {\n        var node = new ListPromptItem<T>(item, this);\n        Children.Add(node);\n        return node;\n    }\n\n    public IEnumerable<ListPromptItem<T>> Traverse(bool includeSelf)\n    {\n        var stack = new Stack<ListPromptItem<T>>();\n\n        if (includeSelf)\n        {\n            stack.Push(this);\n        }\n        else\n        {\n            foreach (var child in Children)\n            {\n                stack.Push(child);\n            }\n        }\n\n        while (stack.Count > 0)\n        {\n            var current = stack.Pop();\n            yield return current;\n\n            if (current.Children.Count > 0)\n            {\n                foreach (var child in current.Children.ReverseEnumerable())\n                {\n                    stack.Push(child);\n                }\n            }\n        }\n    }\n\n    private static int CalculateDepth(ListPromptItem<T>? parent)\n    {\n        var level = 0;\n        while (parent != null)\n        {\n            level++;\n            parent = parent.Parent;\n        }\n\n        return level;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptRenderHook.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPromptRenderHook<T> : IRenderHook\n    where T : notnull\n{\n    private readonly IAnsiConsole _console;\n    private readonly Func<IRenderable> _builder;\n    private readonly LiveRenderable _live;\n    private readonly object _lock;\n    private bool _dirty;\n\n    public ListPromptRenderHook(\n        IAnsiConsole console,\n        Func<IRenderable> builder)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _builder = builder ?? throw new ArgumentNullException(nameof(builder));\n\n        _live = new LiveRenderable(console);\n        _lock = new();\n        _dirty = true;\n    }\n\n    public void Clear()\n    {\n        _console.Write(_live.RestoreCursor());\n    }\n\n    public void Refresh()\n    {\n        _dirty = true;\n        _console.Write(ControlCode.Empty);\n    }\n\n    public IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_lock)\n        {\n            if (!_live.HasRenderable || _dirty)\n            {\n                _live.SetRenderable(_builder());\n                _dirty = false;\n            }\n\n            yield return _live.PositionCursor(options);\n\n            foreach (var renderable in renderables)\n            {\n                yield return renderable;\n            }\n\n            yield return _live;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptState.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPromptState<T>\n    where T : notnull\n{\n    private readonly Func<T, string> _converter;\n\n    public int Index { get; private set; }\n    public int ItemCount => Items.Count;\n    public int PageSize { get; }\n    public bool WrapAround { get; }\n    public SelectionMode Mode { get; }\n    public bool SkipUnselectableItems { get; private set; }\n    public bool SearchEnabled { get; }\n    public bool IsCancelled { get; private set; }\n    public IReadOnlyList<ListPromptItem<T>> Items { get; }\n    private readonly IReadOnlyList<int>? _leafIndexes;\n\n    public ListPromptItem<T> Current => Items[Index];\n    public string SearchText { get; private set; }\n\n    public ListPromptState(\n        IReadOnlyList<ListPromptItem<T>> items,\n        Func<T, string> converter,\n        int pageSize, bool wrapAround,\n        SelectionMode mode,\n        bool skipUnselectableItems,\n        bool searchEnabled)\n    {\n        _converter = converter ?? throw new ArgumentNullException(nameof(converter));\n        Items = items;\n        PageSize = pageSize;\n        WrapAround = wrapAround;\n        Mode = mode;\n        SkipUnselectableItems = skipUnselectableItems;\n        SearchEnabled = searchEnabled;\n        SearchText = string.Empty;\n\n        if (SkipUnselectableItems && mode == SelectionMode.Leaf)\n        {\n            _leafIndexes =\n                Items\n                    .Select((item, index) => new { item, index })\n                    .Where(x => !x.item.IsGroup)\n                    .Select(x => x.index)\n                    .ToList()\n                    .AsReadOnly();\n\n            Index = _leafIndexes.FirstOrDefault();\n        }\n        else\n        {\n            Index = 0;\n        }\n    }\n\n    public bool Update(ConsoleKeyInfo keyInfo)\n    {\n        var index = Index;\n        if (SkipUnselectableItems && Mode == SelectionMode.Leaf)\n        {\n            Debug.Assert(_leafIndexes != null, nameof(_leafIndexes) + \" != null\");\n            var currentLeafIndex = _leafIndexes.IndexOf(index);\n            switch (keyInfo.Key)\n            {\n                case ConsoleKey.UpArrow:\n                case ConsoleKey.K:\n                    if (currentLeafIndex > 0)\n                    {\n                        index = _leafIndexes[currentLeafIndex - 1];\n                    }\n                    else if (WrapAround)\n                    {\n                        index = _leafIndexes.LastOrDefault();\n                    }\n\n                    break;\n\n                case ConsoleKey.DownArrow:\n                case ConsoleKey.J:\n                    if (currentLeafIndex < _leafIndexes.Count - 1)\n                    {\n                        index = _leafIndexes[currentLeafIndex + 1];\n                    }\n                    else if (WrapAround)\n                    {\n                        index = _leafIndexes.FirstOrDefault();\n                    }\n\n                    break;\n\n                case ConsoleKey.Home:\n                    index = _leafIndexes.FirstOrDefault();\n                    break;\n\n                case ConsoleKey.End:\n                    index = _leafIndexes.LastOrDefault();\n                    break;\n\n                case ConsoleKey.PageUp:\n                    index = Math.Max(currentLeafIndex - PageSize, 0);\n                    if (index < _leafIndexes.Count)\n                    {\n                        index = _leafIndexes[index];\n                    }\n\n                    break;\n\n                case ConsoleKey.PageDown:\n                    index = Math.Min(currentLeafIndex + PageSize, _leafIndexes.Count - 1);\n                    if (index < _leafIndexes.Count)\n                    {\n                        index = _leafIndexes[index];\n                    }\n\n                    break;\n            }\n        }\n        else\n        {\n            index = keyInfo.Key switch\n            {\n                ConsoleKey.UpArrow or ConsoleKey.K => Index - 1,\n                ConsoleKey.DownArrow or ConsoleKey.J => Index + 1,\n                ConsoleKey.Home => 0,\n                ConsoleKey.End => ItemCount - 1,\n                ConsoleKey.PageUp => Index - PageSize,\n                ConsoleKey.PageDown => Index + PageSize,\n                _ => Index,\n            };\n        }\n\n        var search = SearchText;\n\n        if (SearchEnabled)\n        {\n            // If is text input, append to search filter\n            if (!char.IsControl(keyInfo.KeyChar))\n            {\n                search = SearchText + keyInfo.KeyChar;\n\n                var item = Items.FirstOrDefault(x =>\n                    _converter.Invoke(x.Data).Contains(search, StringComparison.OrdinalIgnoreCase)\n                    && (!x.IsGroup || Mode != SelectionMode.Leaf));\n\n                if (item != null)\n                {\n                    index = Items.IndexOf(item);\n                }\n            }\n\n            if (keyInfo.Key == ConsoleKey.Backspace)\n            {\n                if (search.Length > 0)\n                {\n                    search = search.Substring(0, search.Length - 1);\n                }\n\n                var item = Items.FirstOrDefault(x =>\n                    _converter.Invoke(x.Data).Contains(search, StringComparison.OrdinalIgnoreCase) &&\n                    (!x.IsGroup || Mode != SelectionMode.Leaf));\n\n                if (item != null)\n                {\n                    index = Items.IndexOf(item);\n                }\n            }\n        }\n\n        index = WrapAround\n            ? (ItemCount + (index % ItemCount)) % ItemCount\n            : index.Clamp(0, ItemCount - 1);\n\n        if (index != Index || SearchText != search)\n        {\n            Index = index;\n            SearchText = search;\n            return true;\n        }\n\n        return false;\n    }\n\n    internal void Cancel()\n    {\n        IsCancelled = true;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/List/ListPromptTree.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ListPromptTree<T>\n    where T : notnull\n{\n    private readonly List<ListPromptItem<T>> _roots;\n    private readonly IEqualityComparer<T> _comparer;\n\n    public ListPromptTree(IEqualityComparer<T> comparer)\n    {\n        _roots = [];\n        _comparer = comparer ?? throw new ArgumentNullException(nameof(comparer));\n    }\n\n    public ListPromptItem<T>? Find(T item)\n    {\n        var stack = new Stack<ListPromptItem<T>>(_roots);\n        while (stack.Count > 0)\n        {\n            var current = stack.Pop();\n            if (_comparer.Equals(item, current.Data))\n            {\n                return current;\n            }\n\n            stack.PushRange(current.Children);\n        }\n\n        return null;\n    }\n\n    public void Add(ListPromptItem<T> node)\n    {\n        _roots.Add(node);\n    }\n\n    public IEnumerable<ListPromptItem<T>> Traverse()\n    {\n        foreach (var root in _roots)\n        {\n            var stack = new Stack<ListPromptItem<T>>();\n            stack.Push(root);\n\n            while (stack.Count > 0)\n            {\n                var current = stack.Pop();\n                yield return current;\n\n                foreach (var child in current.Children.ReverseEnumerable())\n                {\n                    stack.Push(child);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/MultiSelectionPrompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a multi selection list prompt.\n/// </summary>\n/// <typeparam name=\"T\">The prompt result type.</typeparam>\npublic sealed class MultiSelectionPrompt<T> : IPrompt<List<T>>, IListPromptStrategy<T>\n    where T : notnull\n{\n    /// <summary>\n    /// Gets or sets the title.\n    /// </summary>\n    public string? Title { get; set; }\n\n    /// <summary>\n    /// Gets or sets the page size.\n    /// Defaults to <c>10</c>.\n    /// </summary>\n    public int PageSize { get; set; } = 10;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the selection should wrap around when reaching the edge.\n    /// Defaults to <c>false</c>.\n    /// </summary>\n    public bool WrapAround { get; set; } = false;\n\n    /// <summary>\n    /// Gets or sets the highlight style of the selected choice.\n    /// </summary>\n    public Style? HighlightStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the converter to get the display string for a choice. By default\n    /// the corresponding <see cref=\"TypeConverter\"/> is used.\n    /// </summary>\n    public Func<T, string>? Converter { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// at least one selection is required.\n    /// </summary>\n    public bool Required { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the text that will be displayed if there are more choices to show.\n    /// </summary>\n    public string? MoreChoicesText { get; set; }\n\n    /// <summary>\n    /// Gets or sets the text that instructs the user of how to select items.\n    /// </summary>\n    public string? InstructionsText { get; set; }\n\n    /// <summary>\n    /// Gets or sets the selection mode.\n    /// Defaults to <see cref=\"SelectionMode.Leaf\"/>.\n    /// </summary>\n    public SelectionMode Mode { get; set; } = SelectionMode.Leaf;\n\n    internal ListPromptTree<T> Tree { get; }\n\n    /// <summary>\n    /// Gets or sets a Func that will be triggered if Cancel is triggered by the 'ESC' key.\n    /// </summary>\n    public Func<List<T>>? CancelResult { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"MultiSelectionPrompt{T}\"/> class.\n    /// </summary>\n    /// <param name=\"comparer\">\n    /// The <see cref=\"IEqualityComparer{T}\"/> implementation to use when comparing items,\n    /// or <c>null</c> to use the default <see cref=\"IEqualityComparer{T}\"/> for the type of the item.\n    /// </param>\n    public MultiSelectionPrompt(IEqualityComparer<T>? comparer = null)\n    {\n        Tree = new ListPromptTree<T>(comparer ?? EqualityComparer<T>.Default);\n    }\n\n    /// <summary>\n    /// Adds a choice.\n    /// </summary>\n    /// <param name=\"item\">The item to add.</param>\n    /// <returns>A <see cref=\"IMultiSelectionItem{T}\"/> so that multiple calls can be chained.</returns>\n    public IMultiSelectionItem<T> AddChoice(T item)\n    {\n        var node = new ListPromptItem<T>(item);\n        Tree.Add(node);\n        return node;\n    }\n\n    /// <inheritdoc/>\n    public List<T> Show(IAnsiConsole console)\n    {\n        return ShowAsync(console, CancellationToken.None).GetAwaiter().GetResult();\n    }\n\n    /// <inheritdoc/>\n    public async Task<List<T>> ShowAsync(IAnsiConsole console, CancellationToken cancellationToken)\n    {\n        // Create the list prompt\n        var prompt = new ListPrompt<T>(console, this);\n        var converter = Converter ?? TypeConverterHelper.ConvertToString;\n        var result = await prompt.Show(Tree, converter, Mode, false, false, PageSize, WrapAround, cancellationToken).ConfigureAwait(false);\n\n        if (result.IsCancelled && CancelResult is not null)\n        {\n            return CancelResult();\n        }\n\n        if (Mode == SelectionMode.Leaf)\n        {\n            return result.Items\n                .Where(x => x.IsSelected && x.Children.Count == 0)\n                .Select(x => x.Data)\n                .ToList();\n        }\n\n        return result.Items\n            .Where(x => x.IsSelected)\n            .Select(x => x.Data)\n            .ToList();\n    }\n\n    /// <summary>\n    /// Returns all parent items of the given <paramref name=\"item\"/>.\n    /// </summary>\n    /// <param name=\"item\">The item for which to find the parents.</param>\n    /// <returns>The parent items, or an empty list, if the given item has no parents.</returns>\n    public IEnumerable<T> GetParents(T item)\n    {\n        var promptItem = Tree.Find(item);\n        if (promptItem == null)\n        {\n            throw new ArgumentOutOfRangeException(nameof(item), \"Item not found in tree.\");\n        }\n\n        var parents = new List<ListPromptItem<T>>();\n        while (promptItem.Parent != null)\n        {\n            promptItem = promptItem.Parent;\n            parents.Add(promptItem);\n        }\n\n        return parents\n            .ReverseEnumerable()\n            .Select(x => x.Data);\n    }\n\n    /// <summary>\n    /// Returns the parent item of the given <paramref name=\"item\"/>.\n    /// </summary>\n    /// <param name=\"item\">The item for which to find the parent.</param>\n    /// <returns>The parent item, or <c>null</c> if the given item has no parent.</returns>\n    public T? GetParent(T item)\n    {\n        return GetParents(item).LastOrDefault();\n    }\n\n    /// <inheritdoc/>\n    ListPromptInputResult IListPromptStrategy<T>.HandleInput(ConsoleKeyInfo key, ListPromptState<T> state)\n    {\n        if (key.Key == ConsoleKey.Escape && CancelResult is not null)\n        {\n            return ListPromptInputResult.Abort;\n        }\n\n        if (key.Key == ConsoleKey.Enter)\n        {\n            if (Required && state.Items.None(x => x.IsSelected))\n            {\n                // Selection not permitted\n                return ListPromptInputResult.None;\n            }\n\n            // Submit\n            return ListPromptInputResult.Submit;\n        }\n\n        if (key.Key == ConsoleKey.Spacebar || key.Key == ConsoleKey.Packet)\n        {\n            var current = state.Items[state.Index];\n            var select = !current.IsSelected;\n\n            if (Mode == SelectionMode.Leaf)\n            {\n                // Select the node and all its children\n                foreach (var item in current.Traverse(includeSelf: true))\n                {\n                    item.IsSelected = select;\n                }\n\n                // Visit every parent and evaluate if its selection\n                // status need to be updated\n                var parent = current.Parent;\n                while (parent != null)\n                {\n                    parent.IsSelected = parent.Traverse(includeSelf: false).All(x => x.IsSelected);\n                    parent = parent.Parent;\n                }\n            }\n            else\n            {\n                current.IsSelected = !current.IsSelected;\n            }\n\n            // Refresh the list\n            return ListPromptInputResult.Refresh;\n        }\n\n        return ListPromptInputResult.None;\n    }\n\n    /// <inheritdoc/>\n    int IListPromptStrategy<T>.CalculatePageSize(IAnsiConsole console, int totalItemCount, int requestedPageSize)\n    {\n        // The instructions take up two rows including a blank line\n        var extra = 2;\n        if (Title != null)\n        {\n            // Title takes up two rows including a blank line\n            extra += 2;\n        }\n\n        // Scrolling?\n        if (totalItemCount > requestedPageSize)\n        {\n            // The scrolling instructions takes up one row\n            extra++;\n        }\n\n        var pageSize = requestedPageSize;\n        if (pageSize > console.Profile.Height - extra)\n        {\n            pageSize = console.Profile.Height - extra;\n        }\n\n        return pageSize;\n    }\n\n    /// <inheritdoc/>\n    IRenderable IListPromptStrategy<T>.Render(IAnsiConsole console, bool scrollable, int cursorIndex,\n        IEnumerable<(int Index, ListPromptItem<T> Node)> items, bool skipUnselectableItems, string searchText)\n    {\n        var list = new List<IRenderable>();\n        var highlightStyle = HighlightStyle ?? Color.Blue;\n\n        if (Title != null)\n        {\n            list.Add(new Markup(Title));\n        }\n\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn().Padding(0, 0, 1, 0).NoWrap());\n\n        if (Title != null)\n        {\n            grid.AddEmptyRow();\n        }\n\n        foreach (var item in items)\n        {\n            var current = item.Index == cursorIndex;\n            var style = current ? highlightStyle : Style.Plain;\n\n            var indent = new string(' ', item.Node.Depth * 2);\n            var prompt = item.Index == cursorIndex ? ListPromptConstants.Arrow : new string(' ', ListPromptConstants.Arrow.Length);\n\n            var text = (Converter ?? TypeConverterHelper.ConvertToString)?.Invoke(item.Node.Data) ?? item.Node.Data.ToString() ?? \"?\";\n            if (current)\n            {\n                text = text.RemoveMarkup().EscapeMarkup();\n            }\n\n            var checkbox = item.Node.IsSelected\n                ? ListPromptConstants.GetSelectedCheckbox(item.Node.IsGroup, Mode, HighlightStyle)\n                : ListPromptConstants.Checkbox;\n\n            grid.AddRow(new Markup(indent + prompt + \" \" + checkbox + \" \" + text, style));\n        }\n\n        list.Add(grid);\n        list.Add(Text.Empty);\n\n        if (scrollable)\n        {\n            // There are more choices\n            list.Add(new Markup(MoreChoicesText ?? ListPromptConstants.MoreChoicesMarkup));\n        }\n\n        // Instructions\n        list.Add(new Markup(InstructionsText ?? ListPromptConstants.InstructionsMarkup));\n\n        // Combine all items\n        return new Rows(list);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/MultiSelectionPromptExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"MultiSelectionPrompt{T}\"/>.\n/// </summary>\npublic static class MultiSelectionPromptExtensions\n{\n    /// <summary>\n    /// Sets the selection mode.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"mode\">The selection mode.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> Mode<T>(this MultiSelectionPrompt<T> obj, SelectionMode mode)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Mode = mode;\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds a choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choice\">The choice to add.</param>\n    /// <param name=\"configurator\">The configurator for the choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddChoices<T>(this MultiSelectionPrompt<T> obj, T choice, Action<IMultiSelectionItem<T>> configurator)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        ArgumentNullException.ThrowIfNull(configurator);\n\n        var result = obj.AddChoice(choice);\n        configurator(result);\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddChoices<T>(this MultiSelectionPrompt<T> obj, params T[] choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        foreach (var choice in choices)\n        {\n            obj.AddChoice(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddChoices<T>(this MultiSelectionPrompt<T> obj, IEnumerable<T> choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        foreach (var choice in choices)\n        {\n            obj.AddChoice(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple grouped choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"group\">The group.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddChoiceGroup<T>(this MultiSelectionPrompt<T> obj, T group, IEnumerable<T> choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        var root = obj.AddChoice(group);\n        foreach (var choice in choices)\n        {\n            root.AddChild(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple grouped choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"group\">The group.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddChoiceGroup<T>(this MultiSelectionPrompt<T> obj, T group, params T[] choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        var root = obj.AddChoice(group);\n        foreach (var choice in choices)\n        {\n            root.AddChild(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Marks an item as selected.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"item\">The item to select.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> Select<T>(this MultiSelectionPrompt<T> obj, T item)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        var node = obj.Tree.Find(item);\n        node?.Select();\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the title.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"title\">The title markup text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> Title<T>(this MultiSelectionPrompt<T> obj, string? title)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Title = title;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets how many choices that are displayed to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"pageSize\">The number of choices that are displayed to the user.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> PageSize<T>(this MultiSelectionPrompt<T> obj, int pageSize)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        if (pageSize <= 2)\n        {\n            throw new ArgumentException(\"Page size must be greater or equal to 3.\", nameof(pageSize));\n        }\n\n        obj.PageSize = pageSize;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets whether the selection should wrap around when reaching its edges.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"shouldWrap\">Whether the selection should wrap around.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> WrapAround<T>(this MultiSelectionPrompt<T> obj, bool shouldWrap = true)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.WrapAround = shouldWrap;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the highlight style of the selected choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"highlightStyle\">The highlight style of the selected choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> HighlightStyle<T>(this MultiSelectionPrompt<T> obj, Style highlightStyle)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.HighlightStyle = highlightStyle;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the text that will be displayed if there are more choices to show.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"text\">The text to display.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> MoreChoicesText<T>(this MultiSelectionPrompt<T> obj, string? text)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.MoreChoicesText = text;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the text that instructs the user of how to select items.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"text\">The text to display.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> InstructionsText<T>(this MultiSelectionPrompt<T> obj, string? text)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.InstructionsText = text;\n        return obj;\n    }\n\n    /// <summary>\n    /// Requires no choice to be selected.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> NotRequired<T>(this MultiSelectionPrompt<T> obj)\n        where T : notnull\n    {\n        return Required(obj, false);\n    }\n\n    /// <summary>\n    /// Requires a choice to be selected.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> Required<T>(this MultiSelectionPrompt<T> obj)\n        where T : notnull\n    {\n        return Required(obj, true);\n    }\n\n    /// <summary>\n    /// Sets a value indicating whether or not at least one choice must be selected.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"required\">Whether or not at least one choice must be selected.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> Required<T>(this MultiSelectionPrompt<T> obj, bool required)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Required = required;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the function to create a display string for a given choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"displaySelector\">The function to get a display string for a given choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> UseConverter<T>(this MultiSelectionPrompt<T> obj, Func<T, string>? displaySelector)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Converter = displaySelector;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the value that will be returned if the prompt is cancelled with 'ESC'.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"cancelResultFunc\">A Func that is returning a value on cancel.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddCancelResult<T>(this MultiSelectionPrompt<T> obj, Func<List<T>> cancelResultFunc)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.CancelResult = cancelResultFunc;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets a Func that will be triggered if the prompt is cancelled with 'ESC'.\n    /// Sets result to the configured List.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"cancelResult\">The value to be returned on cancel.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddCancelResult<T>(this MultiSelectionPrompt<T> obj, List<T> cancelResult)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return obj.AddCancelResult(() => cancelResult);\n    }\n\n    /// <summary>\n    /// Sets a Func that will be triggered if the prompt is cancelled with 'ESC'.\n    /// Sets result to a List containing only the configured item.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"cancelResult\">The value to be returned on cancel.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddCancelResult<T>(this MultiSelectionPrompt<T> obj, T cancelResult)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return obj.AddCancelResult([cancelResult]);\n    }\n\n    /// <summary>\n    /// Sets a Func that will be triggered if the prompt is cancelled with 'ESC'.\n    /// Sets result to an empty List.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static MultiSelectionPrompt<T> AddCancelResult<T>(this MultiSelectionPrompt<T> obj)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return obj.AddCancelResult([]);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/SelectionPrompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a single list prompt.\n/// </summary>\n/// <typeparam name=\"T\">The prompt result type.</typeparam>\npublic sealed class SelectionPrompt<T> : IPrompt<T>, IListPromptStrategy<T>\n    where T : notnull\n{\n    private readonly ListPromptTree<T> _tree;\n\n    /// <summary>\n    /// Gets or sets the title.\n    /// </summary>\n    public string? Title { get; set; }\n\n    /// <summary>\n    /// Gets or sets the page size.\n    /// Defaults to <c>10</c>.\n    /// </summary>\n    public int PageSize { get; set; } = 10;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the selection should wrap around when reaching the edge.\n    /// Defaults to <c>false</c>.\n    /// </summary>\n    public bool WrapAround { get; set; } = false;\n\n    /// <summary>\n    /// Gets or sets the highlight style of the selected choice.\n    /// </summary>\n    public Style? HighlightStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style of a disabled choice.\n    /// </summary>\n    public Style? DisabledStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style of highlighted search matches.\n    /// </summary>\n    public Style? SearchHighlightStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the text that will be displayed when no search text has been entered.\n    /// </summary>\n    public string? SearchPlaceholderText { get; set; }\n\n    /// <summary>\n    /// Gets or sets the converter to get the display string for a choice. By default\n    /// the corresponding <see cref=\"TypeConverter\"/> is used.\n    /// </summary>\n    public Func<T, string>? Converter { get; set; }\n\n    /// <summary>\n    /// Gets or sets the text that will be displayed if there are more choices to show.\n    /// </summary>\n    public string? MoreChoicesText { get; set; }\n\n    /// <summary>\n    /// Gets or sets the selection mode.\n    /// Defaults to <see cref=\"SelectionMode.Leaf\"/>.\n    /// </summary>\n    public SelectionMode Mode { get; set; } = SelectionMode.Leaf;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not search is enabled.\n    /// </summary>\n    public bool SearchEnabled { get; set; }\n\n    /// <summary>\n    /// Gets or sets a Func that will be triggered if Cancel is triggered by the 'ESC' key.\n    /// </summary>\n    public Func<T>? CancelResult { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SelectionPrompt{T}\"/> class.\n    /// </summary>\n    public SelectionPrompt()\n    {\n        _tree = new ListPromptTree<T>(EqualityComparer<T>.Default);\n    }\n\n    /// <summary>\n    /// Adds a choice.\n    /// </summary>\n    /// <param name=\"item\">The item to add.</param>\n    /// <returns>A <see cref=\"ISelectionItem{T}\"/> so that multiple calls can be chained.</returns>\n    public ISelectionItem<T> AddChoice(T item)\n    {\n        var node = new ListPromptItem<T>(item);\n        _tree.Add(node);\n        return node;\n    }\n\n    /// <inheritdoc/>\n    public T Show(IAnsiConsole console)\n    {\n        return ShowAsync(console, CancellationToken.None).GetAwaiter().GetResult();\n    }\n\n    /// <inheritdoc/>\n    public async Task<T> ShowAsync(IAnsiConsole console, CancellationToken cancellationToken)\n    {\n        // Create the list prompt\n        var prompt = new ListPrompt<T>(console, this);\n        var converter = Converter ?? TypeConverterHelper.ConvertToString;\n        var result = await prompt.Show(_tree, converter, Mode, true, SearchEnabled, PageSize, WrapAround, cancellationToken).ConfigureAwait(false);\n\n        if (result.IsCancelled && CancelResult is not null)\n        {\n            return CancelResult();\n        }\n\n        // Return the selected item\n        return result.Items[result.Index].Data;\n    }\n\n    /// <inheritdoc/>\n    ListPromptInputResult IListPromptStrategy<T>.HandleInput(ConsoleKeyInfo key, ListPromptState<T> state)\n    {\n        if (key.Key == ConsoleKey.Enter\n         || key.Key == ConsoleKey.Packet\n         || (!state.SearchEnabled && key.Key == ConsoleKey.Spacebar))\n        {\n            // Selecting a non leaf in \"leaf mode\" is not allowed\n            if (state.Current.IsGroup && Mode == SelectionMode.Leaf)\n            {\n                return ListPromptInputResult.None;\n            }\n\n            return ListPromptInputResult.Submit;\n        }\n\n        if (key.Key == ConsoleKey.Escape && CancelResult is not null)\n        {\n            return ListPromptInputResult.Abort;\n        }\n\n        return ListPromptInputResult.None;\n    }\n\n    /// <inheritdoc/>\n    int IListPromptStrategy<T>.CalculatePageSize(IAnsiConsole console, int totalItemCount, int requestedPageSize)\n    {\n        var extra = 0;\n\n        if (Title != null)\n        {\n            // Title takes up two rows including a blank line\n            extra += 2;\n        }\n\n        var scrollable = totalItemCount > requestedPageSize;\n        if (SearchEnabled || scrollable)\n        {\n            extra += 1;\n        }\n\n        if (SearchEnabled)\n        {\n            extra += 1;\n        }\n\n        if (scrollable)\n        {\n            extra += 1;\n        }\n\n        if (requestedPageSize > console.Profile.Height - extra)\n        {\n            return console.Profile.Height - extra;\n        }\n\n        return requestedPageSize;\n    }\n\n    /// <inheritdoc/>\n    IRenderable IListPromptStrategy<T>.Render(IAnsiConsole console, bool scrollable, int cursorIndex,\n        IEnumerable<(int Index, ListPromptItem<T> Node)> items, bool skipUnselectableItems, string searchText)\n    {\n        var list = new List<IRenderable>();\n        var disabledStyle = DisabledStyle ?? Color.Grey;\n        var highlightStyle = HighlightStyle ?? Color.Blue;\n        var searchHighlightStyle = SearchHighlightStyle ?? new Style(foreground: Color.Default, background: Color.Yellow, Decoration.Bold);\n\n        if (Title != null)\n        {\n            list.Add(new Markup(Title));\n        }\n\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn().Padding(0, 0, 1, 0).NoWrap());\n\n        if (Title != null)\n        {\n            grid.AddEmptyRow();\n        }\n\n        foreach (var item in items)\n        {\n            var current = item.Index == cursorIndex;\n            var prompt = item.Index == cursorIndex ? ListPromptConstants.Arrow : new string(' ', ListPromptConstants.Arrow.Length);\n            var style = item.Node.IsGroup && Mode == SelectionMode.Leaf\n                ? disabledStyle\n                : current ? highlightStyle : Style.Plain;\n\n            var indent = new string(' ', item.Node.Depth * 2);\n\n            var text = (Converter ?? TypeConverterHelper.ConvertToString)?.Invoke(item.Node.Data) ?? item.Node.Data.ToString() ?? \"?\";\n            if (current)\n            {\n                text = text.RemoveMarkup().EscapeMarkup();\n            }\n\n            if (searchText.Length > 0 && !(item.Node.IsGroup && Mode == SelectionMode.Leaf))\n            {\n                text = AnsiMarkup.Highlight(text, searchText, searchHighlightStyle);\n            }\n\n            grid.AddRow(new Markup(indent + prompt + \" \" + text, style));\n        }\n\n        list.Add(grid);\n\n        if (SearchEnabled || scrollable)\n        {\n            // Add padding\n            list.Add(Text.Empty);\n        }\n\n        if (SearchEnabled)\n        {\n            list.Add(new Markup(\n                searchText.Length > 0 ? searchText.EscapeMarkup() : SearchPlaceholderText ?? ListPromptConstants.SearchPlaceholderMarkup));\n        }\n\n        if (scrollable)\n        {\n            // (Move up and down to reveal more choices)\n            list.Add(new Markup(MoreChoicesText ?? ListPromptConstants.MoreChoicesMarkup));\n        }\n\n        return new Rows(list);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/SelectionPromptExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"SelectionPrompt{T}\"/>.\n/// </summary>\npublic static class SelectionPromptExtensions\n{\n    /// <summary>\n    /// Sets the selection mode.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"mode\">The selection mode.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> Mode<T>(this SelectionPrompt<T> obj, SelectionMode mode)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Mode = mode;\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddChoices<T>(this SelectionPrompt<T> obj, params T[] choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        foreach (var choice in choices)\n        {\n            obj.AddChoice(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddChoices<T>(this SelectionPrompt<T> obj, IEnumerable<T> choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        foreach (var choice in choices)\n        {\n            obj.AddChoice(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple grouped choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"group\">The group.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddChoiceGroup<T>(this SelectionPrompt<T> obj, T group, IEnumerable<T> choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        var root = obj.AddChoice(group);\n        foreach (var choice in choices)\n        {\n            root.AddChild(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple grouped choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"group\">The group.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddChoiceGroup<T>(this SelectionPrompt<T> obj, T group, params T[] choices)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        var root = obj.AddChoice(group);\n        foreach (var choice in choices)\n        {\n            root.AddChild(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the title.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"title\">The title markup text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> Title<T>(this SelectionPrompt<T> obj, string? title)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Title = title;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets how many choices that are displayed to the user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"pageSize\">The number of choices that are displayed to the user.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> PageSize<T>(this SelectionPrompt<T> obj, int pageSize)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        if (pageSize <= 2)\n        {\n            throw new ArgumentException(\"Page size must be greater or equal to 3.\", nameof(pageSize));\n        }\n\n        obj.PageSize = pageSize;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets whether the selection should wrap around when reaching its edges.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"shouldWrap\">Whether the selection should wrap around.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> WrapAround<T>(this SelectionPrompt<T> obj, bool shouldWrap = true)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.WrapAround = shouldWrap;\n        return obj;\n    }\n\n    /// <summary>\n    /// Enables search for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> EnableSearch<T>(this SelectionPrompt<T> obj)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.SearchEnabled = true;\n        return obj;\n    }\n\n    /// <summary>\n    /// Disables search for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> DisableSearch<T>(this SelectionPrompt<T> obj)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.SearchEnabled = false;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the text that will be displayed when no search text has been entered.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"text\">The text to display.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> SearchPlaceholderText<T>(this SelectionPrompt<T> obj, string? text)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.SearchPlaceholderText = text;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the value that will be returned if the prompt is cancelled with 'ESC'.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"cancelResultFunc\">A Func that is returning a value on cancel.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddCancelResult<T>(this SelectionPrompt<T> obj, Func<T> cancelResultFunc)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.CancelResult = cancelResultFunc;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets a Func that will be triggered if the prompt is cancelled with 'ESC'.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"cancelResult\">The value to be returned on cancel.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> AddCancelResult<T>(this SelectionPrompt<T> obj, T cancelResult)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        return obj.AddCancelResult(() => cancelResult);\n    }\n\n    /// <summary>\n    /// Sets the highlight style of the selected choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"highlightStyle\">The highlight style of the selected choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> HighlightStyle<T>(this SelectionPrompt<T> obj, Style highlightStyle)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.HighlightStyle = highlightStyle;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the text that will be displayed if there are more choices to show.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"text\">The text to display.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> MoreChoicesText<T>(this SelectionPrompt<T> obj, string? text)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.MoreChoicesText = text;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the function to create a display string for a given choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"displaySelector\">The function to get a display string for a given choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static SelectionPrompt<T> UseConverter<T>(this SelectionPrompt<T> obj, Func<T, string>? displaySelector)\n        where T : notnull\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Converter = displaySelector;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/SelectionType.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents how selections are made in a hierarchical prompt.\n/// </summary>\npublic enum SelectionMode\n{\n    /// <summary>\n    /// Will only return lead nodes in results.\n    /// </summary>\n    Leaf = 0,\n\n    /// <summary>\n    /// Allows selection of parent nodes, but each node\n    /// is independent of its parent and children.\n    /// </summary>\n    Independent = 1,\n}"
  },
  {
    "path": "src/Spectre.Console/Prompts/TextPrompt.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a prompt.\n/// </summary>\n/// <typeparam name=\"T\">The prompt result type.</typeparam>\npublic sealed class TextPrompt<T> : IPrompt<T>, IHasCulture\n{\n    private readonly string _prompt;\n    private readonly StringComparer? _comparer;\n\n    /// <summary>\n    /// Gets or sets the prompt style.\n    /// </summary>\n    public Style? PromptStyle { get; set; }\n\n    /// <summary>\n    /// Gets the list of choices.\n    /// </summary>\n    public List<T> Choices { get; } = [];\n\n    /// <summary>\n    /// Gets or sets the culture to use when converting input to object.\n    /// </summary>\n    public CultureInfo? Culture { get; set; }\n\n    /// <summary>\n    /// Gets or sets the message for invalid choices.\n    /// </summary>\n    public string InvalidChoiceMessage { get; set; } = \"[red]Please select one of the available options[/]\";\n\n    /// <summary>\n    /// Gets or sets a value indicating whether input should\n    /// be hidden in the console.\n    /// </summary>\n    public bool IsSecret { get; set; }\n\n    /// <summary>\n    /// Gets or sets the character to use while masking\n    /// a secret prompt.\n    /// </summary>\n    public char? Mask { get; set; } = '*';\n\n    /// <summary>\n    /// Gets or sets the validation error message.\n    /// </summary>\n    public string ValidationErrorMessage { get; set; } = \"[red]Invalid input[/]\";\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// choices should be shown.\n    /// </summary>\n    public bool ShowChoices { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// default values should be shown.\n    /// </summary>\n    public bool ShowDefaultValue { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the default value editable state that allows the injection of the DefaultValue in the text field.\n    /// If true this places the DefaultValue in the input buffer which can then be edited by the user.\n    /// </summary>\n    public bool EditableDefaultValue { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not an empty result is valid.\n    /// </summary>\n    public bool AllowEmpty { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether the prompt line\n    /// should be cleared after a successful input.\n    /// </summary>\n    public bool ClearOnFinish { get; set; }\n\n    /// <summary>\n    /// Gets or sets the converter to get the display string for a choice. By default\n    /// the corresponding <see cref=\"TypeConverter\"/> is used.\n    /// </summary>\n    public Func<T, string>? Converter { get; set; } = TypeConverterHelper.ConvertToString;\n\n    /// <summary>\n    /// Gets or sets the validator.\n    /// </summary>\n    public Func<T, ValidationResult>? Validator { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style in which the default value is displayed. Defaults to green when <see langword=\"null\"/>.\n    /// </summary>\n    public Style? DefaultValueStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the style in which the list of choices is displayed. Defaults to blue when <see langword=\"null\"/>.\n    /// </summary>\n    public Style? ChoicesStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the default value.\n    /// </summary>\n    internal DefaultPromptValue<T>? DefaultValue { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TextPrompt{T}\"/> class.\n    /// </summary>\n    /// <param name=\"prompt\">The prompt markup text.</param>\n    /// <param name=\"comparer\">The comparer used for choices.</param>\n    public TextPrompt(string prompt, StringComparer? comparer = null)\n    {\n        _prompt = prompt ?? throw new System.ArgumentNullException(nameof(prompt));\n        _comparer = comparer;\n    }\n\n    /// <summary>\n    /// Shows the prompt and requests input from the user.\n    /// </summary>\n    /// <param name=\"console\">The console to show the prompt in.</param>\n    /// <returns>The user input converted to the expected type.</returns>\n    /// <inheritdoc/>\n    public T Show(IAnsiConsole console)\n    {\n        return ShowAsync(console, CancellationToken.None).GetAwaiter().GetResult();\n    }\n\n    /// <inheritdoc/>\n    public async Task<T> ShowAsync(IAnsiConsole console, CancellationToken cancellationToken)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return await console.RunExclusive(async () =>\n        {\n            var promptStyle = PromptStyle ?? Style.Plain;\n            var converter = Converter ?? TypeConverterHelper.ConvertToString;\n            var choices = Choices.Select(choice => converter(choice)).ToList();\n            var choiceMap = Choices.ToDictionary(choice => converter(choice), choice => choice, _comparer);\n\n            WritePrompt(console);\n\n            while (true)\n            {\n                string input;\n                if (EditableDefaultValue && DefaultValue != null)\n                {\n                    input = await console.ReadLine(promptStyle, IsSecret, Mask, choices, cancellationToken, converter(DefaultValue.Value)).ConfigureAwait(false);\n                }\n                else\n                {\n                    input = await console.ReadLine(promptStyle, IsSecret, Mask, choices, cancellationToken).ConfigureAwait(false);\n                }\n\n\n\n                // Nothing entered?\n                if (string.IsNullOrWhiteSpace(input))\n                {\n                    if (DefaultValue != null)\n                    {\n                        var defaultValue = converter(DefaultValue.Value);\n                        console.Write(IsSecret ? defaultValue.Mask(Mask) : defaultValue, promptStyle);\n                        console.WriteLine();\n\n                        ClearPromptLine(console);\n                        return DefaultValue.Value;\n                    }\n\n                    if (!AllowEmpty)\n                    {\n                        continue;\n                    }\n                }\n\n                console.WriteLine();\n\n                T? result;\n                if (Choices.Count > 0)\n                {\n                    if (choiceMap.TryGetValue(input, out result) && result != null)\n                    {\n                        ClearPromptLine(console);\n                        return result;\n                    }\n                    else\n                    {\n                        console.MarkupLine(InvalidChoiceMessage);\n                        WritePrompt(console);\n                        continue;\n                    }\n                }\n                else if (!TypeConverterHelper.TryConvertFromStringWithCulture<T>(input, Culture, out result) || result == null)\n                {\n                    console.MarkupLine(ValidationErrorMessage);\n                    WritePrompt(console);\n                    continue;\n                }\n\n                // Run all validators\n                if (!ValidateResult(result, out var validationMessage))\n                {\n                    console.MarkupLine(validationMessage);\n                    WritePrompt(console);\n                    continue;\n                }\n\n                ClearPromptLine(console);\n                return result;\n            }\n        }).ConfigureAwait(false);\n    }\n\n    /// <summary>\n    /// Writes the prompt to the console.\n    /// </summary>\n    /// <param name=\"console\">The console to write the prompt to.</param>\n    private void WritePrompt(IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        var builder = new StringBuilder();\n        builder.Append(_prompt.TrimEnd());\n\n        var appendSuffix = false;\n        if (ShowChoices && Choices.Count > 0)\n        {\n            appendSuffix = true;\n            var converter = Converter ?? TypeConverterHelper.ConvertToString;\n            var choices = string.Join(\"/\", Choices.Select(choice => converter(choice)));\n            var choicesStyle = ChoicesStyle?.ToMarkup() ?? \"blue\";\n            builder.AppendFormat(CultureInfo.InvariantCulture, \" [{0}][[{1}]][/]\", choicesStyle, choices);\n        }\n\n        if (ShowDefaultValue && DefaultValue != null)\n        {\n            appendSuffix = true;\n            var converter = Converter ?? TypeConverterHelper.ConvertToString;\n            var defaultValueStyle = DefaultValueStyle?.ToMarkup() ?? \"green\";\n            var defaultValue = converter(DefaultValue.Value);\n\n            builder.AppendFormat(\n                CultureInfo.InvariantCulture,\n                \" [{0}]({1})[/]\",\n                defaultValueStyle,\n                IsSecret ? defaultValue.Mask(Mask) : defaultValue);\n        }\n\n        var markup = builder.ToString().Trim();\n        if (appendSuffix)\n        {\n            markup += \":\";\n        }\n\n        console.Markup(markup + \" \");\n    }\n\n    /// <summary>\n    /// Clears the prompt line when enabled.\n    /// </summary>\n    /// <param name=\"console\">The console to clear the prompt from.</param>\n    private void ClearPromptLine(IAnsiConsole console)\n    {\n        if (!ClearOnFinish)\n        {\n            return;\n        }\n\n        ArgumentNullException.ThrowIfNull(console);\n\n        if (!console.Profile.Capabilities.Ansi)\n        {\n            return;\n        }\n\n        console.Cursor.MoveUp();\n        console.Write(ControlCode.Create(console, writer =>\n        {\n            writer.Write(\"\\r\");\n            writer.EraseInLine(2);\n        }));\n    }\n\n    private bool ValidateResult(T value, [NotNullWhen(false)] out string? message)\n    {\n        if (Validator != null)\n        {\n            var result = Validator(value);\n            if (!result.Successful)\n            {\n                message = result.Message ?? ValidationErrorMessage;\n                return false;\n            }\n        }\n\n        message = null;\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Prompts/TextPromptExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TextPrompt{T}\"/>.\n/// </summary>\npublic static class TextPromptExtensions\n{\n    /// <summary>\n    /// Allow empty input.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> AllowEmpty<T>(this TextPrompt<T> obj)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.AllowEmpty = true;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the prompt style.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"style\">The prompt style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> PromptStyle<T>(this TextPrompt<T> obj, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.PromptStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Show or hide choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"show\">Whether or not choices should be visible.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ShowChoices<T>(this TextPrompt<T> obj, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ShowChoices = show;\n        return obj;\n    }\n\n    /// <summary>\n    /// Shows choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ShowChoices<T>(this TextPrompt<T> obj)\n    {\n        return ShowChoices(obj, true);\n    }\n\n    /// <summary>\n    /// Hides choices.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> HideChoices<T>(this TextPrompt<T> obj)\n    {\n        return ShowChoices(obj, false);\n    }\n\n    /// <summary>\n    /// Show or hide the default value.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"show\">Whether or not the default value should be visible.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ShowDefaultValue<T>(this TextPrompt<T> obj, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ShowDefaultValue = show;\n        return obj;\n    }\n\n    /// <summary>\n    /// Shows the default value.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ShowDefaultValue<T>(this TextPrompt<T> obj)\n    {\n        return ShowDefaultValue(obj, true);\n    }\n\n    /// <summary>\n    /// Whether or not to write the default value in the text input field to be modified by the end user.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"state\">Whether or not the default value should be editable.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> EditableDefaultValue<T>(this TextPrompt<T> obj, bool state)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n        obj.EditableDefaultValue = state;\n        return obj;\n    }\n\n    /// <summary>\n    /// Hides the default value.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> HideDefaultValue<T>(this TextPrompt<T> obj)\n    {\n        return ShowDefaultValue(obj, false);\n    }\n\n    /// <summary>\n    /// Sets the validation error message for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"message\">The validation error message.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ValidationErrorMessage<T>(this TextPrompt<T> obj, string message)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ValidationErrorMessage = message;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the \"invalid choice\" message for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"message\">The \"invalid choice\" message.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> InvalidChoiceMessage<T>(this TextPrompt<T> obj, string message)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.InvalidChoiceMessage = message;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the default value of the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"value\">The default value.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> DefaultValue<T>(this TextPrompt<T> obj, T value)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.DefaultValue = new DefaultPromptValue<T>(value);\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the validation criteria for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"validator\">The validation criteria.</param>\n    /// <param name=\"message\">The validation error message.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> Validate<T>(this TextPrompt<T> obj, Func<T, bool> validator, string? message = null)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Validator = result =>\n        {\n            if (validator(result))\n            {\n                return ValidationResult.Success();\n            }\n\n            return ValidationResult.Error(message);\n        };\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the validation criteria for the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"validator\">The validation criteria.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> Validate<T>(this TextPrompt<T> obj, Func<T, ValidationResult> validator)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Validator = validator;\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds a choice to the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choice\">The choice to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> AddChoice<T>(this TextPrompt<T> obj, T choice)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Choices.Add(choice);\n        return obj;\n    }\n\n    /// <summary>\n    /// Adds multiple choices to the prompt.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"choices\">The choices to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> AddChoices<T>(this TextPrompt<T> obj, IEnumerable<T> choices)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        ArgumentNullException.ThrowIfNull(choices);\n\n        foreach (var choice in choices)\n        {\n            obj.Choices.Add(choice);\n        }\n\n        return obj;\n    }\n\n    /// <summary>\n    /// Replaces prompt user input with asterisks in the console.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> Secret<T>(this TextPrompt<T> obj)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.IsSecret = true;\n        return obj;\n    }\n\n    /// <summary>\n    /// Replaces prompt user input with mask in the console.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"mask\">The masking character to use for the secret.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> Secret<T>(this TextPrompt<T> obj, char? mask)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.IsSecret = true;\n        obj.Mask = mask;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the function to create a display string for a given choice.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"displaySelector\">The function to get a display string for a given choice.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> WithConverter<T>(this TextPrompt<T> obj, Func<T, string>? displaySelector)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.Converter = displaySelector;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the style in which the default value is displayed.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"style\">The default value style or <see langword=\"null\"/> to use the default style (green).</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> DefaultValueStyle<T>(this TextPrompt<T> obj, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.DefaultValueStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the style in which the list of choices is displayed.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"style\">The style to use for displaying the choices or <see langword=\"null\"/> to use the default style (blue).</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ChoicesStyle<T>(this TextPrompt<T> obj, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ChoicesStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Clears the prompt line after successful input.\n    /// </summary>\n    /// <typeparam name=\"T\">The prompt result type.</typeparam>\n    /// <param name=\"obj\">The prompt.</param>\n    /// <param name=\"clear\">Whether the prompt line should be cleared</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPrompt<T> ClearOnFinish<T>(this TextPrompt<T> obj, bool clear = true)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.ClearOnFinish = clear;\n        return obj;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Properties/Usings.cs",
    "content": "global using System;\nglobal using System.Collections;\nglobal using System.Collections.Generic;\nglobal using System.ComponentModel;\nglobal using System.Diagnostics;\nglobal using System.Diagnostics.CodeAnalysis;\nglobal using System.Globalization;\nglobal using System.IO;\nglobal using System.Linq;\nglobal using System.Net;\nglobal using System.Reflection;\nglobal using System.Runtime.CompilerServices;\nglobal using System.Text;\nglobal using System.Threading;\nglobal using System.Threading.Tasks;\nglobal using Spectre.Console.Enrichment;\nglobal using Spectre.Console.Rendering;\nglobal using Wcwidth;"
  },
  {
    "path": "src/Spectre.Console/Recorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A console recorder used to record output from a console.\n/// </summary>\npublic class Recorder : IAnsiConsole, IDisposable\n{\n    private readonly IAnsiConsole _console;\n    private readonly List<IRenderable> _recorded;\n\n    /// <inheritdoc/>\n    public Profile Profile => _console.Profile;\n\n    /// <inheritdoc/>\n    public IAnsiConsoleCursor Cursor => _console.Cursor;\n\n    /// <inheritdoc/>\n    public IAnsiConsoleInput Input => _console.Input;\n\n    /// <inheritdoc/>\n    public IExclusivityMode ExclusivityMode => _console.ExclusivityMode;\n\n    /// <inheritdoc/>\n    public RenderPipeline Pipeline => _console.Pipeline;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Recorder\"/> class.\n    /// </summary>\n    /// <param name=\"console\">The console to record output for.</param>\n    public Recorder(IAnsiConsole console)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _recorded = [];\n    }\n\n    /// <inheritdoc/>\n    [SuppressMessage(\"Usage\", \"CA1816:Dispose methods should call SuppressFinalize\")]\n    public void Dispose()\n    {\n        // Only used for scoping.\n    }\n\n    /// <inheritdoc/>\n    public void Clear(bool home)\n    {\n        _console.Clear(home);\n    }\n\n    /// <inheritdoc/>\n    public void Write(IRenderable renderable)\n    {\n        ArgumentNullException.ThrowIfNull(renderable);\n\n        _recorded.Add(renderable);\n        _console.Write(renderable);\n    }\n\n    /// <inheritdoc/>\n    public void WriteAnsi(Action<AnsiWriter> action)\n    {\n        // Do nothing\n    }\n\n    internal Recorder Clone(IAnsiConsole console)\n    {\n        var recorder = new Recorder(console);\n        recorder._recorded.AddRange(_recorded);\n        return recorder;\n    }\n\n    /// <summary>\n    /// Exports the recorded data.\n    /// </summary>\n    /// <param name=\"encoder\">The encoder.</param>\n    /// <returns>The recorded data represented as a string.</returns>\n    public string Export(IAnsiConsoleEncoder encoder)\n    {\n        ArgumentNullException.ThrowIfNull(encoder);\n\n        return encoder.Encode(_console, _recorded);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Recorder\"/>.\n/// </summary>\npublic static class RecorderExtensions\n{\n    private static readonly TextEncoder _textEncoder = new TextEncoder();\n    private static readonly HtmlEncoder _htmlEncoder = new HtmlEncoder();\n\n    /// <summary>\n    /// Exports the recorded content as text.\n    /// </summary>\n    /// <param name=\"recorder\">The recorder.</param>\n    /// <returns>The recorded content as text.</returns>\n    public static string ExportText(this Recorder recorder)\n    {\n        ArgumentNullException.ThrowIfNull(recorder);\n\n        return recorder.Export(_textEncoder);\n    }\n\n    /// <summary>\n    /// Exports the recorded content as HTML.\n    /// </summary>\n    /// <param name=\"recorder\">The recorder.</param>\n    /// <returns>The recorded content as HTML.</returns>\n    public static string ExportHtml(this Recorder recorder)\n    {\n        ArgumentNullException.ThrowIfNull(recorder);\n\n        return recorder.Export(_htmlEncoder);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Region.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a region.\n/// </summary>\n[DebuggerDisplay(\"[X={X,nq}, Y={Y,nq}, W={Width,nq}, H={Height,nq}]\")]\npublic readonly struct Region\n{\n    /// <summary>\n    /// Gets the x-coordinate.\n    /// </summary>\n    public int X { get; }\n\n    /// <summary>\n    /// Gets the y-coordinate.\n    /// </summary>\n    public int Y { get; }\n\n    /// <summary>\n    /// Gets the width.\n    /// </summary>\n    public int Width { get; }\n\n    /// <summary>\n    /// Gets the height.\n    /// </summary>\n    public int Height { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Region\"/> struct.\n    /// </summary>\n    /// <param name=\"x\">The x-coordinate.</param>\n    /// <param name=\"y\">The y-coordinate.</param>\n    /// <param name=\"width\">The width.</param>\n    /// <param name=\"height\">The height.</param>\n    public Region(int x, int y, int width, int height)\n    {\n        X = x;\n        Y = y;\n        Width = width;\n        Height = height;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/BoxBorderPart.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents the different parts of a box border.\n/// </summary>\npublic enum BoxBorderPart\n{\n    /// <summary>\n    /// The top left part of a box.\n    /// </summary>\n    TopLeft,\n\n    /// <summary>\n    /// The top part of a box.\n    /// </summary>\n    Top,\n\n    /// <summary>\n    /// The top right part of a box.\n    /// </summary>\n    TopRight,\n\n    /// <summary>\n    /// The left part of a box.\n    /// </summary>\n    Left,\n\n    /// <summary>\n    /// The right part of a box.\n    /// </summary>\n    Right,\n\n    /// <summary>\n    /// The bottom left part of a box.\n    /// </summary>\n    BottomLeft,\n\n    /// <summary>\n    /// The bottom part of a box.\n    /// </summary>\n    Bottom,\n\n    /// <summary>\n    /// The bottom right part of a box.\n    /// </summary>\n    BottomRight,\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/AsciiBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents an old school ASCII border.\n/// </summary>\npublic sealed class AsciiBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return part switch\n        {\n            BoxBorderPart.TopLeft => \"+\",\n            BoxBorderPart.Top => \"-\",\n            BoxBorderPart.TopRight => \"+\",\n            BoxBorderPart.Left => \"|\",\n            BoxBorderPart.Right => \"|\",\n            BoxBorderPart.BottomLeft => \"+\",\n            BoxBorderPart.Bottom => \"-\",\n            BoxBorderPart.BottomRight => \"+\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/DoubleBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a double border.\n/// </summary>\npublic sealed class DoubleBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return part switch\n        {\n            BoxBorderPart.TopLeft => \"╔\",\n            BoxBorderPart.Top => \"═\",\n            BoxBorderPart.TopRight => \"╗\",\n            BoxBorderPart.Left => \"║\",\n            BoxBorderPart.Right => \"║\",\n            BoxBorderPart.BottomLeft => \"╚\",\n            BoxBorderPart.Bottom => \"═\",\n            BoxBorderPart.BottomRight => \"╝\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/HeavyBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a heavy border.\n/// </summary>\npublic sealed class HeavyBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override BoxBorder? SafeBorder => BoxBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return part switch\n        {\n            BoxBorderPart.TopLeft => \"┏\",\n            BoxBorderPart.Top => \"━\",\n            BoxBorderPart.TopRight => \"┓\",\n            BoxBorderPart.Left => \"┃\",\n            BoxBorderPart.Right => \"┃\",\n            BoxBorderPart.BottomLeft => \"┗\",\n            BoxBorderPart.Bottom => \"━\",\n            BoxBorderPart.BottomRight => \"┛\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/NoBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents an invisible border.\n/// </summary>\npublic sealed class NoBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return \" \";\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/RoundedBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a rounded border.\n/// </summary>\npublic sealed class RoundedBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override BoxBorder? SafeBorder => BoxBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return part switch\n        {\n            BoxBorderPart.TopLeft => \"╭\",\n            BoxBorderPart.Top => \"─\",\n            BoxBorderPart.TopRight => \"╮\",\n            BoxBorderPart.Left => \"│\",\n            BoxBorderPart.Right => \"│\",\n            BoxBorderPart.BottomLeft => \"╰\",\n            BoxBorderPart.Bottom => \"─\",\n            BoxBorderPart.BottomRight => \"╯\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Boxes/SquareBoxBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a square border.\n/// </summary>\npublic sealed class SquareBoxBorder : BoxBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(BoxBorderPart part)\n    {\n        return part switch\n        {\n            BoxBorderPart.TopLeft => \"┌\",\n            BoxBorderPart.Top => \"─\",\n            BoxBorderPart.TopRight => \"┐\",\n            BoxBorderPart.Left => \"│\",\n            BoxBorderPart.Right => \"│\",\n            BoxBorderPart.BottomLeft => \"└\",\n            BoxBorderPart.Bottom => \"─\",\n            BoxBorderPart.BottomRight => \"┘\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/TableBorderPart.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents the different parts of a table border.\n/// </summary>\npublic enum TableBorderPart\n{\n    /// <summary>\n    /// The top left part of a header.\n    /// </summary>\n    HeaderTopLeft,\n\n    /// <summary>\n    /// The top part of a header.\n    /// </summary>\n    HeaderTop,\n\n    /// <summary>\n    /// The top separator part of a header.\n    /// </summary>\n    HeaderTopSeparator,\n\n    /// <summary>\n    /// The top right part of a header.\n    /// </summary>\n    HeaderTopRight,\n\n    /// <summary>\n    /// The left part of a header.\n    /// </summary>\n    HeaderLeft,\n\n    /// <summary>\n    /// A header separator.\n    /// </summary>\n    HeaderSeparator,\n\n    /// <summary>\n    /// The right part of a header.\n    /// </summary>\n    HeaderRight,\n\n    /// <summary>\n    /// The bottom left part of a header.\n    /// </summary>\n    HeaderBottomLeft,\n\n    /// <summary>\n    /// The bottom part of a header.\n    /// </summary>\n    HeaderBottom,\n\n    /// <summary>\n    /// The bottom separator part of a header.\n    /// </summary>\n    HeaderBottomSeparator,\n\n    /// <summary>\n    /// The bottom right part of a header.\n    /// </summary>\n    HeaderBottomRight,\n\n    /// <summary>\n    /// The top left part of a footer.\n    /// </summary>\n    FooterTopLeft,\n\n    /// <summary>\n    /// The top part of a footer.\n    /// </summary>\n    FooterTop,\n\n    /// <summary>\n    /// The top separator part of a footer.\n    /// </summary>\n    FooterTopSeparator,\n\n    /// <summary>\n    /// The top right part of a footer.\n    /// </summary>\n    FooterTopRight,\n\n    /// <summary>\n    /// The left part of a cell.\n    /// </summary>\n    CellLeft,\n\n    /// <summary>\n    /// A cell separator.\n    /// </summary>\n    CellSeparator,\n\n    /// <summary>\n    /// The right part of a cell.\n    /// </summary>\n    CellRight,\n\n    /// <summary>\n    /// The bottom left part of a footer.\n    /// </summary>\n    FooterBottomLeft,\n\n    /// <summary>\n    /// The bottom part of a footer.\n    /// </summary>\n    FooterBottom,\n\n    /// <summary>\n    /// The bottom separator part of a footer.\n    /// </summary>\n    FooterBottomSeparator,\n\n    /// <summary>\n    /// The bottom right part of a footer.\n    /// </summary>\n    FooterBottomRight,\n\n    /// <summary>\n    /// The left part of a row.\n    /// </summary>\n    RowLeft,\n\n    /// <summary>\n    /// The center part of a row.\n    /// </summary>\n    RowCenter,\n\n    /// <summary>\n    /// The separator part of a row.\n    /// </summary>\n    RowSeparator,\n\n    /// <summary>\n    /// The right part of a row.\n    /// </summary>\n    RowRight,\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/Ascii2TableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents another old school ASCII border.\n/// </summary>\npublic sealed class Ascii2TableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"+\",\n            TableBorderPart.HeaderTop => \"-\",\n            TableBorderPart.HeaderTopSeparator => \"+\",\n            TableBorderPart.HeaderTopRight => \"+\",\n            TableBorderPart.HeaderLeft => \"|\",\n            TableBorderPart.HeaderSeparator => \"|\",\n            TableBorderPart.HeaderRight => \"|\",\n            TableBorderPart.HeaderBottomLeft => \"|\",\n            TableBorderPart.HeaderBottom => \"-\",\n            TableBorderPart.HeaderBottomSeparator => \"+\",\n            TableBorderPart.HeaderBottomRight => \"|\",\n            TableBorderPart.CellLeft => \"|\",\n            TableBorderPart.CellSeparator => \"|\",\n            TableBorderPart.CellRight => \"|\",\n            TableBorderPart.FooterTopLeft => \"|\",\n            TableBorderPart.FooterTop => \"-\",\n            TableBorderPart.FooterTopSeparator => \"+\",\n            TableBorderPart.FooterTopRight => \"|\",\n            TableBorderPart.FooterBottomLeft => \"+\",\n            TableBorderPart.FooterBottom => \"-\",\n            TableBorderPart.FooterBottomSeparator => \"+\",\n            TableBorderPart.FooterBottomRight => \"+\",\n            TableBorderPart.RowLeft => \"|\",\n            TableBorderPart.RowCenter => \"-\",\n            TableBorderPart.RowSeparator => \"+\",\n            TableBorderPart.RowRight => \"|\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/AsciiDoubleHeadTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents an old school ASCII border with a double header border.\n/// </summary>\npublic sealed class AsciiDoubleHeadTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"+\",\n            TableBorderPart.HeaderTop => \"-\",\n            TableBorderPart.HeaderTopSeparator => \"+\",\n            TableBorderPart.HeaderTopRight => \"+\",\n            TableBorderPart.HeaderLeft => \"|\",\n            TableBorderPart.HeaderSeparator => \"|\",\n            TableBorderPart.HeaderRight => \"|\",\n            TableBorderPart.HeaderBottomLeft => \"|\",\n            TableBorderPart.HeaderBottom => \"=\",\n            TableBorderPart.HeaderBottomSeparator => \"+\",\n            TableBorderPart.HeaderBottomRight => \"|\",\n            TableBorderPart.CellLeft => \"|\",\n            TableBorderPart.CellSeparator => \"|\",\n            TableBorderPart.CellRight => \"|\",\n            TableBorderPart.FooterTopLeft => \"+\",\n            TableBorderPart.FooterTop => \"-\",\n            TableBorderPart.FooterTopSeparator => \"+\",\n            TableBorderPart.FooterTopRight => \"+\",\n            TableBorderPart.FooterBottomLeft => \"+\",\n            TableBorderPart.FooterBottom => \"-\",\n            TableBorderPart.FooterBottomSeparator => \"+\",\n            TableBorderPart.FooterBottomRight => \"+\",\n            TableBorderPart.RowLeft => \"|\",\n            TableBorderPart.RowCenter => \"-\",\n            TableBorderPart.RowSeparator => \"+\",\n            TableBorderPart.RowRight => \"|\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/AsciiTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents an old school ASCII border.\n/// </summary>\npublic sealed class AsciiTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"+\",\n            TableBorderPart.HeaderTop => \"-\",\n            TableBorderPart.HeaderTopSeparator => \"-\",\n            TableBorderPart.HeaderTopRight => \"+\",\n            TableBorderPart.HeaderLeft => \"|\",\n            TableBorderPart.HeaderSeparator => \"|\",\n            TableBorderPart.HeaderRight => \"|\",\n            TableBorderPart.HeaderBottomLeft => \"|\",\n            TableBorderPart.HeaderBottom => \"-\",\n            TableBorderPart.HeaderBottomSeparator => \"+\",\n            TableBorderPart.HeaderBottomRight => \"|\",\n            TableBorderPart.CellLeft => \"|\",\n            TableBorderPart.CellSeparator => \"|\",\n            TableBorderPart.CellRight => \"|\",\n            TableBorderPart.FooterTopLeft => \"|\",\n            TableBorderPart.FooterTop => \"-\",\n            TableBorderPart.FooterTopSeparator => \"+\",\n            TableBorderPart.FooterTopRight => \"|\",\n            TableBorderPart.FooterBottomLeft => \"+\",\n            TableBorderPart.FooterBottom => \"-\",\n            TableBorderPart.FooterBottomSeparator => \"-\",\n            TableBorderPart.FooterBottomRight => \"+\",\n            TableBorderPart.RowLeft => \"|\",\n            TableBorderPart.RowCenter => \"-\",\n            TableBorderPart.RowSeparator => \"+\",\n            TableBorderPart.RowRight => \"|\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/DoubleEdgeTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a border with a double edge.\n/// </summary>\npublic sealed class DoubleEdgeTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"╔\",\n            TableBorderPart.HeaderTop => \"═\",\n            TableBorderPart.HeaderTopSeparator => \"╤\",\n            TableBorderPart.HeaderTopRight => \"╗\",\n            TableBorderPart.HeaderLeft => \"║\",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \"║\",\n            TableBorderPart.HeaderBottomLeft => \"╟\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"┼\",\n            TableBorderPart.HeaderBottomRight => \"╢\",\n            TableBorderPart.CellLeft => \"║\",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \"║\",\n            TableBorderPart.FooterTopLeft => \"╟\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \"╢\",\n            TableBorderPart.FooterBottomLeft => \"╚\",\n            TableBorderPart.FooterBottom => \"═\",\n            TableBorderPart.FooterBottomSeparator => \"╧\",\n            TableBorderPart.FooterBottomRight => \"╝\",\n            TableBorderPart.RowLeft => \"╟\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \"╢\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/DoubleTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a double border.\n/// </summary>\npublic sealed class DoubleTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"╔\",\n            TableBorderPart.HeaderTop => \"═\",\n            TableBorderPart.HeaderTopSeparator => \"╦\",\n            TableBorderPart.HeaderTopRight => \"╗\",\n            TableBorderPart.HeaderLeft => \"║\",\n            TableBorderPart.HeaderSeparator => \"║\",\n            TableBorderPart.HeaderRight => \"║\",\n            TableBorderPart.HeaderBottomLeft => \"╠\",\n            TableBorderPart.HeaderBottom => \"═\",\n            TableBorderPart.HeaderBottomSeparator => \"╬\",\n            TableBorderPart.HeaderBottomRight => \"╣\",\n            TableBorderPart.CellLeft => \"║\",\n            TableBorderPart.CellSeparator => \"║\",\n            TableBorderPart.CellRight => \"║\",\n            TableBorderPart.FooterTopLeft => \"╠\",\n            TableBorderPart.FooterTop => \"═\",\n            TableBorderPart.FooterTopSeparator => \"╬\",\n            TableBorderPart.FooterTopRight => \"╣\",\n            TableBorderPart.FooterBottomLeft => \"╚\",\n            TableBorderPart.FooterBottom => \"═\",\n            TableBorderPart.FooterBottomSeparator => \"╩\",\n            TableBorderPart.FooterBottomRight => \"╝\",\n            TableBorderPart.RowLeft => \"╠\",\n            TableBorderPart.RowCenter => \"═\",\n            TableBorderPart.RowSeparator => \"╬\",\n            TableBorderPart.RowRight => \"╣\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/HeavyEdgeTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a border with a heavy edge.\n/// </summary>\npublic sealed class HeavyEdgeTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"┏\",\n            TableBorderPart.HeaderTop => \"━\",\n            TableBorderPart.HeaderTopSeparator => \"┯\",\n            TableBorderPart.HeaderTopRight => \"┓\",\n            TableBorderPart.HeaderLeft => \"┃\",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \"┃\",\n            TableBorderPart.HeaderBottomLeft => \"┠\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"┼\",\n            TableBorderPart.HeaderBottomRight => \"┨\",\n            TableBorderPart.CellLeft => \"┃\",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \"┃\",\n            TableBorderPart.FooterTopLeft => \"┠\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \"┨\",\n            TableBorderPart.FooterBottomLeft => \"┗\",\n            TableBorderPart.FooterBottom => \"━\",\n            TableBorderPart.FooterBottomSeparator => \"┷\",\n            TableBorderPart.FooterBottomRight => \"┛\",\n            TableBorderPart.RowLeft => \"┠\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \"┨\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/HeavyHeadTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a border with a heavy header.\n/// </summary>\npublic sealed class HeavyHeadTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"┏\",\n            TableBorderPart.HeaderTop => \"━\",\n            TableBorderPart.HeaderTopSeparator => \"┳\",\n            TableBorderPart.HeaderTopRight => \"┓\",\n            TableBorderPart.HeaderLeft => \"┃\",\n            TableBorderPart.HeaderSeparator => \"┃\",\n            TableBorderPart.HeaderRight => \"┃\",\n            TableBorderPart.HeaderBottomLeft => \"┡\",\n            TableBorderPart.HeaderBottom => \"━\",\n            TableBorderPart.HeaderBottomSeparator => \"╇\",\n            TableBorderPart.HeaderBottomRight => \"┩\",\n            TableBorderPart.CellLeft => \"│\",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \"│\",\n            TableBorderPart.FooterTopLeft => \"├\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \"┤\",\n            TableBorderPart.FooterBottomLeft => \"└\",\n            TableBorderPart.FooterBottom => \"─\",\n            TableBorderPart.FooterBottomSeparator => \"┴\",\n            TableBorderPart.FooterBottomRight => \"┘\",\n            TableBorderPart.RowLeft => \"├\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \"┤\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/HeavyTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a heavy border.\n/// </summary>\npublic sealed class HeavyTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"┏\",\n            TableBorderPart.HeaderTop => \"━\",\n            TableBorderPart.HeaderTopSeparator => \"┳\",\n            TableBorderPart.HeaderTopRight => \"┓\",\n            TableBorderPart.HeaderLeft => \"┃\",\n            TableBorderPart.HeaderSeparator => \"┃\",\n            TableBorderPart.HeaderRight => \"┃\",\n            TableBorderPart.HeaderBottomLeft => \"┣\",\n            TableBorderPart.HeaderBottom => \"━\",\n            TableBorderPart.HeaderBottomSeparator => \"╋\",\n            TableBorderPart.HeaderBottomRight => \"┫\",\n            TableBorderPart.CellLeft => \"┃\",\n            TableBorderPart.CellSeparator => \"┃\",\n            TableBorderPart.CellRight => \"┃\",\n            TableBorderPart.FooterTopLeft => \"┣\",\n            TableBorderPart.FooterTop => \"━\",\n            TableBorderPart.FooterTopSeparator => \"╋\",\n            TableBorderPart.FooterTopRight => \"┫\",\n            TableBorderPart.FooterBottomLeft => \"┗\",\n            TableBorderPart.FooterBottom => \"━\",\n            TableBorderPart.FooterBottomSeparator => \"┻\",\n            TableBorderPart.FooterBottomRight => \"┛\",\n            TableBorderPart.RowLeft => \"┣\",\n            TableBorderPart.RowCenter => \"━\",\n            TableBorderPart.RowSeparator => \"╋\",\n            TableBorderPart.RowRight => \"┫\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/HorizontalTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a horizontal border.\n/// </summary>\npublic sealed class HorizontalTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"─\",\n            TableBorderPart.HeaderTop => \"─\",\n            TableBorderPart.HeaderTopSeparator => \"─\",\n            TableBorderPart.HeaderTopRight => \"─\",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \" \",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \"─\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"─\",\n            TableBorderPart.HeaderBottomRight => \"─\",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \" \",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \"─\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"─\",\n            TableBorderPart.FooterTopRight => \"─\",\n            TableBorderPart.FooterBottomLeft => \"─\",\n            TableBorderPart.FooterBottom => \"─\",\n            TableBorderPart.FooterBottomSeparator => \"─\",\n            TableBorderPart.FooterBottomRight => \"─\",\n            TableBorderPart.RowLeft => \"─\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"─\",\n            TableBorderPart.RowRight => \"─\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/MarkdownTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a Markdown border.\n/// </summary>\npublic sealed class MarkdownTableBorder : TableBorder\n{\n    /// <inheritdoc />\n    public override bool SupportsRowSeparator => false;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \"|\",\n            TableBorderPart.HeaderSeparator => \"|\",\n            TableBorderPart.HeaderRight => \"|\",\n            TableBorderPart.HeaderBottomLeft => \"|\",\n            TableBorderPart.HeaderBottom => \"-\",\n            TableBorderPart.HeaderBottomSeparator => \"|\",\n            TableBorderPart.HeaderBottomRight => \"|\",\n            TableBorderPart.CellLeft => \"|\",\n            TableBorderPart.CellSeparator => \"|\",\n            TableBorderPart.CellRight => \"|\",\n            TableBorderPart.FooterTopLeft => \" \",\n            TableBorderPart.FooterTop => \" \",\n            TableBorderPart.FooterTopSeparator => \" \",\n            TableBorderPart.FooterTopRight => \" \",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \" \",\n            TableBorderPart.RowCenter => \" \",\n            TableBorderPart.RowSeparator => \" \",\n            TableBorderPart.RowRight => \" \",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n\n    /// <inheritdoc/>\n    public override string GetColumnRow(TablePart part, IReadOnlyList<int> widths, IReadOnlyList<IColumn> columns)\n    {\n        if (part == TablePart.FooterSeparator)\n        {\n            return string.Empty;\n        }\n\n        if (part != TablePart.HeaderSeparator)\n        {\n            return base.GetColumnRow(part, widths, columns);\n        }\n\n        var (left, center, separator, right) = GetTableParts(part);\n\n        var builder = new StringBuilder();\n        builder.Append(left);\n\n        foreach (var (columnIndex, _, lastColumn, columnWidth) in widths.Enumerate())\n        {\n            var padding = columns[columnIndex].Padding;\n\n            if (padding != null && padding.Value.Left > 0)\n            {\n                // Left padding\n                builder.Append(\" \".Repeat(padding.Value.Left));\n            }\n\n            var justification = columns[columnIndex].Alignment;\n            if (justification == null)\n            {\n                // No alignment\n                builder.Append(center.Repeat(columnWidth));\n            }\n            else if (justification.Value == Justify.Left)\n            {\n                // Left\n                builder.Append(':');\n                builder.Append(center.Repeat(columnWidth - 1));\n            }\n            else if (justification.Value == Justify.Center)\n            {\n                // Centered\n                builder.Append(':');\n                builder.Append(center.Repeat(columnWidth - 2));\n                builder.Append(':');\n            }\n            else if (justification.Value == Justify.Right)\n            {\n                // Right\n                builder.Append(center.Repeat(columnWidth - 1));\n                builder.Append(':');\n            }\n\n            // Right padding\n            if (padding != null && padding.Value.Right > 0)\n            {\n                builder.Append(\" \".Repeat(padding.Value.Right));\n            }\n\n            if (!lastColumn)\n            {\n                builder.Append(separator);\n            }\n        }\n\n        builder.Append(right);\n        return builder.ToString();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/MinimalDoubleHeadTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a minimal border with a double header border.\n/// </summary>\npublic sealed class MinimalDoubleHeadTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \" \",\n            TableBorderPart.HeaderBottom => \"═\",\n            TableBorderPart.HeaderBottomSeparator => \"╪\",\n            TableBorderPart.HeaderBottomRight => \" \",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \" \",\n            TableBorderPart.FooterTop => \"═\",\n            TableBorderPart.FooterTopSeparator => \"╪\",\n            TableBorderPart.FooterTopRight => \" \",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \" \",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \" \",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/MinimalHeavyHeadTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a minimal border with a heavy header.\n/// </summary>\npublic sealed class MinimalHeavyHeadTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Minimal;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \" \",\n            TableBorderPart.HeaderBottom => \"━\",\n            TableBorderPart.HeaderBottomSeparator => \"┿\",\n            TableBorderPart.HeaderBottomRight => \" \",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \" \",\n            TableBorderPart.FooterTop => \"━\",\n            TableBorderPart.FooterTopSeparator => \"┿\",\n            TableBorderPart.FooterTopRight => \" \",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \" \",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \" \",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/MinimalTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a minimal border.\n/// </summary>\npublic sealed class MinimalTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \" \",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"┼\",\n            TableBorderPart.HeaderBottomRight => \" \",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \" \",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \" \",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \" \",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \" \",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/MinimalistTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a minimalist border.\n/// </summary>\npublic sealed class MinimalistTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override bool SupportsRowSeparator => false;\n\n    /// <inheritdoc/>\n    public override bool UsePadding => false;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => string.Empty,\n            TableBorderPart.HeaderTop => string.Empty,\n            TableBorderPart.HeaderTopSeparator => string.Empty,\n            TableBorderPart.HeaderTopRight => string.Empty,\n            TableBorderPart.HeaderLeft => string.Empty,\n            TableBorderPart.HeaderSeparator => \" \",\n            TableBorderPart.HeaderRight => string.Empty,\n            TableBorderPart.HeaderBottomLeft => string.Empty,\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"─\",\n            TableBorderPart.HeaderBottomRight => string.Empty,\n            TableBorderPart.CellLeft => string.Empty,\n            TableBorderPart.CellSeparator => \" \",\n            TableBorderPart.CellRight => string.Empty,\n            TableBorderPart.FooterTopLeft => string.Empty,\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"─\",\n            TableBorderPart.FooterTopRight => string.Empty,\n            TableBorderPart.FooterBottomLeft => string.Empty,\n            TableBorderPart.FooterBottom => string.Empty,\n            TableBorderPart.FooterBottomSeparator => string.Empty,\n            TableBorderPart.FooterBottomRight => string.Empty,\n            TableBorderPart.RowLeft => string.Empty,\n            TableBorderPart.RowCenter => string.Empty,\n            TableBorderPart.RowSeparator => string.Empty,\n            TableBorderPart.RowRight => string.Empty,\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n\n    /// <inheritdoc/>\n    public override string GetColumnRow(TablePart part, IReadOnlyList<int> widths, IReadOnlyList<IColumn> columns)\n    {\n        ArgumentNullException.ThrowIfNull(widths);\n        ArgumentNullException.ThrowIfNull(columns);\n\n        var (_, center, separator, _) = GetTableParts(part);\n\n        var builder = new StringBuilder();\n\n        foreach (var (columnIndex, _, lastColumn, columnWidth) in widths.Enumerate())\n        {\n            builder.Append(center.Repeat(columnWidth));\n\n            if (!lastColumn)\n            {\n                builder.Append(separator);\n            }\n        }\n\n        return builder.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/NoTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents an invisible border.\n/// </summary>\npublic sealed class NoTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override bool Visible => false;\n\n    /// <inheritdoc />\n    public override bool SupportsRowSeparator => false;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return \" \";\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/RoundedTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a rounded border.\n/// </summary>\npublic sealed class RoundedTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Square;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"╭\",\n            TableBorderPart.HeaderTop => \"─\",\n            TableBorderPart.HeaderTopSeparator => \"┬\",\n            TableBorderPart.HeaderTopRight => \"╮\",\n            TableBorderPart.HeaderLeft => \"│\",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \"│\",\n            TableBorderPart.HeaderBottomLeft => \"├\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"┼\",\n            TableBorderPart.HeaderBottomRight => \"┤\",\n            TableBorderPart.CellLeft => \"│\",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \"│\",\n            TableBorderPart.FooterTopLeft => \"├\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \"┤\",\n            TableBorderPart.FooterBottomLeft => \"╰\",\n            TableBorderPart.FooterBottom => \"─\",\n            TableBorderPart.FooterBottomSeparator => \"┴\",\n            TableBorderPart.FooterBottomRight => \"╯\",\n            TableBorderPart.RowLeft => \"├\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \"┤\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/SimpleHeavyTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a simple border with heavy lines.\n/// </summary>\npublic sealed class SimpleHeavyTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override TableBorder? SafeBorder => TableBorder.Simple;\n\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \" \",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \"━\",\n            TableBorderPart.HeaderBottom => \"━\",\n            TableBorderPart.HeaderBottomSeparator => \"━\",\n            TableBorderPart.HeaderBottomRight => \"━\",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \" \",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \"━\",\n            TableBorderPart.FooterTop => \"━\",\n            TableBorderPart.FooterTopSeparator => \"━\",\n            TableBorderPart.FooterTopRight => \"━\",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \"─\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"─\",\n            TableBorderPart.RowRight => \"─\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/SimpleTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a simple border.\n/// </summary>\npublic sealed class SimpleTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \" \",\n            TableBorderPart.HeaderTop => \" \",\n            TableBorderPart.HeaderTopSeparator => \" \",\n            TableBorderPart.HeaderTopRight => \" \",\n            TableBorderPart.HeaderLeft => \" \",\n            TableBorderPart.HeaderSeparator => \" \",\n            TableBorderPart.HeaderRight => \" \",\n            TableBorderPart.HeaderBottomLeft => \"─\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"─\",\n            TableBorderPart.HeaderBottomRight => \"─\",\n            TableBorderPart.CellLeft => \" \",\n            TableBorderPart.CellSeparator => \" \",\n            TableBorderPart.CellRight => \" \",\n            TableBorderPart.FooterTopLeft => \"─\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"─\",\n            TableBorderPart.FooterTopRight => \"─\",\n            TableBorderPart.FooterBottomLeft => \" \",\n            TableBorderPart.FooterBottom => \" \",\n            TableBorderPart.FooterBottomSeparator => \" \",\n            TableBorderPart.FooterBottomRight => \" \",\n            TableBorderPart.RowLeft => \"─\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"─\",\n            TableBorderPart.RowRight => \"─\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Borders/Tables/SquareTableBorder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a square border.\n/// </summary>\npublic sealed class SquareTableBorder : TableBorder\n{\n    /// <inheritdoc/>\n    public override string GetPart(TableBorderPart part)\n    {\n        return part switch\n        {\n            TableBorderPart.HeaderTopLeft => \"┌\",\n            TableBorderPart.HeaderTop => \"─\",\n            TableBorderPart.HeaderTopSeparator => \"┬\",\n            TableBorderPart.HeaderTopRight => \"┐\",\n            TableBorderPart.HeaderLeft => \"│\",\n            TableBorderPart.HeaderSeparator => \"│\",\n            TableBorderPart.HeaderRight => \"│\",\n            TableBorderPart.HeaderBottomLeft => \"├\",\n            TableBorderPart.HeaderBottom => \"─\",\n            TableBorderPart.HeaderBottomSeparator => \"┼\",\n            TableBorderPart.HeaderBottomRight => \"┤\",\n            TableBorderPart.CellLeft => \"│\",\n            TableBorderPart.CellSeparator => \"│\",\n            TableBorderPart.CellRight => \"│\",\n            TableBorderPart.FooterTopLeft => \"├\",\n            TableBorderPart.FooterTop => \"─\",\n            TableBorderPart.FooterTopSeparator => \"┼\",\n            TableBorderPart.FooterTopRight => \"┤\",\n            TableBorderPart.FooterBottomLeft => \"└\",\n            TableBorderPart.FooterBottom => \"─\",\n            TableBorderPart.FooterBottomSeparator => \"┴\",\n            TableBorderPart.FooterBottomRight => \"┘\",\n            TableBorderPart.RowLeft => \"├\",\n            TableBorderPart.RowCenter => \"─\",\n            TableBorderPart.RowSeparator => \"┼\",\n            TableBorderPart.RowRight => \"┤\",\n            _ => throw new InvalidOperationException(\"Unknown border part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/IAnsiConsoleEncoder.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a console encoder that can encode\n/// recorded segments into a string.\n/// </summary>\npublic interface IAnsiConsoleEncoder\n{\n    /// <summary>\n    /// Encodes the specified <see cref=\"IRenderable\"/> enumerator.\n    /// </summary>\n    /// <param name=\"console\">The console to use when encoding.</param>\n    /// <param name=\"renderable\">The renderable objects to encode.</param>\n    /// <returns>A string representing the encoded result.</returns>\n    string Encode(IAnsiConsole console, IEnumerable<IRenderable> renderable);\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/IHasDirtyState.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents something that can be dirty.\n/// </summary>\npublic interface IHasDirtyState\n{\n    /// <summary>\n    /// Gets a value indicating whether the object is dirty.\n    /// </summary>\n    bool IsDirty { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/IRenderHook.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a render hook.\n/// </summary>\npublic interface IRenderHook\n{\n    /// <summary>\n    /// Processes the specified renderables.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"renderables\">The renderables to process.</param>\n    /// <returns>The processed renderables.</returns>\n    IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables);\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/IRenderable.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents something that can be rendered to the console.\n/// </summary>\npublic interface IRenderable\n{\n    /// <summary>\n    /// Measures the renderable object.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"maxWidth\">The maximum allowed width.</param>\n    /// <returns>The minimum and maximum width of the object.</returns>\n    Measurement Measure(RenderOptions options, int maxWidth);\n\n    /// <summary>\n    /// Renders the object.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"maxWidth\">The maximum allowed width.</param>\n    /// <returns>A collection of segments.</returns>\n    IEnumerable<Segment> Render(RenderOptions options, int maxWidth);\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"IRenderable\"/>.\n/// </summary>\npublic static class RenderableExtensions\n{\n    /// <summary>\n    /// Gets the segments for a renderable using the specified console.\n    /// </summary>\n    /// <param name=\"renderable\">The renderable.</param>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>An enumerable containing segments representing the specified <see cref=\"IRenderable\"/>.</returns>\n    public static IEnumerable<Segment> GetSegments(this IRenderable renderable, IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(renderable);\n\n        var context = RenderOptions.Create(console, console.Profile.Capabilities);\n        var renderables = console.Pipeline.Process(context, [renderable]);\n\n        return GetSegments(console, context, renderables);\n    }\n\n    private static IEnumerable<Segment> GetSegments(IAnsiConsole console, RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        var result = new List<Segment>();\n        foreach (var renderable in renderables)\n        {\n            result.AddRange(renderable.Render(options, console.Profile.Width));\n        }\n\n        return Segment.Merge(result);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/JustInTimeRenderable.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents something renderable that's reconstructed\n/// when its state change in any way.\n/// </summary>\npublic abstract class JustInTimeRenderable : Renderable\n{\n    private bool _dirty;\n    private IRenderable? _rendered;\n\n    /// <inheritdoc/>\n    protected sealed override Measurement Measure(RenderOptions context, int maxWidth)\n    {\n        return GetInner().Measure(context, maxWidth);\n    }\n\n    /// <inheritdoc/>\n    protected sealed override IEnumerable<Segment> Render(RenderOptions context, int width)\n    {\n        return GetInner().Render(context, width);\n    }\n\n    /// <summary>\n    /// Builds the inner renderable.\n    /// </summary>\n    /// <returns>A new inner renderable.</returns>\n    protected abstract IRenderable Build();\n\n    /// <summary>\n    /// Checks if there are any children that has changed.\n    /// If so, the underlying renderable needs rebuilding.\n    /// </summary>\n    /// <returns><c>true</c> if the object needs rebuilding, otherwise <c>false</c>.</returns>\n    protected virtual bool HasDirtyChildren()\n    {\n        return false;\n    }\n\n    /// <summary>\n    /// Marks this instance as dirty.\n    /// </summary>\n    protected void MarkAsDirty()\n    {\n        _dirty = true;\n    }\n\n    /// <summary>\n    /// Marks this instance as dirty.\n    /// </summary>\n    /// <param name=\"action\">\n    /// The action to execute before marking the instance as dirty.\n    /// </param>\n    protected void MarkAsDirty(Action action)\n    {\n        ArgumentNullException.ThrowIfNull(action);\n\n        action();\n        _dirty = true;\n    }\n\n    private IRenderable GetInner()\n    {\n        if (_dirty || HasDirtyChildren() || _rendered == null)\n        {\n            _rendered = Build();\n            _dirty = false;\n        }\n\n        return _rendered;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Measurement.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a measurement.\n/// </summary>\npublic readonly struct Measurement : IEquatable<Measurement>\n{\n    /// <summary>\n    /// Gets the minimum width.\n    /// </summary>\n    public int Min { get; }\n\n    /// <summary>\n    /// Gets the maximum width.\n    /// </summary>\n    public int Max { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Measurement\"/> struct.\n    /// </summary>\n    /// <param name=\"min\">The minimum width.</param>\n    /// <param name=\"max\">The maximum width.</param>\n    public Measurement(int min, int max)\n    {\n        Min = min;\n        Max = max;\n    }\n\n    /// <inheritdoc/>\n    public override bool Equals(object? obj)\n    {\n        return obj is Measurement measurement && Equals(measurement);\n    }\n\n    /// <inheritdoc/>\n    public override int GetHashCode()\n    {\n        unchecked\n        {\n            var hash = (int)2166136261;\n            hash = (hash * 16777619) ^ Min.GetHashCode();\n            hash = (hash * 16777619) ^ Max.GetHashCode();\n            return hash;\n        }\n    }\n\n    /// <inheritdoc/>\n    public bool Equals(Measurement other)\n    {\n        return Min == other.Min && Max == other.Max;\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Measurement\"/> instances are equal.\n    /// </summary>\n    /// <param name=\"left\">The first measurement instance to compare.</param>\n    /// <param name=\"right\">The second measurement instance to compare.</param>\n    /// <returns><c>true</c> if the two measurements are equal, otherwise <c>false</c>.</returns>\n    public static bool operator ==(Measurement left, Measurement right)\n    {\n        return left.Equals(right);\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Measurement\"/> instances are not equal.\n    /// </summary>\n    /// <param name=\"left\">The first measurement instance to compare.</param>\n    /// <param name=\"right\">The second measurement instance to compare.</param>\n    /// <returns><c>true</c> if the two measurements are not equal, otherwise <c>false</c>.</returns>\n    public static bool operator !=(Measurement left, Measurement right)\n    {\n        return !(left == right);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/RenderHookScope.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a render hook scope.\n/// </summary>\npublic sealed class RenderHookScope : IDisposable\n{\n    private readonly IAnsiConsole _console;\n    private readonly IRenderHook _hook;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"RenderHookScope\"/> class.\n    /// </summary>\n    /// <param name=\"console\">The console to attach the render hook to.</param>\n    /// <param name=\"hook\">The render hook.</param>\n    public RenderHookScope(IAnsiConsole console, IRenderHook hook)\n    {\n        _console = console ?? throw new ArgumentNullException(nameof(console));\n        _hook = hook ?? throw new ArgumentNullException(nameof(hook));\n\n        _console.Pipeline.Attach(_hook);\n    }\n\n    /// <inheritdoc/>\n    public void Dispose()\n    {\n        _console.Pipeline.Detach(_hook);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/RenderOptions.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents render options.\n/// </summary>\n/// <param name=\"Capabilities\">The capabilities.</param>\n/// <param name=\"ConsoleSize\">The console size.</param>\npublic record class RenderOptions(IReadOnlyCapabilities Capabilities, Size ConsoleSize)\n{\n    /// <summary>\n    /// Gets the current color system.\n    /// </summary>\n    public ColorSystem ColorSystem => Capabilities.ColorSystem;\n\n    /// <summary>\n    /// Gets a value indicating whether or not VT/Ansi codes are supported.\n    /// </summary>\n    public bool Ansi => Capabilities.Ansi;\n\n    /// <summary>\n    /// Gets a value indicating whether or not unicode is supported.\n    /// </summary>\n    public bool Unicode => Capabilities.Unicode;\n\n    /// <summary>\n    /// Gets the current justification.\n    /// </summary>\n    public Justify? Justification { get; init; }\n\n    /// <summary>\n    /// Gets the requested height.\n    /// </summary>\n    public int? Height { get; init; }\n\n    /// <summary>\n    /// Gets a value indicating whether the context want items to render without\n    /// line breaks and return a single line where applicable.\n    /// </summary>\n    internal bool SingleLine { get; init; }\n\n    /// <summary>\n    /// Creates a <see cref=\"RenderOptions\"/> instance from a <see cref=\"IAnsiConsole\"/>.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"capabilities\">The capabilities, or <c>null</c> to use the provided console's capabilities.</param>\n    /// <returns>A <see cref=\"RenderOptions\"/> representing the provided <see cref=\"IAnsiConsole\"/>.</returns>\n    public static RenderOptions Create(IAnsiConsole console, IReadOnlyCapabilities? capabilities = null)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return new RenderOptions(\n            capabilities ?? console.Profile.Capabilities,\n            new Size(console.Profile.Width, console.Profile.Height))\n        {\n            Justification = null,\n            Height = null,\n            SingleLine = false,\n        };\n    }\n}\n\ninternal static class RenderOptionsExtensions\n{\n    public static BoxBorder GetSafeBorder<T>(this RenderOptions options, T border)\n        where T : IHasBoxBorder, IHasBorder\n    {\n        return BoxExtensions.GetSafeBorder(border.Border, !options.Unicode && border.UseSafeBorder);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/RenderPipeline.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents the render pipeline.\n/// </summary>\npublic sealed class RenderPipeline\n{\n    private readonly List<IRenderHook> _hooks;\n    private readonly Lock _lock;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"RenderPipeline\"/> class.\n    /// </summary>\n    public RenderPipeline()\n    {\n        _hooks = [];\n        _lock = LockFactory.Create();\n    }\n\n    /// <summary>\n    /// Attaches a new render hook onto the pipeline.\n    /// </summary>\n    /// <param name=\"hook\">The render hook to attach.</param>\n    public void Attach(IRenderHook hook)\n    {\n        lock (_lock)\n        {\n            _hooks.Add(hook);\n        }\n    }\n\n    /// <summary>\n    /// Detaches a render hook from the pipeline.\n    /// </summary>\n    /// <param name=\"hook\">The render hook to detach.</param>\n    public void Detach(IRenderHook hook)\n    {\n        lock (_lock)\n        {\n            _hooks.Remove(hook);\n        }\n    }\n\n    /// <summary>\n    /// Processes the specified renderables.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"renderables\">The renderables to process.</param>\n    /// <returns>The processed renderables.</returns>\n    public IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n    {\n        lock (_lock)\n        {\n            var current = renderables;\n            for (var index = _hooks.Count - 1; index >= 0; index--)\n            {\n                current = _hooks[index].Process(options, current);\n            }\n\n            return current;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Renderable.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Base class for a renderable object implementing <see cref=\"IRenderable\"/>.\n/// </summary>\npublic abstract class Renderable : IRenderable\n{\n    /// <inheritdoc/>\n    [DebuggerStepThrough]\n    Measurement IRenderable.Measure(RenderOptions options, int maxWidth)\n    {\n        return Measure(options, maxWidth);\n    }\n\n    /// <inheritdoc/>\n    [DebuggerStepThrough]\n    IEnumerable<Segment> IRenderable.Render(RenderOptions options, int maxWidth)\n    {\n        return Render(options, maxWidth);\n    }\n\n    /// <summary>\n    /// Measures the renderable object.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"maxWidth\">The maximum allowed width.</param>\n    /// <returns>The minimum and maximum width of the object.</returns>\n    protected virtual Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        return new Measurement(maxWidth, maxWidth);\n    }\n\n    /// <summary>\n    /// Renders the object.\n    /// </summary>\n    /// <param name=\"options\">The render options.</param>\n    /// <param name=\"maxWidth\">The maximum allowed width.</param>\n    /// <returns>A collection of segments.</returns>\n    protected abstract IEnumerable<Segment> Render(RenderOptions options, int maxWidth);\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Segment.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a renderable segment.\n/// </summary>\n[DebuggerDisplay(\"{Text,nq}\")]\npublic class Segment\n{\n    /// <summary>\n    /// Gets the segment text.\n    /// </summary>\n    public string Text { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not this is an explicit line break\n    /// that should be preserved.\n    /// </summary>\n    public bool IsLineBreak { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not this is a whitespace\n    /// that should be preserved but not taken into account when\n    /// layouting text.\n    /// </summary>\n    public bool IsWhiteSpace { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not this is a\n    /// control code such as cursor movement.\n    /// </summary>\n    public bool IsControlCode { get; }\n\n    /// <summary>\n    /// Gets the segment style.\n    /// </summary>\n    public Style Style { get; }\n\n    /// <summary>\n    /// Gets the segment link.\n    /// </summary>\n    public Link? Link { get; }\n\n    /// <summary>\n    /// Gets a segment representing a line break.\n    /// </summary>\n    public static Segment LineBreak { get; } = new Segment(Environment.NewLine, Style.Plain, null, true, false);\n\n    /// <summary>\n    /// Gets an empty segment.\n    /// </summary>\n    public static Segment Empty { get; } = new Segment(string.Empty, Style.Plain, null, false, false);\n\n    /// <summary>\n    /// Creates padding segment.\n    /// </summary>\n    /// <param name=\"size\">Number of whitespace characters.</param>\n    /// <returns>Segment for specified padding size.</returns>\n    public static Segment Padding(int size) => new(new string(' ', size));\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Segment\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The segment text.</param>\n    public Segment(string text)\n        : this(text, Style.Plain)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Segment\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The segment text.</param>\n    /// <param name=\"style\">The segment style.</param>\n    /// <param name=\"link\">The segment link.</param>\n    public Segment(string text, Style style, Link? link = null)\n        : this(text, style, link, false, false)\n    {\n    }\n\n    private Segment(string text, Style style, Link? link, bool lineBreak, bool control)\n    {\n        Text = text?.NormalizeNewLines() ?? throw new ArgumentNullException(nameof(text));\n        Style = style;\n        Link = link;\n        IsLineBreak = lineBreak;\n        IsWhiteSpace = string.IsNullOrWhiteSpace(text);\n        IsControlCode = control;\n    }\n\n    /// <summary>\n    /// Creates a control segment.\n    /// </summary>\n    /// <param name=\"control\">The control code.</param>\n    /// <returns>A segment representing a control code.</returns>\n    public static Segment Control(string control)\n    {\n        return new Segment(control, Style.Plain, null, false, true);\n    }\n\n    /// <summary>\n    /// Gets the number of cells that this segment\n    /// occupies in the console.\n    /// </summary>\n    /// <returns>The number of cells that this segment occupies in the console.</returns>\n    public int CellCount()\n    {\n        if (IsControlCode)\n        {\n            return 0;\n        }\n\n        return Cell.GetCellLength(Text);\n    }\n\n    /// <summary>\n    /// Gets the number of cells that the segments occupies in the console.\n    /// </summary>\n    /// <param name=\"segments\">The segments to measure.</param>\n    /// <returns>The number of cells that the segments occupies in the console.</returns>\n    public static int CellCount(IEnumerable<Segment> segments)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        var sum = 0;\n        foreach (var segment in segments)\n        {\n            sum += segment.CellCount();\n        }\n\n        return sum;\n    }\n\n    /// <summary>\n    /// Returns a new segment without any trailing line endings.\n    /// </summary>\n    /// <returns>A new segment without any trailing line endings.</returns>\n    public Segment StripLineEndings()\n    {\n        return new Segment(Text.TrimEnd('\\n').TrimEnd('\\r'), Style);\n    }\n\n    /// <summary>\n    /// Splits the segment at the offset.\n    /// </summary>\n    /// <param name=\"offset\">The offset where to split the segment.</param>\n    /// <returns>One or two new segments representing the split.</returns>\n    public (Segment First, Segment? Second) Split(int offset)\n    {\n        if (offset < 0)\n        {\n            return (this, null);\n        }\n\n        if (offset >= CellCount())\n        {\n            return (this, null);\n        }\n\n        var index = 0;\n        if (offset > 0)\n        {\n            var accumulated = 0;\n            foreach (var character in Text)\n            {\n                index++;\n                accumulated += Cell.GetCellLength(character);\n                if (accumulated >= offset)\n                {\n                    break;\n                }\n            }\n        }\n\n        return (\n            new Segment(Text.Substring(0, index), Style),\n            new Segment(Text.Substring(index, Text.Length - index), Style));\n    }\n\n    /// <summary>\n    /// Clones the segment.\n    /// </summary>\n    /// <returns>A new segment that's identical to this one.</returns>\n    public Segment Clone()\n    {\n        return new Segment(Text, Style);\n    }\n\n    /// <summary>\n    /// Splits the provided segments into lines.\n    /// </summary>\n    /// <param name=\"segments\">The segments to split.</param>\n    /// <returns>A collection of lines.</returns>\n    public static List<SegmentLine> SplitLines(IEnumerable<Segment> segments)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        return SplitLines(segments, int.MaxValue);\n    }\n\n    /// <summary>\n    /// Splits the provided segments into lines with a maximum width.\n    /// </summary>\n    /// <param name=\"segments\">The segments to split into lines.</param>\n    /// <param name=\"maxWidth\">The maximum width.</param>\n    /// <param name=\"height\">The height (if any).</param>\n    /// <returns>A list of lines.</returns>\n    public static List<SegmentLine> SplitLines(IEnumerable<Segment> segments, int maxWidth, int? height = null)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        var lines = new List<SegmentLine>();\n        var line = new SegmentLine();\n\n        var stack = new Stack<Segment>(segments.Reverse());\n\n        while (stack.Count > 0)\n        {\n            var segment = stack.Pop();\n            var segmentLength = segment.CellCount();\n\n            // Does this segment make the line exceed the max width?\n            var lineLength = line.CellCount();\n            if (lineLength + segmentLength > maxWidth)\n            {\n                var offset = maxWidth - lineLength;\n\n                var (first, second) = segment.Split(offset);\n\n                line.Add(first);\n                lines.Add(line);\n                line = [];\n\n                if (second != null)\n                {\n                    stack.Push(second);\n                }\n\n                continue;\n            }\n\n            // Does the segment contain a newline?\n            if (segment.Text.ContainsExact(\"\\n\"))\n            {\n                // Is it a new line?\n                if (segment.Text == \"\\n\")\n                {\n                    if (line.Length != 0 || segment.IsLineBreak)\n                    {\n                        lines.Add(line);\n                        line = [];\n                    }\n\n                    continue;\n                }\n\n                var text = segment.Text;\n                while (text != null)\n                {\n                    var parts = text.SplitLines();\n                    if (parts.Length > 0)\n                    {\n                        if (parts[0].Length > 0)\n                        {\n                            line.Add(new Segment(parts[0], segment.Style));\n                        }\n                    }\n\n                    if (parts.Length > 1)\n                    {\n                        if (line.Length > 0)\n                        {\n                            lines.Add(line);\n                            line = [];\n                        }\n\n                        text = string.Concat(parts.Skip(1).Take(parts.Length - 1));\n                    }\n                    else\n                    {\n                        text = null;\n                    }\n                }\n            }\n            else\n            {\n                line.Add(segment);\n            }\n        }\n\n        if (line.Count > 0)\n        {\n            lines.Add(line);\n        }\n\n        // Got a height specified?\n        if (height != null)\n        {\n            if (lines.Count >= height)\n            {\n                // Remove lines\n                lines.RemoveRange(height.Value, lines.Count - height.Value);\n            }\n            else\n            {\n                // Add lines\n                var missing = height - lines.Count;\n                for (var i = 0; i < missing; i++)\n                {\n                    lines.Add([]);\n                }\n            }\n        }\n\n        return lines;\n    }\n\n    /// <summary>\n    /// Splits an overflowing segment into several new segments.\n    /// </summary>\n    /// <param name=\"segment\">The segment to split.</param>\n    /// <param name=\"overflow\">The overflow strategy to use.</param>\n    /// <param name=\"maxWidth\">The maximum width.</param>\n    /// <returns>A list of segments that has been split.</returns>\n    public static List<Segment> SplitOverflow(Segment segment, Overflow? overflow, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(segment);\n\n        if (segment.CellCount() <= maxWidth)\n        {\n            return [segment];\n        }\n\n        // Default to folding\n        overflow ??= Overflow.Fold;\n\n        var result = new List<Segment>();\n\n        if (overflow == Overflow.Fold)\n        {\n            var splitted = SplitSegment(segment.Text, maxWidth);\n            foreach (var str in splitted)\n            {\n                result.Add(new Segment(str, segment.Style));\n            }\n        }\n        else if (overflow == Overflow.Crop)\n        {\n            if (maxWidth <= 0)\n            {\n                result.Add(new Segment(string.Empty, segment.Style));\n            }\n            else\n            {\n                var truncated = Truncate(segment, maxWidth);\n                result.Add(truncated ?? new Segment(string.Empty, segment.Style));\n            }\n        }\n        else if (overflow == Overflow.Ellipsis)\n        {\n            if (Math.Max(0, maxWidth - 1) == 0)\n            {\n                result.Add(new Segment(\"…\", segment.Style));\n            }\n            else\n            {\n                var truncated = Truncate(segment, maxWidth - 1);\n                var prefix = truncated?.Text ?? string.Empty;\n                result.Add(new Segment(prefix + \"…\", segment.Style));\n            }\n        }\n\n        return result;\n    }\n\n    /// <summary>\n    /// Truncates the segments to the specified width.\n    /// </summary>\n    /// <param name=\"segments\">The segments to truncate.</param>\n    /// <param name=\"maxWidth\">The maximum width that the segments may occupy.</param>\n    /// <returns>A list of segments that has been truncated.</returns>\n    public static List<Segment> Truncate(IEnumerable<Segment> segments, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        var result = new List<Segment>();\n\n        var totalWidth = 0;\n        foreach (var segment in segments)\n        {\n            var segmentCellWidth = segment.CellCount();\n            if (totalWidth + segmentCellWidth > maxWidth)\n            {\n                break;\n            }\n\n            result.Add(segment);\n            totalWidth += segmentCellWidth;\n        }\n\n        if (result.Count == 0 && segments.Any())\n        {\n            var segment = Truncate(segments.First(), maxWidth);\n            if (segment != null)\n            {\n                result.Add(segment);\n            }\n        }\n\n        return result;\n    }\n\n    /// <summary>\n    /// Truncates the segment to the specified width.\n    /// </summary>\n    /// <param name=\"segment\">The segment to truncate.</param>\n    /// <param name=\"maxWidth\">The maximum width that the segment may occupy.</param>\n    /// <returns>A new truncated segment, or <c>null</c>.</returns>\n    public static Segment? Truncate(Segment? segment, int maxWidth)\n    {\n        if (segment is null)\n        {\n            return null;\n        }\n\n        if (segment.CellCount() <= maxWidth)\n        {\n            return segment;\n        }\n\n        var builder = new StringBuilder();\n        var accumulatedCellWidth = 0;\n        foreach (var character in segment.Text)\n        {\n            var characterWidth = UnicodeCalculator.GetWidth(character);\n            if (accumulatedCellWidth + characterWidth > maxWidth)\n            {\n                break;\n            }\n\n            builder.Append(character);\n            accumulatedCellWidth += characterWidth;\n        }\n\n        if (builder.Length == 0)\n        {\n            return null;\n        }\n\n        return new Segment(builder.ToString(), segment.Style);\n    }\n\n    internal static IEnumerable<Segment> Merge(IEnumerable<Segment> segments)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        var segmentBuilder = (SegmentBuilder?)null;\n        foreach (var segment in segments)\n        {\n            if (segmentBuilder == null)\n            {\n                segmentBuilder = new SegmentBuilder(segment);\n                continue;\n            }\n\n            // Both control codes?\n            if (segment.IsControlCode && segmentBuilder.IsControlCode())\n            {\n                segmentBuilder.Append(segment.Text);\n                continue;\n            }\n\n            // Same style?\n            if (segmentBuilder.StyleEquals(segment.Style) && !segmentBuilder.IsLineBreak() &&\n                !segmentBuilder.IsControlCode())\n            {\n                segmentBuilder.Append(segment.Text);\n                continue;\n            }\n\n            yield return segmentBuilder.Build();\n            segmentBuilder.Reset(segment);\n        }\n\n        if (segmentBuilder != null)\n        {\n            yield return segmentBuilder.Build();\n        }\n    }\n\n    internal static List<Segment> TruncateWithEllipsis(IEnumerable<Segment> segments, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        if (CellCount(segments) <= maxWidth)\n        {\n            return [.. segments];\n        }\n\n        segments = TrimEnd(Truncate(segments, maxWidth - 1));\n        if (!segments.Any())\n        {\n            return new List<Segment>(1);\n        }\n\n        var result = new List<Segment>(segments);\n        result.Add(new Segment(\"…\", result.Last().Style));\n        return result;\n    }\n\n    internal static List<Segment> TrimEnd(IEnumerable<Segment> segments)\n    {\n        ArgumentNullException.ThrowIfNull(segments);\n\n        var stack = new Stack<Segment>();\n        var checkForWhitespace = true;\n        foreach (var segment in segments.Reverse())\n        {\n            if (checkForWhitespace)\n            {\n                if (segment.IsWhiteSpace)\n                {\n                    continue;\n                }\n\n                checkForWhitespace = false;\n            }\n\n            stack.Push(segment);\n        }\n\n        return stack.ToList();\n    }\n\n    // TODO: Move this to Table\n    internal static List<List<SegmentLine>> MakeSameHeight(int cellHeight, List<List<SegmentLine>> cells)\n    {\n        ArgumentNullException.ThrowIfNull(cells);\n\n        foreach (var cell in cells)\n        {\n            if (cell.Count < cellHeight)\n            {\n                while (cell.Count != cellHeight)\n                {\n                    cell.Add([]);\n                }\n            }\n        }\n\n        return cells;\n    }\n\n    internal static List<SegmentLine> MakeWidth(int expectedWidth, List<SegmentLine> lines)\n    {\n        foreach (var line in lines)\n        {\n            var width = line.CellCount();\n            if (width < expectedWidth)\n            {\n                var diff = expectedWidth - width;\n                line.Add(new Segment(new string(' ', diff)));\n            }\n        }\n\n        return lines;\n    }\n\n    internal static List<string> SplitSegment(string text, int maxCellLength)\n    {\n        var list = new List<string>();\n\n        var length = 0;\n        var sb = new StringBuilder();\n        foreach (var ch in text)\n        {\n            if (length + UnicodeCalculator.GetWidth(ch) > maxCellLength)\n            {\n                list.Add(sb.ToString());\n                sb.Clear();\n                length = 0;\n            }\n\n            length += UnicodeCalculator.GetWidth(ch);\n            sb.Append(ch);\n        }\n\n        list.Add(sb.ToString());\n\n        return list;\n    }\n\n    private class SegmentBuilder\n    {\n        private readonly StringBuilder _textBuilder = new();\n        private Segment _originalSegment;\n\n        public SegmentBuilder(Segment originalSegment)\n        {\n            _originalSegment = originalSegment;\n            Reset(originalSegment);\n        }\n\n        public bool IsControlCode() => _originalSegment.IsControlCode;\n        public bool IsLineBreak() => _originalSegment.IsLineBreak;\n        public bool StyleEquals(Style segmentStyle) => segmentStyle.Equals(_originalSegment.Style);\n\n        public void Append(string text)\n        {\n            _textBuilder.Append(text);\n        }\n\n        public Segment Build()\n        {\n            return new Segment(\n                _textBuilder.ToString(),\n                _originalSegment.Style,\n                _originalSegment.Link,\n                _originalSegment.IsLineBreak,\n                _originalSegment.IsControlCode);\n        }\n\n        public void Reset(Segment segment)\n        {\n            _textBuilder.Clear();\n            _textBuilder.Append(segment.Text);\n            _originalSegment = segment;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/SegmentLine.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents a collection of segments.\n/// </summary>\npublic sealed class SegmentLine : List<Segment>\n{\n    /// <summary>\n    /// Gets the width of the line.\n    /// </summary>\n    public int Length => this.Sum(line => line.Text.Length);\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SegmentLine\"/> class.\n    /// </summary>\n    public SegmentLine()\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SegmentLine\"/> class.\n    /// </summary>\n    /// <param name=\"segments\">The segments.</param>\n    public SegmentLine(IEnumerable<Segment> segments)\n        : base(segments)\n    {\n    }\n\n    /// <summary>\n    /// Gets the number of cells the segment line occupies.\n    /// </summary>\n    /// <returns>The cell width of the segment line.</returns>\n    public int CellCount()\n    {\n        return Segment.CellCount(this);\n    }\n\n    /// <summary>\n    /// Preprends a segment to the line.\n    /// </summary>\n    /// <param name=\"segment\">The segment to prepend.</param>\n    public void Prepend(Segment segment)\n    {\n        ArgumentNullException.ThrowIfNull(segment);\n\n        Insert(0, segment);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/SegmentLineEnumerator.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// An enumerator for <see cref=\"SegmentLine\"/> collections.\n/// </summary>\npublic sealed class SegmentLineEnumerator : IEnumerable<Segment>\n{\n    private readonly List<SegmentLine> _lines;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SegmentLineEnumerator\"/> class.\n    /// </summary>\n    /// <param name=\"lines\">The lines to enumerate.</param>\n    public SegmentLineEnumerator(IEnumerable<SegmentLine> lines)\n    {\n        ArgumentNullException.ThrowIfNull(lines);\n\n        _lines = new List<SegmentLine>(lines);\n    }\n\n    /// <inheritdoc/>\n    public IEnumerator<Segment> GetEnumerator()\n    {\n        return new SegmentLineIterator(_lines);\n    }\n\n    /// <inheritdoc/>\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/SegmentLineIterator.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// An iterator for <see cref=\"SegmentLine\"/> collections.\n/// </summary>\npublic sealed class SegmentLineIterator : IEnumerator<Segment>\n{\n    private readonly List<SegmentLine> _lines;\n    private int _currentLine;\n    private int _currentIndex;\n    private bool _lineBreakEmitted;\n\n    /// <summary>\n    /// Gets the current segment.\n    /// </summary>\n    public Segment Current { get; private set; }\n\n    /// <inheritdoc/>\n    object? IEnumerator.Current => Current;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"SegmentLineIterator\"/> class.\n    /// </summary>\n    /// <param name=\"lines\">The lines to iterate.</param>\n    public SegmentLineIterator(IEnumerable<SegmentLine> lines)\n    {\n        ArgumentNullException.ThrowIfNull(lines);\n\n        _currentLine = 0;\n        _currentIndex = -1;\n        _lines = new List<SegmentLine>(lines);\n\n        Current = Segment.Empty;\n    }\n\n    /// <inheritdoc/>\n    public void Dispose()\n    {\n    }\n\n    /// <inheritdoc/>\n    public bool MoveNext()\n    {\n        if (_currentLine > _lines.Count - 1)\n        {\n            return false;\n        }\n\n        _currentIndex++;\n\n        // Did we go past the end of the line?\n        if (_currentIndex > _lines[_currentLine].Count - 1)\n        {\n            // We haven't just emitted a line break?\n            if (!_lineBreakEmitted)\n            {\n                // Got any more lines?\n                if (_currentIndex + 1 > _lines[_currentLine].Count - 1)\n                {\n                    // Only emit a line break if the next one isn't a line break.\n                    if ((_currentLine + 1 <= _lines.Count - 1)\n                        && _lines[_currentLine + 1].Count > 0\n                        && !_lines[_currentLine + 1][0].IsLineBreak)\n                    {\n                        _lineBreakEmitted = true;\n                        Current = Segment.LineBreak;\n                        return true;\n                    }\n                }\n            }\n\n            // Increase the line and reset the index.\n            _currentLine++;\n            _currentIndex = 0;\n\n            _lineBreakEmitted = false;\n\n            // No more lines?\n            if (_currentLine > _lines.Count - 1)\n            {\n                return false;\n            }\n\n            // Nothing on the line?\n            while (_currentIndex > _lines[_currentLine].Count - 1)\n            {\n                _currentLine++;\n                _currentIndex = 0;\n\n                if (_currentLine > _lines.Count - 1)\n                {\n                    return false;\n                }\n            }\n        }\n\n        // Reset the flag\n        _lineBreakEmitted = false;\n\n        Current = _lines[_currentLine][_currentIndex];\n        return true;\n    }\n\n    /// <inheritdoc/>\n    public void Reset()\n    {\n        _currentLine = 0;\n        _currentIndex = -1;\n\n        Current = Segment.Empty;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/SegmentShape.cs",
    "content": "namespace Spectre.Console.Rendering;\n\ninternal readonly struct SegmentShape\n{\n    public int Width { get; }\n    public int Height { get; }\n\n    public SegmentShape(int width, int height)\n    {\n        Width = width;\n        Height = height;\n    }\n\n    public static SegmentShape Calculate(RenderOptions options, List<SegmentLine> lines)\n    {\n        ArgumentNullException.ThrowIfNull(lines);\n\n        var height = lines.Count;\n        var width = lines.Count > 0 ? lines.Max(l => Segment.CellCount(l)) : 0;\n\n        return new SegmentShape(width, height);\n    }\n\n    public SegmentShape Inflate(SegmentShape other)\n    {\n        return new SegmentShape(\n            Math.Max(Width, other.Width),\n            Math.Max(Height, other.Height));\n    }\n\n    public void Apply(RenderOptions options, ref List<SegmentLine> lines)\n    {\n        foreach (var line in lines)\n        {\n            var length = Segment.CellCount(line);\n            var missing = Width - length;\n            if (missing > 0)\n            {\n                line.Add(Segment.Padding(missing));\n            }\n        }\n\n        if (lines.Count < Height && Width > 0)\n        {\n            var missing = Height - lines.Count;\n            for (var i = 0; i < missing; i++)\n            {\n                lines.Add([\n                    Segment.Padding(Width)\n                ]);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/TablePart.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Represents different parts of a table.\n/// </summary>\npublic enum TablePart\n{\n    /// <summary>\n    /// The top of a table.\n    /// </summary>\n    Top,\n\n    /// <summary>\n    /// The separator between the header and the cells.\n    /// </summary>\n    HeaderSeparator,\n\n    /// <summary>\n    /// The separator between the rows.\n    /// </summary>\n    RowSeparator,\n\n    /// <summary>\n    /// The separator between the footer and the cells.\n    /// </summary>\n    FooterSeparator,\n\n    /// <summary>\n    /// The bottom of a table.\n    /// </summary>\n    Bottom,\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Tree/AsciiTreeGuide.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// An ASCII tree guide.\n/// </summary>\npublic sealed class AsciiTreeGuide : TreeGuide\n{\n    /// <inheritdoc/>\n    public override string GetPart(TreeGuidePart part)\n    {\n        return part switch\n        {\n            TreeGuidePart.Space => \"    \",\n            TreeGuidePart.Continue => \"|   \",\n            TreeGuidePart.Fork => \"|-- \",\n            TreeGuidePart.End => \"`-- \",\n            _ => throw new ArgumentOutOfRangeException(nameof(part), part, \"Unknown tree part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Tree/BoldLineTreeGuide.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// A tree guide made up of bold lines.\n/// </summary>\npublic sealed class BoldLineTreeGuide : TreeGuide\n{\n    /// <inheritdoc/>\n    public override TreeGuide? SafeTreeGuide => Ascii;\n\n    /// <inheritdoc/>\n    public override string GetPart(TreeGuidePart part)\n    {\n        return part switch\n        {\n            TreeGuidePart.Space => \"    \",\n            TreeGuidePart.Continue => \"┃   \",\n            TreeGuidePart.Fork => \"┣━━ \",\n            TreeGuidePart.End => \"┗━━ \",\n            _ => throw new ArgumentOutOfRangeException(nameof(part), part, \"Unknown tree part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Tree/DoubleLineTreeGuide.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// A tree guide made up of double lines.\n/// </summary>\npublic sealed class DoubleLineTreeGuide : TreeGuide\n{\n    /// <inheritdoc/>\n    public override TreeGuide? SafeTreeGuide => Ascii;\n\n    /// <inheritdoc/>\n    public override string GetPart(TreeGuidePart part)\n    {\n        return part switch\n        {\n            TreeGuidePart.Space => \"    \",\n            TreeGuidePart.Continue => \"║   \",\n            TreeGuidePart.Fork => \"╠══ \",\n            TreeGuidePart.End => \"╚══ \",\n            _ => throw new ArgumentOutOfRangeException(nameof(part), part, \"Unknown tree part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/Tree/LineTreeGuide.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// A tree guide made up of lines.\n/// </summary>\npublic sealed class LineTreeGuide : TreeGuide\n{\n    /// <inheritdoc/>\n    public override string GetPart(TreeGuidePart part)\n    {\n        return part switch\n        {\n            TreeGuidePart.Space => \"    \",\n            TreeGuidePart.Continue => \"│   \",\n            TreeGuidePart.Fork => \"├── \",\n            TreeGuidePart.End => \"└── \",\n            _ => throw new ArgumentOutOfRangeException(nameof(part), part, \"Unknown tree part.\"),\n        };\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Rendering/TreeGuidePart.cs",
    "content": "namespace Spectre.Console.Rendering;\n\n/// <summary>\n/// Defines the different rendering parts of a <see cref=\"Tree\"/>.\n/// </summary>\npublic enum TreeGuidePart\n{\n    /// <summary>\n    /// Represents a space.\n    /// </summary>\n    Space,\n\n    /// <summary>\n    /// Connection between siblings.\n    /// </summary>\n    Continue,\n\n    /// <summary>\n    /// Branch from parent to child.\n    /// </summary>\n    Fork,\n\n    /// <summary>\n    /// Branch from parent to child for the last child in a set.\n    /// </summary>\n    End,\n}"
  },
  {
    "path": "src/Spectre.Console/Size.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a size.\n/// </summary>\n[DebuggerDisplay(\"{Width,nq}x{Height,nq}\")]\npublic readonly struct Size\n{\n    /// <summary>\n    /// Gets the width.\n    /// </summary>\n    public int Width { get; }\n\n    /// <summary>\n    /// Gets the height.\n    /// </summary>\n    public int Height { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Size\"/> struct.\n    /// </summary>\n    /// <param name=\"width\">The width.</param>\n    /// <param name=\"height\">The height.</param>\n    public Size(int width, int height)\n    {\n        Width = width;\n        Height = height;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Spectre.Console.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>\n    <IsPackable>true</IsPackable>\n    <DefineConstants>$(DefineConstants)TRACE;WCWIDTH;WCWIDTH_VISIBILITY_INTERNAL</DefineConstants>\n    <IsAotCompatible Condition=\"'$(TargetFramework)' != 'netstandard2.0'\">true</IsAotCompatible>\n  </PropertyGroup>\n\n  <ItemGroup Label=\"REMOVE THIS\">\n    <InternalsVisibleTo Include=\"$(AssemblyName).Tests\" />\n  </ItemGroup>\n\n  <PropertyGroup>\n    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>\n    <CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <!-- Exclude the output of source generators from the compilation -->\n    <Compile Remove=\"$(CompilerGeneratedFilesOutputPath)/**/*.cs\" />\n  </ItemGroup>\n\n  <ItemGroup Label=\"Standard Figlet font\">\n    <EmbeddedResource Include=\"Widgets\\Figlet\\Fonts\\Standard.flf\" />\n    <None Remove=\"Widgets\\Figlet\\Fonts\\Standard.flf\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Wcwidth.Sources\" PrivateAssets=\"all\" />\n    <PackageReference Include=\"Microsoft.Bcl.TimeProvider\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" />\n    <PackageReference Include=\"System.Memory\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" />\n    <PackageReference Include=\"Polyfill\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup Label=\"Source Generator\">\n    <ProjectReference Include=\"..\\Spectre.Console.Ansi\\Spectre.Console.Ansi.csproj\" />\n    <ProjectReference Include=\"..\\Spectre.Console.SourceGenerator\\Spectre.Console.SourceGenerator.csproj\"\n                      OutputItemType=\"Analyzer\"\n                      ReferenceOutputAssembly=\"false\" />\n  </ItemGroup>\n\n  <ItemGroup Label=\"Generator Data Files\">\n    <AdditionalFiles Include=\"Data\\spinners_default.json\" />\n    <AdditionalFiles Include=\"Data\\spinners_sindresorhus.json\" />\n\n    <!--\n    currently Emoji v17.\n    see data.raw.json at https://github.com/milesj/emojibase/tree/master/packages/data/en\n    -->\n    <AdditionalFiles Include=\"Data\\emoji.json\" />\n  </ItemGroup>\n\n\t<ItemGroup>\n\t\t<PackageReference Include=\"Backport.System.Threading.Lock\">\n\t\t\t<PrivateAssets>all</PrivateAssets>\n\t\t\t<IncludeAssets>analyzers</IncludeAssets>\n\t\t</PackageReference>\n\t\t<Using Condition=\"$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))\" Alias=\"Lock\" Include=\"System.Threading.Lock\" />\n\t\t<Using Condition=\"!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))\" Alias=\"Lock\" Include=\"Backport.System.Threading.Lock\" />\n\t\t<Using Alias=\"LockFactory\" Include=\"Backport.System.Threading.LockFactory\" />\n\t</ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Spectre.Console/TableBorder.Known.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a border.\n/// </summary>\npublic abstract partial class TableBorder\n{\n    /// <summary>\n    /// Gets an invisible border.\n    /// </summary>\n    public static TableBorder None { get; } = new NoTableBorder();\n\n    /// <summary>\n    /// Gets an ASCII border.\n    /// </summary>\n    public static TableBorder Ascii { get; } = new AsciiTableBorder();\n\n    /// <summary>\n    /// Gets an ASCII border.\n    /// </summary>\n    public static TableBorder Ascii2 { get; } = new Ascii2TableBorder();\n\n    /// <summary>\n    /// Gets an ASCII border with a double header border.\n    /// </summary>\n    public static TableBorder AsciiDoubleHead { get; } = new AsciiDoubleHeadTableBorder();\n\n    /// <summary>\n    /// Gets a square border.\n    /// </summary>\n    public static TableBorder Square { get; } = new SquareTableBorder();\n\n    /// <summary>\n    /// Gets a rounded border.\n    /// </summary>\n    public static TableBorder Rounded { get; } = new RoundedTableBorder();\n\n    /// <summary>\n    /// Gets a minimal border.\n    /// </summary>\n    public static TableBorder Minimal { get; } = new MinimalTableBorder();\n\n    /// <summary>\n    /// Gets a minimal border with a heavy head.\n    /// </summary>\n    public static TableBorder MinimalHeavyHead { get; } = new MinimalHeavyHeadTableBorder();\n\n    /// <summary>\n    /// Gets a minimal border with a double header border.\n    /// </summary>\n    public static TableBorder MinimalDoubleHead { get; } = new MinimalDoubleHeadTableBorder();\n\n    /// <summary>\n    /// Gets a simple border.\n    /// </summary>\n    public static TableBorder Simple { get; } = new SimpleTableBorder();\n\n    /// <summary>\n    /// Gets a simple border with heavy lines.\n    /// </summary>\n    public static TableBorder SimpleHeavy { get; } = new SimpleHeavyTableBorder();\n\n    /// <summary>\n    /// Gets a horizontal border.\n    /// </summary>\n    public static TableBorder Horizontal { get; } = new HorizontalTableBorder();\n\n    /// <summary>\n    /// Gets a heavy border.\n    /// </summary>\n    public static TableBorder Heavy { get; } = new HeavyTableBorder();\n\n    /// <summary>\n    /// Gets a border with a heavy edge.\n    /// </summary>\n    public static TableBorder HeavyEdge { get; } = new HeavyEdgeTableBorder();\n\n    /// <summary>\n    /// Gets a border with a heavy header.\n    /// </summary>\n    public static TableBorder HeavyHead { get; } = new HeavyHeadTableBorder();\n\n    /// <summary>\n    /// Gets a double border.\n    /// </summary>\n    [SuppressMessage(\"Naming\", \"CA1720:Identifier contains type name\")]\n    public static TableBorder Double { get; } = new DoubleTableBorder();\n\n    /// <summary>\n    /// Gets a border with a double edge.\n    /// </summary>\n    public static TableBorder DoubleEdge { get; } = new DoubleEdgeTableBorder();\n\n    /// <summary>\n    /// Gets a minimalist border.\n    /// </summary>\n    public static TableBorder Minimalist { get; } = new MinimalistTableBorder();\n\n    /// <summary>\n    /// Gets a markdown border.\n    /// </summary>\n    public static TableBorder Markdown { get; } = new MarkdownTableBorder();\n}"
  },
  {
    "path": "src/Spectre.Console/TableBorder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a border.\n/// </summary>\npublic abstract partial class TableBorder\n{\n    /// <summary>\n    /// Gets a value indicating whether or not the border is visible.\n    /// </summary>\n    public virtual bool Visible { get; } = true;\n\n    /// <summary>\n    /// Gets the safe border for this border or <c>null</c> if none exist.\n    /// </summary>\n    public virtual TableBorder? SafeBorder { get; } = null;\n\n    /// <summary>\n    /// Gets a value indicating whether the border supports row separators or not.\n    /// </summary>\n    public virtual bool SupportsRowSeparator { get; } = true;\n\n    /// <summary>\n    /// Gets a value indicating whether or not the border uses cell padding.\n    /// </summary>\n    public virtual bool UsePadding { get; } = true;\n\n    /// <summary>\n    /// Gets the string representation of a specified table border part.\n    /// </summary>\n    /// <param name=\"part\">The part to get the character representation for.</param>\n    /// <returns>A character representation of the specified border part.</returns>\n    public abstract string GetPart(TableBorderPart part);\n\n    /// <summary>\n    /// Gets a whole column row for the specific column row part.\n    /// </summary>\n    /// <param name=\"part\">The column row part.</param>\n    /// <param name=\"widths\">The column widths.</param>\n    /// <param name=\"columns\">The columns.</param>\n    /// <returns>A string representing the column row.</returns>\n    public virtual string GetColumnRow(TablePart part, IReadOnlyList<int> widths, IReadOnlyList<IColumn> columns)\n    {\n        ArgumentNullException.ThrowIfNull(widths);\n        ArgumentNullException.ThrowIfNull(columns);\n\n        var (left, center, separator, right) = GetTableParts(part);\n\n        var builder = new StringBuilder();\n        builder.Append(left);\n\n        foreach (var (columnIndex, _, lastColumn, columnWidth) in widths.Enumerate())\n        {\n            var padding = columns[columnIndex].Padding;\n            var centerWidth = padding.GetLeftSafe() + columnWidth + padding.GetRightSafe();\n            builder.Append(center.Repeat(centerWidth));\n\n            if (!lastColumn)\n            {\n                builder.Append(separator);\n            }\n        }\n\n        builder.Append(right);\n        return builder.ToString();\n    }\n\n    /// <summary>\n    /// Gets the table parts used to render a specific table row.\n    /// </summary>\n    /// <param name=\"part\">The table part.</param>\n    /// <returns>The table parts used to render the specific table row.</returns>\n    protected (string Left, string Center, string Separator, string Right) GetTableParts(TablePart part)\n    {\n        return part switch\n        {\n            // Top part\n            TablePart.Top =>\n                (GetPart(TableBorderPart.HeaderTopLeft), GetPart(TableBorderPart.HeaderTop),\n                GetPart(TableBorderPart.HeaderTopSeparator), GetPart(TableBorderPart.HeaderTopRight)),\n\n            // Separator between header and cells\n            TablePart.HeaderSeparator =>\n                (GetPart(TableBorderPart.HeaderBottomLeft), GetPart(TableBorderPart.HeaderBottom),\n                GetPart(TableBorderPart.HeaderBottomSeparator), GetPart(TableBorderPart.HeaderBottomRight)),\n\n            // Separator between header and cells\n            TablePart.RowSeparator =>\n                (GetPart(TableBorderPart.RowLeft), GetPart(TableBorderPart.RowCenter),\n                    GetPart(TableBorderPart.RowSeparator), GetPart(TableBorderPart.RowRight)),\n\n            // Separator between footer and cells\n            TablePart.FooterSeparator =>\n                (GetPart(TableBorderPart.FooterTopLeft), GetPart(TableBorderPart.FooterTop),\n                GetPart(TableBorderPart.FooterTopSeparator), GetPart(TableBorderPart.FooterTopRight)),\n\n            // Bottom part\n            TablePart.Bottom =>\n                (GetPart(TableBorderPart.FooterBottomLeft), GetPart(TableBorderPart.FooterBottom),\n                GetPart(TableBorderPart.FooterBottomSeparator), GetPart(TableBorderPart.FooterBottomRight)),\n\n            // Unknown\n            _ => throw new NotSupportedException(\"Unknown column row part\"),\n        };\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TableBorder\"/>.\n/// </summary>\npublic static class TableBorderExtensions\n{\n    /// <summary>\n    /// Gets the safe border for a border.\n    /// </summary>\n    /// <param name=\"border\">The border to get the safe border for.</param>\n    /// <param name=\"safe\">Whether or not to return the safe border.</param>\n    /// <returns>The safe border if one exist, otherwise the original border.</returns>\n    public static TableBorder GetSafeBorder(this TableBorder border, bool safe)\n    {\n        ArgumentNullException.ThrowIfNull(border);\n\n        if (safe && border.SafeBorder != null)\n        {\n            border = border.SafeBorder;\n        }\n\n        return border;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/TreeGuide.Known.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents tree guide lines.\n/// </summary>\npublic abstract partial class TreeGuide\n{\n    /// <summary>\n    /// Gets an <see cref=\"AsciiTreeGuide\"/> instance.\n    /// </summary>\n    public static TreeGuide Ascii { get; } = new AsciiTreeGuide();\n\n    /// <summary>\n    /// Gets a <see cref=\"LineTreeGuide\"/> instance.\n    /// </summary>\n    public static TreeGuide Line { get; } = new LineTreeGuide();\n\n    /// <summary>\n    /// Gets a <see cref=\"DoubleLineTreeGuide\"/> instance.\n    /// </summary>\n    public static TreeGuide DoubleLine { get; } = new DoubleLineTreeGuide();\n\n    /// <summary>\n    /// Gets a <see cref=\"BoldLineTreeGuide\"/> instance.\n    /// </summary>\n    public static TreeGuide BoldLine { get; } = new BoldLineTreeGuide();\n}"
  },
  {
    "path": "src/Spectre.Console/TreeGuide.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents tree guide lines.\n/// </summary>\npublic abstract partial class TreeGuide\n{\n    /// <summary>\n    /// Gets the safe guide lines or <c>null</c> if none exist.\n    /// </summary>\n    public virtual TreeGuide? SafeTreeGuide { get; }\n\n    /// <summary>\n    /// Get the set of characters used to render the corresponding <see cref=\"TreeGuidePart\"/>.\n    /// </summary>\n    /// <param name=\"part\">The part of the tree to get rendering string for.</param>\n    /// <returns>Rendering string for the tree part.</returns>\n    public abstract string GetPart(TreeGuidePart part);\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TreeGuide\"/>.\n/// </summary>\npublic static class TreeGuideExtensions\n{\n    /// <summary>\n    /// Gets the safe border for a border.\n    /// </summary>\n    /// <param name=\"guide\">The tree guide to get the safe version for.</param>\n    /// <param name=\"safe\">Whether or not to return the safe border.</param>\n    /// <returns>The safe border if one exist, otherwise the original border.</returns>\n    public static TreeGuide GetSafeTreeGuide(this TreeGuide guide, bool safe)\n    {\n        ArgumentNullException.ThrowIfNull(guide);\n\n        if (safe && guide.SafeTreeGuide != null)\n        {\n            return guide.SafeTreeGuide;\n        }\n\n        return guide;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/ValidationResult.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a validation result.\n/// </summary>\npublic sealed class ValidationResult\n{\n    /// <summary>\n    /// Gets a value indicating whether or not validation was successful.\n    /// </summary>\n    public bool Successful { get; }\n\n    /// <summary>\n    /// Gets the validation error message.\n    /// </summary>\n    public string? Message { get; }\n\n    private ValidationResult(bool successful, string? message)\n    {\n        Successful = successful;\n        Message = message;\n    }\n\n    /// <summary>\n    /// Returns a <see cref=\"ValidationResult\"/> representing successful validation.\n    /// </summary>\n    /// <returns>The validation result.</returns>\n    public static ValidationResult Success()\n    {\n        return new ValidationResult(true, null);\n    }\n\n    /// <summary>\n    /// Returns a <see cref=\"ValidationResult\"/> representing a validation error.\n    /// </summary>\n    /// <param name=\"message\">The validation error message, or <c>null</c> to show the default validation error message.</param>\n    /// <returns>The validation result.</returns>\n    public static ValidationResult Error(string? message = null)\n    {\n        return new ValidationResult(false, message);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/VerticalAlignment.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents vertical alignment.\n/// </summary>\npublic enum VerticalAlignment\n{\n    /// <summary>\n    /// Top aligned.\n    /// </summary>\n    Top,\n\n    /// <summary>\n    /// Middle aligned.\n    /// </summary>\n    Middle,\n\n    /// <summary>\n    /// Bottom aligned.\n    /// </summary>\n    Bottom,\n}"
  },
  {
    "path": "src/Spectre.Console/VerticalOverflow.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents vertical overflow.\n/// </summary>\npublic enum VerticalOverflow\n{\n    /// <summary>\n    /// Crop overflow.\n    /// </summary>\n    Crop = 0,\n\n    /// <summary>\n    /// Add an ellipsis at the end.\n    /// </summary>\n    Ellipsis = 1,\n\n    /// <summary>\n    /// Do not do anything about overflow.\n    /// </summary>\n    Visible = 2,\n}"
  },
  {
    "path": "src/Spectre.Console/VerticalOverflowCropping.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represent vertical overflow cropping.\n/// </summary>\npublic enum VerticalOverflowCropping\n{\n    /// <summary>\n    /// Crops the top.\n    /// </summary>\n    Top = 0,\n\n    /// <summary>\n    /// Crops the bottom.\n    /// </summary>\n    Bottom = 1,\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Align.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a renderable used to align content.\n/// </summary>\npublic sealed class Align : Renderable\n{\n    private readonly IRenderable _renderable;\n\n    /// <summary>\n    /// Gets or sets the horizontal alignment.\n    /// </summary>\n    public HorizontalAlignment Horizontal { get; set; } = HorizontalAlignment.Left;\n\n    /// <summary>\n    /// Gets or sets the vertical alignment.\n    /// </summary>\n    public VerticalAlignment? Vertical { get; set; }\n\n    /// <summary>\n    /// Gets or sets the width.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets the height.\n    /// </summary>\n    public int? Height { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Align\"/> class.\n    /// </summary>\n    /// <param name=\"renderable\">The renderable to align.</param>\n    /// <param name=\"horizontal\">The horizontal alignment.</param>\n    /// <param name=\"vertical\">The vertical alignment, or <c>null</c> if none.</param>\n    public Align(IRenderable renderable, HorizontalAlignment horizontal, VerticalAlignment? vertical = null)\n    {\n        _renderable = renderable ?? throw new ArgumentNullException(nameof(renderable));\n\n        Horizontal = horizontal;\n        Vertical = vertical;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Align\"/> class that is left aligned.\n    /// </summary>\n    /// <param name=\"renderable\">The <see cref=\"IRenderable\"/> to align.</param>\n    /// <param name=\"vertical\">The vertical alignment, or <c>null</c> if none.</param>\n    /// <returns>A new <see cref=\"Align\"/> object.</returns>\n    public static Align Left(IRenderable renderable, VerticalAlignment? vertical = null)\n    {\n        return new Align(renderable, HorizontalAlignment.Left, vertical);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Align\"/> class that is center aligned.\n    /// </summary>\n    /// <param name=\"renderable\">The <see cref=\"IRenderable\"/> to align.</param>\n    /// <param name=\"vertical\">The vertical alignment, or <c>null</c> if none.</param>\n    /// <returns>A new <see cref=\"Align\"/> object.</returns>\n    public static Align Center(IRenderable renderable, VerticalAlignment? vertical = null)\n    {\n        return new Align(renderable, HorizontalAlignment.Center, vertical);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Align\"/> class that is right aligned.\n    /// </summary>\n    /// <param name=\"renderable\">The <see cref=\"IRenderable\"/> to align.</param>\n    /// <param name=\"vertical\">The vertical alignment, or <c>null</c> if none.</param>\n    /// <returns>A new <see cref=\"Align\"/> object.</returns>\n    public static Align Right(IRenderable renderable, VerticalAlignment? vertical = null)\n    {\n        return new Align(renderable, HorizontalAlignment.Right, vertical);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var rendered = _renderable.Render(options with { Height = null }, maxWidth);\n        var lines = Segment.SplitLines(rendered);\n\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        var height = Height ?? options.Height;\n\n        var blank = new SegmentLine([new Segment(new string(' ', width))]);\n\n        // Align vertically\n        if (Vertical != null && height != null)\n        {\n            switch (Vertical)\n            {\n                case VerticalAlignment.Top:\n                    {\n                        var diff = height - lines.Count;\n                        for (var i = 0; i < diff; i++)\n                        {\n                            lines.Add(blank);\n                        }\n\n                        break;\n                    }\n\n                case VerticalAlignment.Middle:\n                    {\n                        var top = (height - lines.Count) / 2;\n                        var bottom = height - top - lines.Count;\n\n                        for (var i = 0; i < top; i++)\n                        {\n                            lines.Insert(0, blank);\n                        }\n\n                        for (var i = 0; i < bottom; i++)\n                        {\n                            lines.Add(blank);\n                        }\n\n                        break;\n                    }\n\n                case VerticalAlignment.Bottom:\n                    {\n                        var diff = height - lines.Count;\n                        for (var i = 0; i < diff; i++)\n                        {\n                            lines.Insert(0, blank);\n                        }\n\n                        break;\n                    }\n\n                default:\n                    throw new NotSupportedException(\"Unknown vertical alignment\");\n            }\n        }\n\n        // Align horizontally\n        foreach (var line in lines)\n        {\n            Aligner.AlignHorizontally(line, Horizontal, width);\n        }\n\n        return new SegmentLineEnumerator(lines);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Align\"/>.\n/// </summary>\npublic static class AlignExtensions\n{\n    /// <summary>\n    /// Sets the width.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <param name=\"width\">The width, or <c>null</c> for no explicit width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align Width(this Align align, int? width)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Width = width;\n        return align;\n    }\n\n    /// <summary>\n    /// Sets the height.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <param name=\"height\">The height, or <c>null</c> for no explicit height.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align Height(this Align align, int? height)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Height = height;\n        return align;\n    }\n\n    /// <summary>\n    /// Sets the vertical alignment.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <param name=\"vertical\">The vertical alignment, or <c>null</c> for no vertical alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align VerticalAlignment(this Align align, VerticalAlignment? vertical)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Vertical = vertical;\n        return align;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"Align\"/> object to be top aligned.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align TopAligned(this Align align)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Vertical = Console.VerticalAlignment.Top;\n        return align;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"Align\"/> object to be middle aligned.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align MiddleAligned(this Align align)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Vertical = Console.VerticalAlignment.Middle;\n        return align;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"Align\"/> object to be bottom aligned.\n    /// </summary>\n    /// <param name=\"align\">The <see cref=\"Align\"/> object.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Align BottomAligned(this Align align)\n    {\n        ArgumentNullException.ThrowIfNull(align);\n\n        align.Vertical = Console.VerticalAlignment.Bottom;\n        return align;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Calendar.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable calendar.\n/// </summary>\npublic sealed class Calendar : JustInTimeRenderable, IHasCulture, IHasTableBorder\n{\n    private const int NumberOfWeekDays = 7;\n    private const int ExpectedRowCount = 6;\n\n    private readonly ListWithCallback<CalendarEvent> _calendarEvents;\n\n    private int _year;\n    private int _month;\n    private int _day;\n    private TableBorder _border;\n    private bool _useSafeBorder;\n    private Style? _borderStyle;\n    private CultureInfo? _culture;\n    private Style _highlightStyle;\n    private bool _showHeader;\n    private Style? _headerStyle;\n\n    /// <summary>\n    /// Gets or sets the calendar year.\n    /// </summary>\n    public int Year\n    {\n        get => _year;\n        set => MarkAsDirty(() => _year = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the calendar month.\n    /// </summary>\n    public int Month\n    {\n        get => _month;\n        set => MarkAsDirty(() => _month = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the calendar day.\n    /// </summary>\n    public int Day\n    {\n        get => _day;\n        set => MarkAsDirty(() => _day = value);\n    }\n\n    /// <inheritdoc/>\n    public TableBorder Border\n    {\n        get => _border;\n        set => MarkAsDirty(() => _border = value);\n    }\n\n    /// <inheritdoc/>\n    public bool UseSafeBorder\n    {\n        get => _useSafeBorder;\n        set => MarkAsDirty(() => _useSafeBorder = value);\n    }\n\n    /// <inheritdoc/>\n    public Style? BorderStyle\n    {\n        get => _borderStyle;\n        set => MarkAsDirty(() => _borderStyle = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the calendar's <see cref=\"CultureInfo\"/>.\n    /// </summary>\n    public CultureInfo? Culture\n    {\n        get => _culture;\n        set => MarkAsDirty(() => _culture = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the calendar's highlight <see cref=\"Style\"/>.\n    /// </summary>\n    public Style HighlightStyle\n    {\n        get => _highlightStyle;\n        set => MarkAsDirty(() => _highlightStyle = value);\n    }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the calendar header should be shown.\n    /// </summary>\n    public bool ShowHeader\n    {\n        get => _showHeader;\n        set => MarkAsDirty(() => _showHeader = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the header style.\n    /// </summary>\n    public Style? HeaderStyle\n    {\n        get => _headerStyle;\n        set => MarkAsDirty(() => _headerStyle = value);\n    }\n\n    /// <summary>\n    /// Gets a list containing all calendar events.\n    /// </summary>\n    public IList<CalendarEvent> CalendarEvents => _calendarEvents;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Calendar\"/> class.\n    /// </summary>\n    /// <param name=\"date\">The calendar date.</param>\n    public Calendar(DateTime date)\n        : this(date.Year, date.Month, date.Day)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Calendar\"/> class.\n    /// </summary>\n    /// <param name=\"year\">The calendar year.</param>\n    /// <param name=\"month\">The calendar month.</param>\n    public Calendar(int year, int month)\n        : this(year, month, 1)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Calendar\"/> class.\n    /// </summary>\n    /// <param name=\"year\">The calendar year.</param>\n    /// <param name=\"month\">The calendar month.</param>\n    /// <param name=\"day\">The calendar day.</param>\n    public Calendar(int year, int month, int day)\n    {\n        _year = year;\n        _month = month;\n        _day = day;\n        _border = TableBorder.Square;\n        _useSafeBorder = true;\n        _borderStyle = null;\n        _culture = CultureInfo.InvariantCulture;\n        _highlightStyle = Color.Blue;\n        _showHeader = true;\n        _calendarEvents = new ListWithCallback<CalendarEvent>(MarkAsDirty);\n    }\n\n    /// <inheritdoc/>\n    protected override IRenderable Build()\n    {\n        var culture = Culture ?? CultureInfo.InvariantCulture;\n\n        var table = new Table\n        {\n            Border = _border,\n            UseSafeBorder = _useSafeBorder,\n            BorderStyle = _borderStyle,\n        };\n\n        if (ShowHeader)\n        {\n            var heading = new DateTime(Year, Month, Day).ToString(\"Y\", culture).EscapeMarkup();\n            table.Title = new TableTitle(heading, HeaderStyle);\n        }\n\n        // Add columns\n        foreach (var order in GetWeekdays())\n        {\n            table.AddColumn(new TableColumn(order.GetAbbreviatedDayName(culture)));\n        }\n\n        var row = new List<IRenderable>();\n\n        var currentDay = 1;\n        var weekday = culture.DateTimeFormat.FirstDayOfWeek;\n        var weekdays = BuildWeekDayTable();\n\n        var daysInMonth = DateTime.DaysInMonth(Year, Month);\n        while (currentDay <= daysInMonth)\n        {\n            if (weekdays[currentDay - 1] == weekday)\n            {\n                var todayEvent = _calendarEvents.LastOrDefault(e => e.Month == Month && e.Day == currentDay);\n                if (todayEvent != null)\n                {\n                    row.Add(new Markup(currentDay.ToString(CultureInfo.InvariantCulture) + \"*\",\n                        todayEvent.CustomHighlightStyle ?? _highlightStyle));\n                }\n                else\n                {\n                    row.Add(new Text(currentDay.ToString(CultureInfo.InvariantCulture)));\n                }\n\n                currentDay++;\n            }\n            else\n            {\n                // Add empty cell\n                row.Add(Text.Empty);\n            }\n\n            if (row.Count == NumberOfWeekDays)\n            {\n                // Flush row\n                table.AddRow(row.ToArray());\n                row.Clear();\n            }\n\n            weekday = weekday.GetNextWeekDay();\n        }\n\n        if (row.Count > 0)\n        {\n            // Flush row\n            table.AddRow(row.ToArray());\n            row.Clear();\n        }\n\n        // We want all calendars to have the same height.\n        if (table.Rows.Count < ExpectedRowCount)\n        {\n            var diff = Math.Max(0, ExpectedRowCount - table.Rows.Count);\n            for (var i = 0; i < diff; i++)\n            {\n                table.AddEmptyRow();\n            }\n        }\n\n        return table;\n    }\n\n    private DayOfWeek[] GetWeekdays()\n    {\n        var culture = Culture ?? CultureInfo.InvariantCulture;\n\n        var days = new DayOfWeek[7];\n        days[0] = culture.DateTimeFormat.FirstDayOfWeek;\n        for (var i = 1; i < 7; i++)\n        {\n            days[i] = days[i - 1].GetNextWeekDay();\n        }\n\n        return days;\n    }\n\n    private DayOfWeek[] BuildWeekDayTable()\n    {\n        var result = new List<DayOfWeek>();\n        for (var day = 0; day < DateTime.DaysInMonth(Year, Month); day++)\n        {\n            result.Add(new DateTime(Year, Month, day + 1).DayOfWeek);\n        }\n\n        return result.ToArray();\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Calendar\"/>.\n/// </summary>\npublic static class CalendarExtensions\n{\n    /// <summary>\n    /// Adds a calendar event.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar to add the calendar event to.</param>\n    /// <param name=\"date\">The calendar event date.</param>\n    /// <param name=\"customEventHighlightStyle\">The calendar event custom highlight style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar AddCalendarEvent(this Calendar calendar, DateTime date,\n        Style? customEventHighlightStyle = null)\n    {\n        return AddCalendarEvent(calendar, string.Empty, date.Year, date.Month, date.Day, customEventHighlightStyle);\n    }\n\n    /// <summary>\n    /// Adds a calendar event.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar to add the calendar event to.</param>\n    /// <param name=\"description\">The calendar event description.</param>\n    /// <param name=\"date\">The calendar event date.</param>\n    /// <param name=\"customEventHighlightStyle\">The calendar event custom highlight style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar AddCalendarEvent(this Calendar calendar, string description, DateTime date,\n        Style? customEventHighlightStyle = null)\n    {\n        return AddCalendarEvent(calendar, description, date.Year, date.Month, date.Day, customEventHighlightStyle);\n    }\n\n    /// <summary>\n    /// Adds a calendar event.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar to add the calendar event to.</param>\n    /// <param name=\"year\">The year of the calendar event.</param>\n    /// <param name=\"month\">The month of the calendar event.</param>\n    /// <param name=\"day\">The day of the calendar event.</param>\n    /// <param name=\"customEventHighlightStyle\">The calendar event custom highlight style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar AddCalendarEvent(this Calendar calendar, int year, int month, int day,\n        Style? customEventHighlightStyle = null)\n    {\n        return AddCalendarEvent(calendar, string.Empty, year, month, day, customEventHighlightStyle);\n    }\n\n    /// <summary>\n    /// Adds a calendar event.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar.</param>\n    /// <param name=\"description\">The calendar event description.</param>\n    /// <param name=\"year\">The year of the calendar event.</param>\n    /// <param name=\"month\">The month of the calendar event.</param>\n    /// <param name=\"day\">The day of the calendar event.</param>\n    /// <param name=\"customEventHighlightStyle\">The calendar event custom highlight style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar AddCalendarEvent(this Calendar calendar, string description, int year, int month, int day,\n        Style? customEventHighlightStyle = null)\n    {\n        ArgumentNullException.ThrowIfNull(calendar);\n\n        calendar.CalendarEvents.Add(new CalendarEvent(description, year, month, day, customEventHighlightStyle));\n        return calendar;\n    }\n\n    /// <summary>\n    /// Sets the calendar's highlight <see cref=\"Style\"/>.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar.</param>\n    /// <param name=\"style\">The default highlight style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar HighlightStyle(this Calendar calendar, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(calendar);\n\n        calendar.HighlightStyle = style ?? Style.Plain;\n        return calendar;\n    }\n\n    /// <summary>\n    /// Sets the calendar's header <see cref=\"Style\"/>.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar.</param>\n    /// <param name=\"style\">The header style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar HeaderStyle(this Calendar calendar, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(calendar);\n\n        calendar.HeaderStyle = style ?? Style.Plain;\n        return calendar;\n    }\n\n    /// <summary>\n    /// Shows the calendar header.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar ShowHeader(this Calendar calendar)\n    {\n        ArgumentNullException.ThrowIfNull(calendar);\n\n        calendar.ShowHeader = true;\n        return calendar;\n    }\n\n    /// <summary>\n    /// Hides the calendar header.\n    /// </summary>\n    /// <param name=\"calendar\">The calendar.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Calendar HideHeader(this Calendar calendar)\n    {\n        ArgumentNullException.ThrowIfNull(calendar);\n\n        calendar.ShowHeader = false;\n        return calendar;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/CalendarEvent.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a calendar event.\n/// </summary>\npublic sealed class CalendarEvent\n{\n    /// <summary>\n    /// Gets the description of the calendar event.\n    /// </summary>\n    public string Description { get; }\n\n    /// <summary>\n    /// Gets the year of the calendar event.\n    /// </summary>\n    public int Year { get; }\n\n    /// <summary>\n    /// Gets the month of the calendar event.\n    /// </summary>\n    public int Month { get; }\n\n    /// <summary>\n    /// Gets the day of the calendar event.\n    /// </summary>\n    public int Day { get; }\n\n    /// <summary>\n    /// Gets the custom highlight style of the calendar event.\n    /// </summary>\n    public Style? CustomHighlightStyle { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CalendarEvent\"/> class.\n    /// </summary>\n    /// <param name=\"year\">The year of the calendar event.</param>\n    /// <param name=\"month\">The month of the calendar event.</param>\n    /// <param name=\"day\">The day of the calendar event.</param>\n    /// <param name=\"customHighlightStyle\">The custom highlight style of the calendar event.</param>\n    public CalendarEvent(int year, int month, int day, Style? customHighlightStyle = null)\n        : this(string.Empty, year, month, day, customHighlightStyle)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"CalendarEvent\"/> class.\n    /// </summary>\n    /// <param name=\"description\">The calendar event description.</param>\n    /// <param name=\"year\">The year of the calendar event.</param>\n    /// <param name=\"month\">The month of the calendar event.</param>\n    /// <param name=\"day\">The day of the calendar event.</param>\n    /// <param name=\"customHighlightStyle\">The custom highlight style of the calendar event.</param>\n    public CalendarEvent(string description, int year, int month, int day, Style? customHighlightStyle = null)\n    {\n        Description = description ?? string.Empty;\n        Year = year;\n        Month = month;\n        Day = day;\n        CustomHighlightStyle = customHighlightStyle;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Canvas.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a renderable canvas.\n/// </summary>\npublic sealed class Canvas : Renderable\n{\n    private readonly Color?[,] _pixels;\n\n    private const string Transparent = \" \";\n    private const string DoubleTransparent = \"  \";\n    private const string UpperHalfBlock = \"▀\";\n    private const string LowerHalfBlock = \"▄\";\n\n    /// <summary>\n    /// Gets the width of the canvas.\n    /// </summary>\n    public int Width { get; }\n\n    /// <summary>\n    /// Gets the height of the canvas.\n    /// </summary>\n    public int Height { get; }\n\n    /// <summary>\n    /// Gets or sets the render width of the canvas.\n    /// </summary>\n    public int? MaxWidth { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// to scale the canvas when rendering.\n    /// </summary>\n    public bool Scale { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the pixel width.\n    /// </summary>\n    [Obsolete(\"Not used anymore. Will be removed in future update.\")]\n    public int PixelWidth { get; set; } = 2;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Canvas\"/> class.\n    /// </summary>\n    /// <param name=\"width\">The canvas width.</param>\n    /// <param name=\"height\">The canvas height.</param>\n    public Canvas(int width, int height)\n    {\n        if (width < 1)\n        {\n            throw new ArgumentException(\"Must be > 1\", nameof(width));\n        }\n\n        if (height < 1)\n        {\n            throw new ArgumentException(\"Must be > 1\", nameof(height));\n        }\n\n        Width = width;\n        Height = height;\n\n        _pixels = new Color?[Width, Height];\n    }\n\n    /// <summary>\n    /// Sets a pixel with the specified color in the canvas at the specified location.\n    /// </summary>\n    /// <param name=\"x\">The X coordinate for the pixel.</param>\n    /// <param name=\"y\">The Y coordinate for the pixel.</param>\n    /// <param name=\"color\">The pixel color.</param>\n    /// <returns>The same <see cref=\"Canvas\"/> instance so that multiple calls can be chained.</returns>\n    public Canvas SetPixel(int x, int y, Color color)\n    {\n        _pixels[x, y] = color;\n        return this;\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var pixelWidth = options.Unicode ? 1 : 2;\n        var width = MaxWidth ?? Width;\n\n        return maxWidth < width * pixelWidth\n            ? new Measurement(maxWidth, maxWidth)\n            : new Measurement(width * pixelWidth, width * pixelWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        return options.Unicode\n            ? RenderUnicode(maxWidth)\n            : RenderNonUnicode(maxWidth);\n    }\n\n    private IEnumerable<Segment> RenderUnicode(int maxWidth)\n    {\n        var pixels = _pixels;\n        var width = Width;\n        var height = Height;\n\n        // Got a max width?\n        if (MaxWidth != null)\n        {\n            height = (int)(height * ((float)MaxWidth.Value) / Width);\n            width = MaxWidth.Value;\n        }\n\n        // Exceed the max width when we take pixel width into account?\n        if (width > maxWidth)\n        {\n            height = (int)(height * (maxWidth / (float)(width)));\n            width = maxWidth;\n\n            if (height == 0)\n            {\n                // If it's not possible to scale the canvas sufficiently, it's too small to render.\n                yield break;\n            }\n        }\n\n        // Need to rescale the pixel buffer?\n        if (Scale && (width != Width || height != Height))\n        {\n            pixels = ScaleDown(width, height);\n        }\n\n        for (var y = 0; y < height; y += 2)\n        {\n            for (var x = 0; x < width; x++)\n            {\n                var upper = pixels[x, y];\n                var lower = y < height - 1 ? pixels[x, y + 1] : null;\n\n                if (upper == null && lower == null)\n                {\n                    // None visible\n                    yield return new Segment(Transparent);\n                }\n                else if (upper != null && lower != null)\n                {\n                    // Both pixels visible\n                    yield return new Segment(\n                        UpperHalfBlock, new Style(\n                            foreground: upper,\n                            background: lower));\n                }\n                else if (upper != null)\n                {\n                    // Upper visible\n                    yield return new Segment(\n                        UpperHalfBlock, new Style(\n                            foreground: upper));\n                }\n                else if (lower != null)\n                {\n                    // Lower visible\n                    yield return new Segment(\n                        LowerHalfBlock, new Style(\n                            foreground: lower));\n                }\n            }\n\n            yield return Segment.LineBreak;\n        }\n    }\n\n    private IEnumerable<Segment> RenderNonUnicode(int maxWidth)\n    {\n        var pixels = _pixels;\n        var width = Width;\n        var height = Height;\n\n        // Got a max width?\n        if (MaxWidth != null)\n        {\n            height = (int)(height * ((float)MaxWidth.Value) / Width);\n            width = MaxWidth.Value;\n        }\n\n        // Exceed the max width when we take pixel width into account?\n        if (width * 2 > maxWidth)\n        {\n            height = (int)(height * (maxWidth / (float)(width * 2)));\n            width = maxWidth / 2;\n\n            if (height == 0)\n            {\n                // If it's not possible to scale the canvas sufficiently, it's too small to render.\n                yield break;\n            }\n        }\n\n        // Need to rescale the pixel buffer?\n        if (Scale && (width != Width || height != Height))\n        {\n            pixels = ScaleDown(width, height);\n        }\n\n        for (var y = 0; y < height; y++)\n        {\n            for (var x = 0; x < width; x++)\n            {\n                var color = pixels[x, y];\n                if (color != null)\n                {\n                    yield return new Segment(DoubleTransparent, new Style(background: color));\n                }\n                else\n                {\n                    yield return new Segment(DoubleTransparent);\n                }\n            }\n\n            yield return Segment.LineBreak;\n        }\n    }\n\n    private Color?[,] ScaleDown(int newWidth, int newHeight)\n    {\n        var buffer = new Color?[newWidth, newHeight];\n        var xRatio = ((Width << 16) / newWidth) + 1;\n        var yRatio = ((Height << 16) / newHeight) + 1;\n\n        for (var i = 0; i < newHeight; i++)\n        {\n            for (var j = 0; j < newWidth; j++)\n            {\n                buffer[j, i] = _pixels[(j * xRatio) >> 16, (i * yRatio) >> 16];\n            }\n        }\n\n        return buffer;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BarChart.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable (horizontal) bar chart.\n/// </summary>\npublic sealed class BarChart : Renderable, IHasCulture\n{\n    /// <summary>\n    /// Gets the bar chart data.\n    /// </summary>\n    public List<IBarChartItem> Data { get; }\n\n    /// <summary>\n    /// Gets or sets the width of the bar chart.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets the bar chart label.\n    /// </summary>\n    public string? Label { get; set; }\n\n    /// <summary>\n    /// Gets or sets the bar chart label alignment.\n    /// </summary>\n    public Justify? LabelAlignment { get; set; } = Justify.Center;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// values should be shown next to each bar.\n    /// </summary>\n    public bool ShowValues { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the culture that's used to format values.\n    /// </summary>\n    /// <remarks>Defaults to invariant culture.</remarks>\n    public CultureInfo? Culture { get; set; }\n\n    /// <summary>\n    /// Gets or sets the fixed max value for a bar chart.\n    /// </summary>\n    /// <remarks>Defaults to null, which corresponds to largest value in chart.</remarks>\n    public double? MaxValue { get; set; }\n\n    /// <summary>\n    /// Gets or sets the function used to format the values of the bar chart.\n    /// </summary>\n    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BarChart\"/> class.\n    /// </summary>\n    public BarChart()\n    {\n        Data = [];\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        return new Measurement(width, width);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        var maxValue = Math.Max(MaxValue ?? 0d, Data.Max(item => item.Value));\n\n        var grid = new Grid();\n        grid.Collapse();\n        grid.AddColumn(new GridColumn().PadRight(2).RightAligned());\n        grid.AddColumn(new GridColumn().PadLeft(0));\n        grid.Width = width;\n\n        if (!string.IsNullOrWhiteSpace(Label))\n        {\n            grid.AddRow(Text.Empty, new Markup(Label).Justify(LabelAlignment));\n        }\n\n        foreach (var item in Data)\n        {\n            grid.AddRow(\n                new Markup(item.Label),\n                new ProgressBar()\n                {\n                    Value = item.Value,\n                    MaxValue = maxValue,\n                    ShowRemaining = false,\n                    CompletedStyle = new Style().Foreground(item.Color ?? Color.Default),\n                    FinishedStyle = new Style().Foreground(item.Color ?? Color.Default),\n                    UnicodeBar = '█',\n                    AsciiBar = '█',\n                    ShowValue = ShowValues,\n                    Culture = Culture,\n                    ValueFormatter = ValueFormatter,\n                });\n        }\n\n        return ((IRenderable)grid).Render(options, width);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"BarChart\"/>.\n/// </summary>\npublic static class BarChartExtensions\n{\n    /// <summary>\n    /// Adds an item to the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"label\">The item label.</param>\n    /// <param name=\"value\">The item value.</param>\n    /// <param name=\"color\">The item color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart AddItem(this BarChart chart, string label, double value, Color? color = null)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Data.Add(new BarChartItem(label, value, color));\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds an item to the bar chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBarChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"item\">The item.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart AddItem<T>(this BarChart chart, T item)\n        where T : IBarChartItem\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        if (item is BarChartItem barChartItem)\n        {\n            chart.Data.Add(barChartItem);\n        }\n        else\n        {\n            chart.Data.Add(\n                new BarChartItem(\n                    item.Label,\n                    item.Value,\n                    item.Color));\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds multiple items to the bar chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBarChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"items\">The items.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart AddItems<T>(this BarChart chart, IEnumerable<T> items)\n        where T : IBarChartItem\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        ArgumentNullException.ThrowIfNull(items);\n\n        foreach (var item in items)\n        {\n            AddItem(chart, item);\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds multiple items to the bar chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBarChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"items\">The items.</param>\n    /// <param name=\"converter\">The converter that converts instances of <c>T</c> to <see cref=\"BarChartItem\"/>.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart AddItems<T>(this BarChart chart, IEnumerable<T> items, Func<T, BarChartItem> converter)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        ArgumentNullException.ThrowIfNull(items);\n\n        ArgumentNullException.ThrowIfNull(converter);\n\n        foreach (var item in items)\n        {\n            chart.Data.Add(converter(item));\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the value formatter for the bar chart using culture info.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"func\">The value formatter function with culture info.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart UseValueFormatter(this BarChart chart, Func<double, CultureInfo, string>? func)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueFormatter = func;\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the value formatter for the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"func\">The value formatter to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart UseValueFormatter(this BarChart chart, Func<double, string>? func)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueFormatter = func != null\n            ? (value, _) => func(value)\n            : null;\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the width of the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"width\">The bar chart width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart Width(this BarChart chart, int? width)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Width = width;\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the label of the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"label\">The bar chart label.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart Label(this BarChart chart, string? label)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Label = label;\n        return chart;\n    }\n\n    /// <summary>\n    /// Shows values next to each bar in the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart ShowValues(this BarChart chart)\n    {\n        return ShowValues(chart, true);\n    }\n\n    /// <summary>\n    /// Hides values next to each bar in the bar chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart HideValues(this BarChart chart)\n    {\n        return ShowValues(chart, false);\n    }\n\n    /// <summary>\n    /// Sets whether or not values should be shown\n    /// next to each bar.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"show\">Whether or not values should be shown next to each bar.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart ShowValues(this BarChart chart, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ShowValues = show;\n        return chart;\n    }\n\n    /// <summary>\n    /// Aligns the label to the left.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart LeftAlignLabel(this BarChart chart)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.LabelAlignment = Justify.Left;\n        return chart;\n    }\n\n    /// <summary>\n    /// Centers the label.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart CenterLabel(this BarChart chart)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.LabelAlignment = Justify.Center;\n        return chart;\n    }\n\n    /// <summary>\n    /// Aligns the label to the right.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart RightAlignLabel(this BarChart chart)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.LabelAlignment = Justify.Right;\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the max fixed value for the chart.\n    /// </summary>\n    /// <param name=\"chart\">The bar chart.</param>\n    /// <param name=\"maxValue\">Max value for the chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BarChart WithMaxValue(this BarChart chart, double maxValue)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.MaxValue = maxValue;\n        return chart;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BarChartItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// An item that's shown in a bar chart.\n/// </summary>\npublic sealed class BarChartItem : IBarChartItem\n{\n    /// <summary>\n    /// Gets the item label.\n    /// </summary>\n    public string Label { get; }\n\n    /// <summary>\n    /// Gets the item value.\n    /// </summary>\n    public double Value { get; }\n\n    /// <summary>\n    /// Gets the item color.\n    /// </summary>\n    public Color? Color { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BarChartItem\"/> class.\n    /// </summary>\n    /// <param name=\"label\">The item label.</param>\n    /// <param name=\"value\">The item value.</param>\n    /// <param name=\"color\">The item color.</param>\n    public BarChartItem(string label, double value, Color? color = null)\n    {\n        Label = label ?? throw new ArgumentNullException(nameof(label));\n        Value = value;\n        Color = color;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BreakdownBar.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class BreakdownBar : Renderable\n{\n    private readonly List<IBreakdownChartItem> _data;\n\n    public int? Width { get; set; }\n\n    public BreakdownBar(List<IBreakdownChartItem> data)\n    {\n        _data = data ?? throw new ArgumentNullException(nameof(data));\n    }\n\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        return new Measurement(width, width);\n    }\n\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n\n        // Chart\n        var maxValue = _data.Sum(i => i.Value);\n        var items = _data.ToArray();\n        var bars = Ratio.Distribute(width, items.Select(i => Math.Max(0, (int)(width * (i.Value / maxValue)))).ToArray());\n\n        for (var index = 0; index < items.Length; index++)\n        {\n            yield return new Segment(new string('█', bars[index]), new Style(items[index].Color));\n        }\n\n        yield return Segment.LineBreak;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BreakdownChart.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable breakdown chart.\n/// </summary>\npublic sealed class BreakdownChart : Renderable, IHasCulture, IExpandable\n{\n    /// <summary>\n    /// Gets the breakdown chart data.\n    /// </summary>\n    public List<IBreakdownChartItem> Data { get; }\n\n    /// <summary>\n    /// Gets or sets the width of the breakdown chart.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not to show tags.\n    /// </summary>\n    public bool ShowTags { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not to show tag values.\n    /// </summary>\n    public bool ShowTagValues { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the tag value formatter.\n    /// </summary>\n    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }\n\n    /// <summary>\n    /// Gets or sets the Color in which the values will be shown.\n    /// </summary>\n    public Color ValueColor { get; set; } = Color.Grey;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the\n    /// chart and tags should be rendered in compact mode.\n    /// </summary>\n    public bool Compact { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"CultureInfo\"/> to use\n    /// when rendering values.\n    /// </summary>\n    /// <remarks>Defaults to invariant culture.</remarks>\n    public CultureInfo? Culture { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the object should\n    /// expand to the available space. If <c>false</c>, the object's\n    /// width will be auto calculated.\n    /// </summary>\n    public bool Expand { get; set; } = true;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BreakdownChart\"/> class.\n    /// </summary>\n    public BreakdownChart()\n    {\n        Data = [];\n        Culture = CultureInfo.InvariantCulture;\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        return new Measurement(width, width);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n\n        var grid = new Grid().Width(width);\n        grid.AddColumn(new GridColumn().NoWrap());\n\n        // Bar\n        grid.AddRow(new BreakdownBar(Data)\n        {\n            Width = width,\n        });\n\n        if (ShowTags)\n        {\n            if (!Compact)\n            {\n                grid.AddEmptyRow();\n            }\n\n            // Tags\n            grid.AddRow(new BreakdownTags(Data)\n            {\n                Width = width,\n                Culture = Culture,\n                ShowTagValues = ShowTagValues,\n                ValueFormatter = ValueFormatter,\n                ValueColor = ValueColor,\n            });\n        }\n\n        if (!Expand)\n        {\n            grid.Collapse();\n        }\n\n        return ((IRenderable)grid).Render(options, width);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"BreakdownChart\"/>.\n/// </summary>\npublic static class BreakdownChartExtensions\n{\n    /// <summary>\n    /// Adds an item to the breakdown chart.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"label\">The item label.</param>\n    /// <param name=\"value\">The item value.</param>\n    /// <param name=\"color\">The item color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart AddItem(this BreakdownChart chart, string label, double value, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Data.Add(new BreakdownChartItem(label, value, color));\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds an item to the breakdown chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBreakdownChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"item\">The item.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart AddItem<T>(this BreakdownChart chart, T item)\n        where T : IBreakdownChartItem\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        if (item is BreakdownChartItem chartItem)\n        {\n            chart.Data.Add(chartItem);\n        }\n        else\n        {\n            chart.Data.Add(\n                new BreakdownChartItem(\n                    item.Label,\n                    item.Value,\n                    item.Color));\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds multiple items to the breakdown chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBreakdownChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"items\">The items.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart AddItems<T>(this BreakdownChart chart, IEnumerable<T> items)\n        where T : IBreakdownChartItem\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        ArgumentNullException.ThrowIfNull(items);\n\n        foreach (var item in items)\n        {\n            AddItem(chart, item);\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Adds multiple items to the breakdown chart.\n    /// </summary>\n    /// <typeparam name=\"T\">A type that implements <see cref=\"IBarChartItem\"/>.</typeparam>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"items\">The items.</param>\n    /// <param name=\"converter\">The converter that converts instances of <c>T</c> to <see cref=\"IBreakdownChartItem\"/>.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart AddItems<T>(this BreakdownChart chart, IEnumerable<T> items, Func<T, IBreakdownChartItem> converter)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        ArgumentNullException.ThrowIfNull(items);\n\n        ArgumentNullException.ThrowIfNull(converter);\n\n        foreach (var item in items)\n        {\n            chart.Data.Add(converter(item));\n        }\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the width of the breakdown chart.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"width\">The breakdown chart width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart Width(this BreakdownChart chart, int? width)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Width = width;\n        return chart;\n    }\n\n    /// <summary>\n    /// Tags will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"func\">The value formatter to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart UseValueFormatter(this BreakdownChart chart, Func<double, CultureInfo, string>? func)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueFormatter = func;\n        return chart;\n    }\n\n    /// <summary>\n    /// Tags will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"func\">The value formatter to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart UseValueFormatter(this BreakdownChart chart, Func<double, string>? func)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueFormatter = func != null\n            ? (value, _) => func(value)\n            : null;\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Tags will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart ShowPercentage(this BreakdownChart chart)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueFormatter = (value, culture) => string.Format(culture, \"{0}%\", value);\n\n        return chart;\n    }\n\n    /// <summary>\n    /// Tags will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart ShowTags(this BreakdownChart chart)\n    {\n        return ShowTags(chart, true);\n    }\n\n    /// <summary>\n    /// Tags will be not be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart HideTags(this BreakdownChart chart)\n    {\n        return ShowTags(chart, false);\n    }\n\n    /// <summary>\n    /// Sets whether or not tags will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"show\">Whether or not tags will be shown.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart ShowTags(this BreakdownChart chart, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ShowTags = show;\n        return chart;\n    }\n\n    /// <summary>\n    /// Tag values will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart ShowTagValues(this BreakdownChart chart)\n    {\n        return ShowTagValues(chart, true);\n    }\n\n    /// <summary>\n    /// Tag values will be not be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart HideTagValues(this BreakdownChart chart)\n    {\n        return ShowTagValues(chart, false);\n    }\n\n    /// <summary>\n    /// Sets whether or not tag values will be shown.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"show\">Whether or not tag values will be shown.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart ShowTagValues(this BreakdownChart chart, bool show)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ShowTagValues = show;\n        return chart;\n    }\n\n    /// <summary>\n    /// Chart and tags is rendered in compact mode.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart Compact(this BreakdownChart chart)\n    {\n        return Compact(chart, true);\n    }\n\n    /// <summary>\n    /// Chart and tags is rendered in full size mode.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart FullSize(this BreakdownChart chart)\n    {\n        return Compact(chart, false);\n    }\n\n    /// <summary>\n    /// Sets whether or not the chart and tags should be rendered in compact mode.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"compact\">Whether or not the chart and tags should be rendered in compact mode.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart Compact(this BreakdownChart chart, bool compact)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.Compact = compact;\n        return chart;\n    }\n\n    /// <summary>\n    /// Sets the <see cref=\"BreakdownChart.ValueColor\"/>.\n    /// </summary>\n    /// <param name=\"chart\">The breakdown chart.</param>\n    /// <param name=\"color\">The <see cref=\"Color\"/> to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static BreakdownChart WithValueColor(this BreakdownChart chart, Color color)\n    {\n        ArgumentNullException.ThrowIfNull(chart);\n\n        chart.ValueColor = color;\n        return chart;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BreakdownChartItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// An item that's shown in a breakdown chart.\n/// </summary>\npublic sealed class BreakdownChartItem : IBreakdownChartItem\n{\n    /// <summary>\n    /// Gets the item label.\n    /// </summary>\n    public string Label { get; }\n\n    /// <summary>\n    /// Gets the item value.\n    /// </summary>\n    public double Value { get; }\n\n    /// <summary>\n    /// Gets the item color.\n    /// </summary>\n    public Color Color { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"BreakdownChartItem\"/> class.\n    /// </summary>\n    /// <param name=\"label\">The item label.</param>\n    /// <param name=\"value\">The item value.</param>\n    /// <param name=\"color\">The item color.</param>\n    public BreakdownChartItem(string label, double value, Color color)\n    {\n        Label = label ?? throw new ArgumentNullException(nameof(label));\n        Value = value;\n        Color = color;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/BreakdownTags.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class BreakdownTags : Renderable\n{\n    private readonly List<IBreakdownChartItem> _data;\n\n    public int? Width { get; set; }\n    public CultureInfo? Culture { get; set; }\n    public bool ShowTagValues { get; set; } = true;\n    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }\n    public Color ValueColor { get; set; } = Color.Grey;\n\n    public BreakdownTags(List<IBreakdownChartItem> data)\n    {\n        _data = data ?? throw new ArgumentNullException(nameof(data));\n    }\n\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        return new Measurement(width, width);\n    }\n\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var culture = Culture ?? CultureInfo.InvariantCulture;\n\n        var panels = new List<Panel>();\n        foreach (var item in _data)\n        {\n            var panel = new Panel(GetTag(item, culture));\n            panel.Inline = true;\n            panel.Padding = new Padding(0, 0, 2, 0);\n            panel.NoBorder();\n\n            panels.Add(panel);\n        }\n\n        foreach (var segment in ((IRenderable)new Columns(panels).Padding(0, 0)).Render(options, maxWidth))\n        {\n            yield return segment;\n        }\n    }\n\n    private string GetTag(IBreakdownChartItem item, CultureInfo culture)\n    {\n        return string.Format(\n            culture, \"[{0}]■[/] {1}\",\n            item.Color.ToMarkup() ?? \"default\",\n            FormatValue(item, culture)).Trim();\n    }\n\n    private string FormatValue(IBreakdownChartItem item, CultureInfo culture)\n    {\n        var formatter = ValueFormatter ?? DefaultFormatter;\n\n        if (ShowTagValues)\n        {\n            return string.Format(culture, \"{0} [{1}]{2}[/]\",\n                item.Label.EscapeMarkup(),\n                ValueColor.ToMarkup(),\n                formatter(item.Value, culture));\n        }\n\n        return item.Label.EscapeMarkup();\n    }\n\n    private static string DefaultFormatter(double value, CultureInfo culture)\n    {\n        return value.ToString(culture);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/IBarChartItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a bar chart item.\n/// </summary>\npublic interface IBarChartItem\n{\n    /// <summary>\n    /// Gets the item label.\n    /// </summary>\n    string Label { get; }\n\n    /// <summary>\n    /// Gets the item value.\n    /// </summary>\n    double Value { get; }\n\n    /// <summary>\n    /// Gets the item color.\n    /// </summary>\n    Color? Color { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Charts/IBreakdownChartItem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a breakdown chart item.\n/// </summary>\npublic interface IBreakdownChartItem\n{\n    /// <summary>\n    /// Gets the item label.\n    /// </summary>\n    string Label { get; }\n\n    /// <summary>\n    /// Gets the item value.\n    /// </summary>\n    double Value { get; }\n\n    /// <summary>\n    /// Gets the item color.\n    /// </summary>\n    Color Color { get; }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/CircularTreeException.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Indicates that the tree being rendered includes a cycle, and cannot be rendered.\n/// </summary>\npublic sealed class CircularTreeException : Exception\n{\n    internal CircularTreeException(string message)\n        : base(message)\n    {\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Columns.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Renders things in columns.\n/// </summary>\npublic sealed class Columns : Renderable, IPaddable, IExpandable\n{\n    private readonly List<IRenderable> _items;\n\n    /// <inheritdoc/>\n    public Padding? Padding { get; set; } = new Padding(0, 0, 1, 0);\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the columns should\n    /// expand to the available space. If <c>false</c>, the column\n    /// width will be auto calculated. Defaults to <c>true</c>.\n    /// </summary>\n    public bool Expand { get; set; } = true;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Columns\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The items to render as columns.</param>\n    public Columns(params IRenderable[] items)\n        : this((IEnumerable<IRenderable>)items)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Columns\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The items to render as columns.</param>\n    public Columns(IEnumerable<IRenderable> items)\n    {\n        ArgumentNullException.ThrowIfNull(items);\n\n        _items = new List<IRenderable>(items);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Columns\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The items to render.</param>\n    public Columns(IEnumerable<string> items)\n    {\n        ArgumentNullException.ThrowIfNull(items);\n\n        _items = new List<IRenderable>(items.Select(item => new Markup(item)));\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var maxPadding = Math.Max(Padding.GetLeftSafe(), Padding.GetRightSafe());\n\n        var itemWidths = _items.Select(item => item.Measure(options, maxWidth).Max).ToArray();\n        var columnCount = CalculateColumnCount(maxWidth, itemWidths, _items.Count, maxPadding);\n        if (columnCount == 0)\n        {\n            // Temporary work around for extremely small consoles\n            return new Measurement(maxWidth, maxWidth);\n        }\n\n        var rows = _items.Count / Math.Max(columnCount, 1);\n        var greatestWidth = 0;\n        for (var row = 0; row < rows; row += Math.Max(1, columnCount))\n        {\n            var widths = itemWidths.Skip(row * columnCount).Take(columnCount).ToList();\n            var totalWidth = widths.Sum() + (maxPadding * (widths.Count - 1));\n            if (totalWidth > greatestWidth)\n            {\n                greatestWidth = totalWidth;\n            }\n        }\n\n        return new Measurement(greatestWidth, greatestWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var maxPadding = Math.Max(Padding.GetLeftSafe(), Padding.GetRightSafe());\n\n        var itemWidths = _items.Select(item => item.Measure(options, maxWidth).Max).ToArray();\n        var columnCount = CalculateColumnCount(maxWidth, itemWidths, _items.Count, maxPadding);\n        if (columnCount == 0)\n        {\n            // Temporary work around for extremely small consoles\n            columnCount = 1;\n        }\n\n        var table = new Table();\n        table.NoBorder();\n        table.HideHeaders();\n        table.PadRightCell = false;\n\n        if (Expand)\n        {\n            table.Expand();\n        }\n\n        // Add columns\n        for (var index = 0; index < columnCount; index++)\n        {\n            table.AddColumn(new TableColumn(string.Empty)\n            {\n                Padding = Padding,\n                NoWrap = true,\n            });\n        }\n\n        // Add rows\n        for (var start = 0; start < _items.Count; start += columnCount)\n        {\n            table.AddRow(_items.Skip(start).Take(columnCount).ToArray());\n        }\n\n        return ((IRenderable)table).Render(options, maxWidth);\n    }\n\n    // Algorithm borrowed from https://github.com/willmcgugan/rich/blob/master/rich/columns.py\n    private int CalculateColumnCount(int maxWidth, int[] itemWidths, int columnCount, int padding)\n    {\n        var widths = new Dictionary<int, int>();\n        while (columnCount > 1)\n        {\n            var columnIndex = 0;\n            widths.Clear();\n\n            var exceededTotalWidth = false;\n            foreach (var renderableWidth in IterateWidths(itemWidths, columnCount))\n            {\n                widths[columnIndex] = Math.Max(widths.GetValueOrDefault(columnIndex, 0), renderableWidth);\n                var totalWidth = widths.Values.Sum() + (padding * (widths.Count - 1));\n                if (totalWidth > maxWidth)\n                {\n                    columnCount = widths.Count - 1;\n                    exceededTotalWidth = true;\n                    break;\n                }\n                else\n                {\n                    columnIndex = (columnIndex + 1) % columnCount;\n                }\n            }\n\n            if (!exceededTotalWidth)\n            {\n                break;\n            }\n        }\n\n        return columnCount;\n    }\n\n    private IEnumerable<int> IterateWidths(int[] itemWidths, int columnCount)\n    {\n        foreach (var width in itemWidths)\n        {\n            yield return width;\n        }\n\n        if (_items.Count % columnCount != 0)\n        {\n            for (var i = 0; i < columnCount - (_items.Count % columnCount) - 1; i++)\n            {\n                yield return 0;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/ControlCode.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A control code.\n/// </summary>\npublic sealed class ControlCode : Renderable\n{\n    private readonly Segment _segment;\n\n    internal static ControlCode Empty { get; } = new(string.Empty);\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ControlCode\"/> class.\n    /// </summary>\n    /// <param name=\"control\">The control code.</param>\n    public ControlCode(string control)\n    {\n        _segment = Segment.Control(control);\n    }\n\n    /// <summary>\n    /// Creates a new <see cref=\"ControlCode\"/> using a <see cref=\"AnsiWriter\"/>.\n    /// </summary>\n    /// <param name=\"capabilities\">The capabilities.</param>\n    /// <param name=\"action\">The <see cref=\"AnsiWriter\"/> action.</param>\n    /// <returns>A new <see cref=\"ControlCode\"/> instance.</returns>\n    public static ControlCode Create(\n        IReadOnlyCapabilities capabilities,\n        Action<AnsiWriter> action)\n    {\n        ArgumentNullException.ThrowIfNull(capabilities);\n        ArgumentNullException.ThrowIfNull(action);\n\n        return new ControlCode(\n            AnsiStringWriter.Shared.Write(\n                capabilities, action));\n    }\n\n    /// <summary>\n    /// Creates a new <see cref=\"ControlCode\"/> using a <see cref=\"AnsiWriter\"/>.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"action\">The <see cref=\"AnsiWriter\"/> action.</param>\n    /// <returns>A new <see cref=\"ControlCode\"/> instance.</returns>\n    public static ControlCode Create(\n        IAnsiConsole console,\n        Action<AnsiWriter> action)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n        ArgumentNullException.ThrowIfNull(action);\n\n        return new ControlCode(\n            AnsiStringWriter.Shared.Write(\n                console.Profile.Capabilities, action));\n    }\n\n    /// <inheritdoc />\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        return new Measurement(0, 0);\n    }\n\n    /// <inheritdoc />\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        if (options.Ansi)\n        {\n            yield return _segment;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/ExceptionFormat.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents how an exception is formatted.\n/// </summary>\n[Flags]\npublic enum ExceptionFormats\n{\n    /// <summary>\n    /// The default formatting.\n    /// </summary>\n    Default = 0,\n\n    /// <summary>\n    /// Whether or not paths should be shortened.\n    /// </summary>\n    ShortenPaths = 1,\n\n    /// <summary>\n    /// Whether or not types should be shortened.\n    /// </summary>\n    ShortenTypes = 2,\n\n    /// <summary>\n    /// Whether or not methods should be shortened.\n    /// </summary>\n    ShortenMethods = 4,\n\n    /// <summary>\n    /// Whether or not to show paths as links in the terminal.\n    /// </summary>\n    ShowLinks = 8,\n\n    /// <summary>\n    /// Shortens everything that can be shortened.\n    /// </summary>\n    ShortenEverything = ShortenMethods | ShortenTypes | ShortenPaths,\n\n    /// <summary>\n    /// Whether or not to show the exception stack trace.\n    /// </summary>\n    NoStackTrace = 16,\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/ExceptionFormatter.cs",
    "content": "namespace Spectre.Console;\n\n// ExceptionFormatter relies heavily on reflection of types unknown until runtime.\n[UnconditionalSuppressMessage(\"AssemblyLoadTrimming\", \"IL2026:RequiresUnreferencedCode\")]\n[UnconditionalSuppressMessage(\"AssemblyLoadTrimming\", \"IL2070:RequiresUnreferencedCode\")]\n[UnconditionalSuppressMessage(\"AssemblyLoadTrimming\", \"IL2075:RequiresUnreferencedCode\")]\n[UnconditionalSuppressMessage(\"AssemblyLoadTrimming\", \"IL3050:RequiresUnreferencedCode\")]\ninternal static class ExceptionFormatter\n{\n    public const string AotWarning = \"ExceptionFormatter is currently not supported for AOT.\";\n\n    public static IRenderable Format(Exception exception, ExceptionSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(exception);\n\n        return GetException(exception, settings);\n    }\n\n    private static IRenderable GetException(Exception exception, ExceptionSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(exception);\n\n        return new Rows(GetMessage(exception, settings), GetStackFrames(exception, settings)).Expand();\n    }\n\n    private static Markup GetMessage(Exception ex, ExceptionSettings settings)\n    {\n        var shortenTypes = (settings.Format & ExceptionFormats.ShortenTypes) != 0;\n        var exceptionType = ex.GetType();\n        var exceptionTypeName = TypeNameHelper.GetTypeDisplayName(exceptionType, fullName: !shortenTypes, includeSystemNamespace: true);\n        var type = new StringBuilder();\n        Emphasize(type, exceptionTypeName, ['.'], settings.Style.Exception, shortenTypes, settings, limit: '<');\n\n        var message = $\"[{settings.Style.Message.ToMarkup()}]{ex.Message.EscapeMarkup()}[/]\";\n        return new Markup($\"{type}: {message}\");\n    }\n\n    private static Grid GetStackFrames(Exception ex, ExceptionSettings settings)\n    {\n        var styles = settings.Style;\n\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn().PadLeft(2).PadRight(0).NoWrap());\n        grid.AddColumn(new GridColumn().PadLeft(1).PadRight(0));\n\n        // Inner\n        if (ex.InnerException != null)\n        {\n            grid.AddRow(\n                Text.Empty,\n                GetException(ex.InnerException, settings));\n        }\n\n        // Stack frames\n        if ((settings.Format & ExceptionFormats.NoStackTrace) != 0)\n        {\n            return grid;\n        }\n\n        var stackTrace = new StackTrace(ex, fNeedFileInfo: true);\n        var allFrames = stackTrace.GetFrames();\n        if (allFrames.Length > 0 && allFrames[0]?.GetMethod() == null)\n        {\n            // if we can't easily get the method for the frame, then we are in AOT\n            // fallback to using ToString method of each frame.\n            WriteAotFrames(grid, stackTrace.GetFrames(), styles);\n            return grid;\n        }\n\n        var frames = allFrames\n            .FilterStackFrames()\n            .ToList();\n\n        foreach (var frame in frames)\n        {\n            var builder = new StringBuilder();\n\n            // Method\n            var shortenMethods = (settings.Format & ExceptionFormats.ShortenMethods) != 0;\n            var method = frame.GetMethod();\n            if (method == null)\n            {\n                continue;\n            }\n\n            var methodName = GetMethodName(ref method, out var isAsync);\n            if (isAsync)\n            {\n                builder.Append(\"async \");\n            }\n\n            if (method is MethodInfo mi)\n            {\n                var returnParameter = mi.ReturnParameter;\n                builder.AppendWithStyle(styles.ParameterType, GetParameterName(returnParameter).EscapeMarkup());\n                builder.Append(' ');\n            }\n\n            Emphasize(builder, methodName, ['.'], styles.Method, shortenMethods, settings);\n            builder.AppendWithStyle(styles.Parenthesis, \"(\");\n            AppendParameters(builder, method, settings);\n            builder.AppendWithStyle(styles.Parenthesis, \")\");\n\n            var path = frame.GetFileName();\n            if (path != null)\n            {\n                builder.Append(' ');\n                builder.AppendWithStyle(styles.Dimmed, \"in\");\n                builder.Append(' ');\n\n                // Path\n                AppendPath(builder, path, settings);\n\n                // Line number\n                var lineNumber = frame.GetFileLineNumber();\n                if (lineNumber != 0)\n                {\n                    builder.AppendWithStyle(styles.Dimmed, \":\");\n                    builder.AppendWithStyle(styles.LineNumber, lineNumber);\n                }\n            }\n\n            grid.AddRow(\n                $\"[{styles.Dimmed.ToMarkup()}]at[/]\",\n                builder.ToString());\n        }\n\n        return grid;\n    }\n\n    private static void WriteAotFrames(Grid grid, StackFrame?[] frames, ExceptionStyle styles)\n    {\n        foreach (var stackFrame in frames)\n        {\n            if (stackFrame == null)\n            {\n                continue;\n            }\n\n            var s = stackFrame.ToString();\n            s = s.Replace(\" in file:line:column <filename unknown>:0:0\", string.Empty).TrimEnd();\n            grid.AddRow(\n                $\"[{styles.Dimmed.ToMarkup()}]at[/]\",\n                s.EscapeMarkup());\n        }\n    }\n\n    private static void AppendParameters(StringBuilder builder, MethodBase? method, ExceptionSettings settings)\n    {\n        var typeColor = settings.Style.ParameterType.ToMarkup();\n        var nameColor = settings.Style.ParameterName.ToMarkup();\n        var parameters = method?.GetParameters()\n            .Select(x => $\"[{typeColor}]{GetParameterName(x).EscapeMarkup()}[/] [{nameColor}]{x.Name?.EscapeMarkup()}[/]\");\n\n        if (parameters != null)\n        {\n            builder.Append(string.Join(\", \", parameters));\n        }\n    }\n\n    private static void AppendPath(StringBuilder builder, string path, ExceptionSettings settings)\n    {\n        void AppendPath()\n        {\n            var shortenPaths = (settings.Format & ExceptionFormats.ShortenPaths) != 0;\n            Emphasize(builder, path, ['/', '\\\\'], settings.Style.Path, shortenPaths, settings);\n        }\n\n        if ((settings.Format & ExceptionFormats.ShowLinks) != 0)\n        {\n            var hasLink = path.TryGetUri(out var uri);\n            if (hasLink && uri != null)\n            {\n                builder.Append(\"[link=\").Append(uri.AbsoluteUri).Append(']');\n            }\n\n            AppendPath();\n\n            if (hasLink && uri != null)\n            {\n                builder.Append(\"[/]\");\n            }\n        }\n        else\n        {\n            AppendPath();\n        }\n    }\n\n    private static void Emphasize(StringBuilder builder, string input, char[] separators, Style color, bool compact,\n        ExceptionSettings settings, char? limit = null)\n    {\n        var limitIndex = limit.HasValue ? input.IndexOf(limit.Value) : -1;\n\n        var index = limitIndex != -1 ? input[..limitIndex].LastIndexOfAny(separators) : input.LastIndexOfAny(separators);\n        if (index != -1)\n        {\n            if (!compact)\n            {\n                builder.AppendWithStyle(settings.Style.NonEmphasized, input[..(index + 1)]);\n            }\n\n            builder.AppendWithStyle(color, input[(index + 1)..]);\n        }\n        else\n        {\n            builder.AppendWithStyle(color, input);\n        }\n    }\n\n    private static bool ShowInStackTrace(StackFrame frame)\n    {\n        // NET 6 has an attribute of StackTraceHiddenAttribute that we can use to clean up the stack trace\n        // cleanly. If the user is on an older version we'll fall back to all the stack frames being included.\n#if NET6_0_OR_GREATER\n        var mb = frame.GetMethod();\n        if (mb == null)\n        {\n            return false;\n        }\n\n        if ((mb.MethodImplementationFlags & MethodImplAttributes.AggressiveInlining) != 0)\n        {\n            return false;\n        }\n\n        try\n        {\n            if (mb.IsDefined(typeof(StackTraceHiddenAttribute), false))\n            {\n                return false;\n            }\n\n            var declaringType = mb.DeclaringType;\n            if (declaringType?.IsDefined(typeof(StackTraceHiddenAttribute), false) == true)\n            {\n                return false;\n            }\n        }\n        catch\n        {\n            // if we can't get the attributes then fall back to including it.\n        }\n#endif\n\n        return true;\n    }\n\n    private static IEnumerable<StackFrame> FilterStackFrames(this IEnumerable<StackFrame?>? frames)\n    {\n        var allFrames = frames?.ToArray() ?? [];\n        var numberOfFrames = allFrames.Length;\n\n        for (var i = 0; i < numberOfFrames; i++)\n        {\n            var thisFrame = allFrames[i];\n            if (thisFrame == null)\n            {\n                continue;\n            }\n\n            // always include the last frame\n            if (i == numberOfFrames - 1)\n            {\n                yield return thisFrame;\n            }\n            else if (ShowInStackTrace(thisFrame))\n            {\n                yield return thisFrame;\n            }\n        }\n    }\n\n    private static string GetPrefix(ParameterInfo parameter)\n    {\n        if (Attribute.IsDefined(parameter, typeof(ParamArrayAttribute), false))\n        {\n            return \"params\";\n        }\n\n        if (parameter.IsOut)\n        {\n            return \"out\";\n        }\n\n        if (parameter.IsIn)\n        {\n            return \"in\";\n        }\n\n        if (parameter.ParameterType.IsByRef)\n        {\n            return \"ref\";\n        }\n\n        return string.Empty;\n    }\n\n    private static string GetParameterName(ParameterInfo parameter)\n    {\n        var prefix = GetPrefix(parameter);\n        var parameterType = parameter.ParameterType;\n\n        string typeName;\n        if (parameterType.IsGenericType && TryGetTupleName(parameter, parameterType, out var s))\n        {\n            typeName = s;\n        }\n        else\n        {\n            if (parameterType.IsByRef && parameterType.GetElementType() is { } elementType)\n            {\n                parameterType = elementType;\n            }\n\n            typeName = TypeNameHelper.GetTypeDisplayName(parameterType);\n        }\n\n        return string.IsNullOrWhiteSpace(prefix) ? typeName : $\"{prefix} {typeName}\";\n    }\n\n    private static bool TryGetTupleName(ParameterInfo parameter, Type parameterType, [NotNullWhen(true)] out string? tupleName)\n    {\n        var customAttribs = parameter.GetCustomAttributes(inherit: false);\n\n        var tupleNameAttribute = customAttribs\n            .OfType<Attribute>()\n            .FirstOrDefault(a =>\n            {\n                var attributeType = a.GetType();\n                return attributeType.Namespace == \"System.Runtime.CompilerServices\" &&\n                       attributeType.Name == \"TupleElementNamesAttribute\";\n            });\n\n        if (tupleNameAttribute != null)\n        {\n            var propertyInfo = tupleNameAttribute.GetType()\n                .GetProperty(\"TransformNames\", BindingFlags.Instance | BindingFlags.Public)!;\n            var tupleNames = propertyInfo.GetValue(tupleNameAttribute) as IList<string>;\n            if (tupleNames?.Count > 0)\n            {\n                var args = parameterType.GetGenericArguments();\n                var sb = new StringBuilder();\n\n                sb.Append('(');\n                for (var i = 0; i < args.Length; i++)\n                {\n                    if (i > 0)\n                    {\n                        sb.Append(\", \");\n                    }\n\n                    sb.Append(TypeNameHelper.GetTypeDisplayName(args[i]));\n\n                    if (i >= tupleNames.Count)\n                    {\n                        continue;\n                    }\n\n                    var argName = tupleNames[i];\n\n                    sb.Append(' ');\n                    sb.Append(argName);\n                }\n\n                sb.Append(')');\n\n                tupleName = sb.ToString();\n                return true;\n            }\n        }\n        else if (parameterType.Namespace == \"System\" && parameterType.Name.Contains(\"ValueTuple`\"))\n        {\n            var args = parameterType.GetGenericArguments().Select(i => TypeNameHelper.GetTypeDisplayName(i));\n            tupleName = $\"({string.Join(\", \", args)})\";\n            return true;\n        }\n\n        tupleName = null;\n        return false;\n    }\n\n    private static string GetMethodName(ref MethodBase method, out bool isAsync)\n    {\n        var declaringType = method.DeclaringType;\n\n        if (declaringType?.IsDefined(typeof(CompilerGeneratedAttribute), false) == true)\n        {\n            isAsync = typeof(IAsyncStateMachine).IsAssignableFrom(declaringType);\n            if (isAsync || typeof(IEnumerator).IsAssignableFrom(declaringType))\n            {\n                TryResolveStateMachineMethod(ref method, out declaringType);\n            }\n        }\n        else\n        {\n            isAsync = false;\n        }\n\n        var builder = new StringBuilder(256);\n\n        var fullName = method.DeclaringType?.FullName;\n        if (fullName != null)\n        {\n            // See https://github.com/dotnet/runtime/blob/v6.0.0/src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs#L247-L253\n            builder.Append(fullName.Replace('+', '.'));\n            builder.Append('.');\n        }\n\n        builder.Append(method.Name);\n        if (method.IsGenericMethod)\n        {\n            builder.Append('<');\n            builder.Append(string.Join(\",\", method.GetGenericArguments().Select(t => t.Name)));\n            builder.Append('>');\n        }\n\n        return builder.ToString();\n    }\n\n    [RequiresDynamicCode(ExceptionFormatter.AotWarning)]\n    private static bool TryResolveStateMachineMethod(ref MethodBase method, out Type declaringType)\n    {\n        // https://github.com/dotnet/runtime/blob/v6.0.0/src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs#L400-L455\n        declaringType = method.DeclaringType ??\n                        throw new ArgumentException(\"Method must have a declaring type.\", nameof(method));\n\n        var parentType = declaringType.DeclaringType;\n        if (parentType == null)\n        {\n            return false;\n        }\n\n        static IEnumerable<MethodInfo> GetDeclaredMethods(IReflect type) => type.GetMethods(\n            BindingFlags.Public |\n            BindingFlags.NonPublic |\n            BindingFlags.Static |\n            BindingFlags.Instance |\n            BindingFlags.DeclaredOnly);\n\n        var methods = GetDeclaredMethods(parentType);\n\n        foreach (var candidateMethod in methods)\n        {\n            var attributes = candidateMethod.GetCustomAttributes<StateMachineAttribute>(false);\n\n            bool foundAttribute = false, foundIteratorAttribute = false;\n            foreach (var asma in attributes)\n            {\n                if (asma.StateMachineType != declaringType)\n                {\n                    continue;\n                }\n\n                foundAttribute = true;\n#if NET6_0_OR_GREATER\n                foundIteratorAttribute |= asma is IteratorStateMachineAttribute or AsyncIteratorStateMachineAttribute;\n#else\n                foundIteratorAttribute |= asma is IteratorStateMachineAttribute;\n#endif\n            }\n\n            if (!foundAttribute)\n            {\n                continue;\n            }\n\n            method = candidateMethod;\n            declaringType = candidateMethod.DeclaringType!;\n            return foundIteratorAttribute;\n        }\n\n        return false;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/ExceptionSettings.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Exception settings.\n/// </summary>\npublic sealed class ExceptionSettings\n{\n    /// <summary>\n    /// Gets or sets the exception format.\n    /// </summary>\n    public ExceptionFormats Format { get; set; }\n\n    /// <summary>\n    /// Gets or sets the exception style.\n    /// </summary>\n    public ExceptionStyle Style { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"ExceptionSettings\"/> class.\n    /// </summary>\n    public ExceptionSettings()\n    {\n        Format = ExceptionFormats.Default;\n        Style = new ExceptionStyle();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/ExceptionStyle.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represent an exception style.\n/// </summary>\npublic sealed class ExceptionStyle\n{\n    /// <summary>\n    /// Gets or sets the message color.\n    /// </summary>\n    public Style Message { get; set; } = new Style(Color.Red, Color.Default, Decoration.Bold);\n\n    /// <summary>\n    /// Gets or sets the exception color.\n    /// </summary>\n    public Style Exception { get; set; } = Color.White;\n\n    /// <summary>\n    /// Gets or sets the method color.\n    /// </summary>\n    public Style Method { get; set; } = Color.Yellow;\n\n    /// <summary>\n    /// Gets or sets the parameter type color.\n    /// </summary>\n    public Style ParameterType { get; set; } = Color.Blue;\n\n    /// <summary>\n    /// Gets or sets the parameter name color.\n    /// </summary>\n    public Style ParameterName { get; set; } = Color.Silver;\n\n    /// <summary>\n    /// Gets or sets the parenthesis color.\n    /// </summary>\n    public Style Parenthesis { get; set; } = Color.Silver;\n\n    /// <summary>\n    /// Gets or sets the path color.\n    /// </summary>\n    public Style Path { get; set; } = new Style(Color.Yellow, Color.Default, Decoration.Bold);\n\n    /// <summary>\n    /// Gets or sets the line number color.\n    /// </summary>\n    public Style LineNumber { get; set; } = Color.Blue;\n\n    /// <summary>\n    /// Gets or sets the color for dimmed text such as \"at\" or \"in\".\n    /// </summary>\n    public Style Dimmed { get; set; } = Color.Grey;\n\n    /// <summary>\n    /// Gets or sets the color for non emphasized items.\n    /// </summary>\n    public Style NonEmphasized { get; set; } = Color.Silver;\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/StringUriExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class StringUriExtensions\n{\n    public static bool TryGetUri(this string path, [NotNullWhen(true)] out Uri? result)\n    {\n        try\n        {\n            if (!Uri.TryCreate(path, UriKind.Absolute, out var uri))\n            {\n                result = null;\n                return false;\n            }\n\n            if (uri.Scheme == \"file\")\n            {\n                // For local files, we need to append\n                // the host name. Otherwise the terminal\n                // will most probably not allow it.\n                var builder = new UriBuilder(uri)\n                {\n                    Host = Dns.GetHostName(),\n                };\n\n                uri = builder.Uri;\n            }\n\n            result = uri;\n            return true;\n        }\n        catch\n        {\n            result = null;\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Exceptions/TypeNameHelper.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class TypeNameHelper\n{\n    // from https://github.com/benaadams/Ben.Demystifier/blob/main/src/Ben.Demystifier/TypeNameHelper.cs\n    // which was adapted from https://github.com/aspnet/Common/blob/dev/shared/Microsoft.Extensions.TypeNameHelper.Sources/TypeNameHelper.cs\n    public static readonly Dictionary<Type, string> BuiltInTypeNames = new Dictionary<Type, string>\n    {\n        { typeof(void), \"void\" },\n        { typeof(bool), \"bool\" },\n        { typeof(byte), \"byte\" },\n        { typeof(char), \"char\" },\n        { typeof(decimal), \"decimal\" },\n        { typeof(double), \"double\" },\n        { typeof(float), \"float\" },\n        { typeof(int), \"int\" },\n        { typeof(long), \"long\" },\n        { typeof(object), \"object\" },\n        { typeof(sbyte), \"sbyte\" },\n        { typeof(short), \"short\" },\n        { typeof(string), \"string\" },\n        { typeof(uint), \"uint\" },\n        { typeof(ulong), \"ulong\" },\n        { typeof(ushort), \"ushort\" },\n    };\n\n    public static readonly Dictionary<string, string> FSharpTypeNames = new Dictionary<string, string>\n    {\n        { \"Unit\", \"void\" },\n        { \"FSharpOption\", \"Option\" },\n        { \"FSharpAsync\", \"Async\" },\n        { \"FSharpOption`1\", \"Option\" },\n        { \"FSharpAsync`1\", \"Async\" },\n    };\n\n    /// <summary>\n    /// Pretty print a type name.\n    /// </summary>\n    /// <param name=\"type\">The <see cref=\"Type\"/>.</param>\n    /// <param name=\"fullName\"><c>true</c> to print a fully qualified name.</param>\n    /// <param name=\"includeGenericParameterNames\"><c>true</c> to include generic parameter names.</param>\n    /// <param name=\"includeSystemNamespace\"><c>true</c> to include the <c>System</c> namespace.</param>\n    /// <returns>The pretty printed type name.</returns>\n    public static string GetTypeDisplayName(Type type, bool fullName = false, bool includeGenericParameterNames = true, bool includeSystemNamespace = false)\n    {\n        var builder = new StringBuilder();\n        ProcessType(builder, type, new DisplayNameOptions(fullName, includeGenericParameterNames, includeSystemNamespace));\n        return builder.ToString();\n    }\n\n    private static void ProcessType(StringBuilder builder, Type type, DisplayNameOptions options)\n    {\n        if (type.IsGenericType)\n        {\n            var underlyingType = Nullable.GetUnderlyingType(type);\n            if (underlyingType != null)\n            {\n                ProcessType(builder, underlyingType, options);\n                builder.Append('?');\n            }\n            else\n            {\n                var genericArguments = type.GetGenericArguments();\n                ProcessGenericType(builder, type, genericArguments, genericArguments.Length, options);\n            }\n        }\n        else if (type.IsArray)\n        {\n            ProcessArrayType(builder, type, options);\n        }\n        else if (BuiltInTypeNames.TryGetValue(type, out var builtInName))\n        {\n            builder.Append(builtInName);\n        }\n        else if (type.Namespace == nameof(System) && !options.IncludeSystemNamespace)\n        {\n            builder.Append(type.Name);\n        }\n        else if (type.Assembly.GetName().Name == \"FSharp.Core.dll\"\n                 && FSharpTypeNames.TryGetValue(type.Name, out builtInName))\n        {\n            builder.Append(builtInName);\n        }\n        else if (type.IsGenericParameter)\n        {\n            if (options.IncludeGenericParameterNames)\n            {\n                builder.Append(type.Name);\n            }\n        }\n        else\n        {\n            builder.Append(options.FullName ? type.FullName ?? type.Name : type.Name);\n        }\n    }\n\n    private static void ProcessArrayType(StringBuilder builder, Type type, DisplayNameOptions options)\n    {\n        var innerType = type;\n        while (innerType.IsArray)\n        {\n            if (innerType.GetElementType() is { } inner)\n            {\n                innerType = inner;\n            }\n        }\n\n        ProcessType(builder, innerType, options);\n\n        while (type.IsArray)\n        {\n            builder.Append('[');\n            builder.Append(',', type.GetArrayRank() - 1);\n            builder.Append(']');\n            if (type.GetElementType() is not { } elementType)\n            {\n                break;\n            }\n\n            type = elementType;\n        }\n    }\n\n    private static void ProcessGenericType(StringBuilder builder, Type type, Type[] genericArguments, int length,\n        DisplayNameOptions options)\n    {\n        var offset = 0;\n        if (type.IsNested && type.DeclaringType is not null)\n        {\n            offset = type.DeclaringType.GetGenericArguments().Length;\n        }\n\n        if (options.FullName)\n        {\n            if (type.IsNested && type.DeclaringType is not null)\n            {\n                ProcessGenericType(builder, type.DeclaringType, genericArguments, offset, options);\n                builder.Append('+');\n            }\n            else if (!string.IsNullOrEmpty(type.Namespace))\n            {\n                builder.Append(type.Namespace);\n                builder.Append('.');\n            }\n        }\n\n        var genericPartIndex = type.Name.IndexOf('`');\n        if (genericPartIndex <= 0)\n        {\n            builder.Append(type.Name);\n            return;\n        }\n\n        if (type.Assembly.GetName().Name == \"FSharp.Core.dll\"\n            && FSharpTypeNames.TryGetValue(type.Name, out var builtInName))\n        {\n            builder.Append(builtInName);\n        }\n        else\n        {\n            builder.Append(type.Name, 0, genericPartIndex);\n        }\n\n        builder.Append('<');\n        for (var i = offset; i < length; i++)\n        {\n            ProcessType(builder, genericArguments[i], options);\n            if (i + 1 == length)\n            {\n                continue;\n            }\n\n            builder.Append(',');\n            if (options.IncludeGenericParameterNames || !genericArguments[i + 1].IsGenericParameter)\n            {\n                builder.Append(' ');\n            }\n        }\n\n        builder.Append('>');\n    }\n\n    private readonly struct DisplayNameOptions\n    {\n        public bool FullName { get; }\n        public bool IncludeGenericParameterNames { get; }\n        public bool IncludeSystemNamespace { get; }\n\n        public DisplayNameOptions(bool fullName, bool includeGenericParameterNames, bool includeSystemNamespace)\n        {\n            FullName = fullName;\n            IncludeGenericParameterNames = includeGenericParameterNames;\n            IncludeSystemNamespace = includeSystemNamespace;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/FigletCharacter.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class FigletCharacter\n{\n    public int Code { get; }\n    public int Width { get; }\n    public int Height { get; }\n    public IReadOnlyList<string> Lines { get; }\n\n    public FigletCharacter(int code, IEnumerable<string> lines)\n    {\n        Code = code;\n        Lines = new List<string>(lines ?? throw new ArgumentNullException(nameof(lines)));\n\n        var min = Lines.Min(x => x.Length);\n        var max = Lines.Max(x => x.Length);\n        if (min != max)\n        {\n            throw new InvalidOperationException($\"Figlet character #{code} has varying width\");\n        }\n\n        Width = max;\n        Height = Lines.Count;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/FigletFont.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a FIGlet font.\n/// </summary>\npublic sealed class FigletFont\n{\n    private const string StandardFont = \"Spectre.Console/Widgets/Figlet/Fonts/Standard.flf\";\n\n    private readonly Dictionary<int, FigletCharacter> _characters;\n    private static readonly Lazy<FigletFont> _standard;\n\n    /// <summary>\n    /// Gets the number of characters in the font.\n    /// </summary>\n    public int Count => _characters.Count;\n\n    /// <summary>\n    /// Gets the height of the font.\n    /// </summary>\n    public int Height { get; }\n\n    /// <summary>\n    /// Gets the font's baseline.\n    /// </summary>\n    public int Baseline { get; }\n\n    /// <summary>\n    /// Gets the font's maximum width.\n    /// </summary>\n    public int MaxWidth { get; }\n\n    /// <summary>\n    /// Gets the default FIGlet font.\n    /// </summary>\n    public static FigletFont Default => _standard.Value;\n\n    static FigletFont()\n    {\n        _standard = new Lazy<FigletFont>(() => Parse(\n            ResourceReader.ReadManifestData(StandardFont)));\n    }\n\n    internal FigletFont(IEnumerable<FigletCharacter> characters, FigletHeader header)\n    {\n        _characters = new Dictionary<int, FigletCharacter>();\n\n        foreach (var character in characters)\n        {\n            if (!_characters.TryAdd(character.Code, character))\n            {\n                throw new InvalidOperationException(\"Character already exist\");\n            }\n        }\n\n        Height = header.Height;\n        Baseline = header.Baseline;\n        MaxWidth = header.MaxLength;\n    }\n\n    /// <summary>\n    /// Loads a FIGlet font from the specified stream.\n    /// </summary>\n    /// <param name=\"stream\">The stream to load the FIGlet font from.</param>\n    /// <returns>The loaded FIGlet font.</returns>\n    public static FigletFont Load(Stream stream)\n    {\n        using (var reader = new StreamReader(stream))\n        {\n            return Parse(reader.ReadToEnd());\n        }\n    }\n\n    /// <summary>\n    /// Loads a FIGlet font from disk.\n    /// </summary>\n    /// <param name=\"path\">The path of the FIGlet font to load.</param>\n    /// <returns>The loaded FIGlet font.</returns>\n    public static FigletFont Load(string path)\n    {\n        return Parse(File.ReadAllText(path));\n    }\n\n    /// <summary>\n    /// Parses a FIGlet font from the specified <see cref=\"string\"/>.\n    /// </summary>\n    /// <param name=\"source\">The FIGlet font source.</param>\n    /// <returns>The parsed FIGlet font.</returns>\n    public static FigletFont Parse(string source)\n    {\n        return FigletFontParser.Parse(source);\n    }\n\n    internal int GetWidth(string text)\n    {\n        var width = 0;\n        foreach (var character in text)\n        {\n            width += GetCharacter(character)?.Width ?? 0;\n        }\n\n        return width;\n    }\n\n    internal FigletCharacter? GetCharacter(char character)\n    {\n        _characters.TryGetValue(character, out var result);\n        return result;\n    }\n\n    internal IEnumerable<FigletCharacter> GetCharacters(string text)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        var result = new List<FigletCharacter>();\n        foreach (var character in text)\n        {\n            if (_characters.TryGetValue(character, out var figletCharacter))\n            {\n                result.Add(figletCharacter);\n            }\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/FigletFontParser.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class FigletFontParser\n{\n    public static FigletFont Parse(string source)\n    {\n        var lines = source.SplitLines();\n\n        var headerLine = lines.FirstOrDefault();\n        if (headerLine == null)\n        {\n            throw new InvalidOperationException(\"Could not read header line\");\n        }\n\n        var header = ParseHeader(headerLine);\n\n        var index = 32;\n        var indexOverridden = false;\n        var hasOverriddenIndex = false;\n        var buffer = new List<string>();\n        var characters = new List<FigletCharacter>();\n\n        foreach (var line in lines.Skip(header.CommentLines + 1))\n        {\n            if (!line.EndsWith(\"@\", StringComparison.Ordinal))\n            {\n                var words = line.SplitWords();\n                if (words.Length > 0 && TryParseIndex(words[0], out var newIndex))\n                {\n                    index = newIndex;\n                    indexOverridden = true;\n                    hasOverriddenIndex = true;\n                    continue;\n                }\n\n                continue;\n            }\n\n            if (hasOverriddenIndex && !indexOverridden)\n            {\n                throw new InvalidOperationException(\"Unknown index for FIGlet character\");\n            }\n\n            buffer.Add(line.Replace(header.Hardblank, ' ').TrimEnd('@'));\n\n            if (line.EndsWith(\"@@\", StringComparison.Ordinal))\n            {\n                characters.Add(new FigletCharacter(index, buffer));\n                buffer.Clear();\n\n                if (!hasOverriddenIndex)\n                {\n                    index++;\n                }\n\n                // Reset the flag so we know if we're trying to parse\n                // a character that wasn't prefixed with an ASCII index.\n                indexOverridden = false;\n            }\n        }\n\n        return new FigletFont(characters, header);\n    }\n\n    private static bool TryParseIndex(string index, out int result)\n    {\n        var style = NumberStyles.Integer;\n        if (index.StartsWith(\"0x\", StringComparison.OrdinalIgnoreCase))\n        {\n            // TODO: ReplaceExact should not be used\n            index = index.ReplaceExact(\"0x\", string.Empty).ReplaceExact(\"0x\", string.Empty);\n            style = NumberStyles.HexNumber;\n        }\n\n        return int.TryParse(index, style, CultureInfo.InvariantCulture, out result);\n    }\n\n    private static FigletHeader ParseHeader(string text)\n    {\n        if (string.IsNullOrWhiteSpace(text))\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font\");\n        }\n\n        var parts = text.SplitWords(StringSplitOptions.RemoveEmptyEntries);\n        if (parts.Length < 6)\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font header\");\n        }\n\n        if (!IsValidSignature(parts[0]))\n        {\n            throw new InvalidOperationException(\"Invalid Figlet font header signature\");\n        }\n\n        return new FigletHeader\n        {\n            Hardblank = parts[0][5],\n            Height = int.Parse(parts[1], CultureInfo.InvariantCulture),\n            Baseline = int.Parse(parts[2], CultureInfo.InvariantCulture),\n            MaxLength = int.Parse(parts[3], CultureInfo.InvariantCulture),\n            OldLayout = int.Parse(parts[4], CultureInfo.InvariantCulture),\n            CommentLines = int.Parse(parts[5], CultureInfo.InvariantCulture),\n        };\n    }\n\n    private static bool IsValidSignature(string signature)\n    {\n        return signature.Length == 6\n            && signature[0] == 'f' && signature[1] == 'l'\n            && signature[2] == 'f' && signature[3] == '2'\n            && signature[4] == 'a';\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/FigletHeader.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class FigletHeader\n{\n    public char Hardblank { get; set; }\n    public int Height { get; set; }\n    public int Baseline { get; set; }\n    public int MaxLength { get; set; }\n    public int OldLayout { get; set; }\n    public int CommentLines { get; set; }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/FigletText.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents text rendered with a FIGlet font.\n/// </summary>\npublic sealed class FigletText : Renderable, IHasJustification\n{\n    private readonly FigletFont _font;\n    private readonly string _text;\n\n    /// <summary>\n    /// Gets or sets the color of the text.\n    /// </summary>\n    public Color? Color { get; set; }\n\n    /// <inheritdoc/>\n    public Justify? Justification { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// the right side should be padded.\n    /// </summary>\n    /// <remarks>Defaults to <c>false</c>.</remarks>\n    public bool Pad { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"FigletText\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    public FigletText(string text)\n        : this(FigletFont.Default, text)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"FigletText\"/> class.\n    /// </summary>\n    /// <param name=\"font\">The FIGlet font to use.</param>\n    /// <param name=\"text\">The text.</param>\n    public FigletText(FigletFont font, string text)\n    {\n        _font = font ?? throw new ArgumentNullException(nameof(font));\n        _text = text ?? throw new ArgumentNullException(nameof(text));\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var style = new Style(Color ?? Console.Color.Default);\n        var alignment = Justification ?? Console.Justify.Left;\n\n        foreach (var row in GetRows(maxWidth))\n        {\n            for (var index = 0; index < _font.Height; index++)\n            {\n                var line = new Segment(string.Concat(row.Select(x => x.Lines[index])), style);\n\n                var lineWidth = line.CellCount();\n                if (alignment == Console.Justify.Left)\n                {\n                    yield return line;\n\n                    if (lineWidth < maxWidth && Pad)\n                    {\n                        yield return Segment.Padding(maxWidth - lineWidth);\n                    }\n                }\n                else if (alignment == Console.Justify.Center)\n                {\n                    var left = Math.Max(0, maxWidth - lineWidth) / 2;\n                    var right = left + (Math.Max(0, maxWidth - lineWidth) % 2);\n\n                    yield return Segment.Padding(left);\n                    yield return line;\n\n                    if (Pad)\n                    {\n                        yield return Segment.Padding(right);\n                    }\n                }\n                else if (alignment == Console.Justify.Right)\n                {\n                    if (lineWidth < maxWidth)\n                    {\n                        yield return Segment.Padding(maxWidth - lineWidth);\n                    }\n\n                    yield return line;\n                }\n\n                yield return Segment.LineBreak;\n            }\n        }\n    }\n\n    private List<List<FigletCharacter>> GetRows(int maxWidth)\n    {\n        var result = new List<List<FigletCharacter>>();\n        var words = _text.SplitWords(StringSplitOptions.None);\n\n        var totalWidth = 0;\n        var line = new List<FigletCharacter>();\n\n        foreach (var word in words)\n        {\n            // Does the whole word fit?\n            var width = _font.GetWidth(word);\n            if (width + totalWidth < maxWidth)\n            {\n                // Add it to the line\n                line.AddRange(_font.GetCharacters(word));\n                totalWidth += width;\n            }\n            else\n            {\n                // Does it fit on its own line?\n                if (width < maxWidth)\n                {\n                    // Flush the line\n                    result.Add(line);\n                    line = [];\n                    totalWidth = 0;\n\n                    line.AddRange(_font.GetCharacters(word));\n                    totalWidth += width;\n                }\n                else\n                {\n                    // We need to split it up.\n                    var queue = new Queue<FigletCharacter>(_font.GetCharacters(word));\n                    while (queue.Count > 0)\n                    {\n                        var current = queue.Dequeue();\n                        if (totalWidth + current.Width > maxWidth)\n                        {\n                            // Flush the line\n                            result.Add(line);\n                            line = [];\n                            totalWidth = 0;\n                        }\n\n                        line.Add(current);\n                        totalWidth += current.Width;\n                    }\n                }\n            }\n        }\n\n        if (line.Count > 0)\n        {\n            result.Add(line);\n        }\n\n        return result;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"FigletText\"/>.\n/// </summary>\npublic static class FigletTextExtensions\n{\n    /// <summary>\n    /// Sets the color of the FIGlet text.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"color\">The color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static FigletText Color(this FigletText text, Color? color)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        text.Color = color ?? Console.Color.Default;\n        return text;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Figlet/Fonts/Standard.flf",
    "content": "flf2a$ 6 5 16 15 11 0 24463\nStandard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig\nIncludes ISO Latin-1\nfiglet release 2.1 -- 12 Aug 1994\nModified for figlet 2.2 by John Cowan <cowan@ccil.org>\n  to add Latin-{2,3,4,5} support (Unicode U+0100-017F).\nPermission is hereby given to modify this font, as long as the\nmodifier's name is placed on a comment line.\n\nModified by Paul Burton <solution@earthlink.net> 12/96 to include new parameter\nsupported by FIGlet and FIGWin.  May also be slightly modified for better use\nof new full-width/kern/smush alternatives, but default output is NOT changed.\n $@\n $@\n $@\n $@\n $@\n $@@\n  _ @\n | |@\n | |@\n |_|@\n (_)@\n    @@\n  _ _ @\n ( | )@\n  V V @\n   $  @\n   $  @\n      @@\n    _  _   @\n  _| || |_ @\n |_  ..  _|@\n |_      _|@\n   |_||_|  @\n           @@\n   _  @\n  | | @\n / __)@\n \\__ \\@\n (   /@\n  |_| @@\n  _  __@\n (_)/ /@\n   / / @\n  / /_ @\n /_/(_)@\n       @@\n   ___   @\n  ( _ )  @\n  / _ \\/\\@\n | (_>  <@\n  \\___/\\/@\n         @@\n  _ @\n ( )@\n |/ @\n  $ @\n  $ @\n    @@\n   __@\n  / /@\n | | @\n | | @\n | | @\n  \\_\\@@\n __  @\n \\ \\ @\n  | |@\n  | |@\n  | |@\n /_/ @@\n       @\n __/\\__@\n \\    /@\n /_  _\\@\n   \\/  @\n       @@\n        @\n    _   @\n  _| |_ @\n |_   _|@\n   |_|  @\n        @@\n    @\n    @\n    @\n  _ @\n ( )@\n |/ @@\n        @\n        @\n  _____ @\n |_____|@\n    $   @\n        @@\n    @\n    @\n    @\n  _ @\n (_)@\n    @@\n     __@\n    / /@\n   / / @\n  / /  @\n /_/   @\n       @@\n   ___  @\n  / _ \\ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n  _ @\n / |@\n | |@\n | |@\n |_|@\n    @@\n  ____  @\n |___ \\ @\n   __) |@\n  / __/ @\n |_____|@\n        @@\n  _____ @\n |___ / @\n   |_ \\ @\n  ___) |@\n |____/ @\n        @@\n  _  _   @\n | || |  @\n | || |_ @\n |__   _|@\n    |_|  @\n         @@\n  ____  @\n | ___| @\n |___ \\ @\n  ___) |@\n |____/ @\n        @@\n   __   @\n  / /_  @\n | '_ \\ @\n | (_) |@\n  \\___/ @\n        @@\n  _____ @\n |___  |@\n    / / @\n   / /  @\n  /_/   @\n        @@\n   ___  @\n  ( _ ) @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n   ___  @\n  / _ \\ @\n | (_) |@\n  \\__, |@\n    /_/ @\n        @@\n    @\n  _ @\n (_)@\n  _ @\n (_)@\n    @@\n    @\n  _ @\n (_)@\n  _ @\n ( )@\n |/ @@\n   __@\n  / /@\n / / @\n \\ \\ @\n  \\_\\@\n     @@\n        @\n  _____ @\n |_____|@\n |_____|@\n    $   @\n        @@\n __  @\n \\ \\ @\n  \\ \\@\n  / /@\n /_/ @\n     @@\n  ___ @\n |__ \\@\n   / /@\n  |_| @\n  (_) @\n      @@\n    ____  @\n   / __ \\ @\n  / / _` |@\n | | (_| |@\n  \\ \\__,_|@\n   \\____/ @@\n     _    @\n    / \\   @\n   / _ \\  @\n  / ___ \\ @\n /_/   \\_\\@\n          @@\n  ____  @\n | __ ) @\n |  _ \\ @\n | |_) |@\n |____/ @\n        @@\n   ____ @\n  / ___|@\n | |    @\n | |___ @\n  \\____|@\n        @@\n  ____  @\n |  _ \\ @\n | | | |@\n | |_| |@\n |____/ @\n        @@\n  _____ @\n | ____|@\n |  _|  @\n | |___ @\n |_____|@\n        @@\n  _____ @\n |  ___|@\n | |_   @\n |  _|  @\n |_|    @\n        @@\n   ____ @\n  / ___|@\n | |  _ @\n | |_| |@\n  \\____|@\n        @@\n  _   _ @\n | | | |@\n | |_| |@\n |  _  |@\n |_| |_|@\n        @@\n  ___ @\n |_ _|@\n  | | @\n  | | @\n |___|@\n      @@\n      _ @\n     | |@\n  _  | |@\n | |_| |@\n  \\___/ @\n        @@\n  _  __@\n | |/ /@\n | ' / @\n | . \\ @\n |_|\\_\\@\n       @@\n  _     @\n | |    @\n | |    @\n | |___ @\n |_____|@\n        @@\n  __  __ @\n |  \\/  |@\n | |\\/| |@\n | |  | |@\n |_|  |_|@\n         @@\n  _   _ @\n | \\ | |@\n |  \\| |@\n | |\\  |@\n |_| \\_|@\n        @@\n   ___  @\n  / _ \\ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n  ____  @\n |  _ \\ @\n | |_) |@\n |  __/ @\n |_|    @\n        @@\n   ___  @\n  / _ \\ @\n | | | |@\n | |_| |@\n  \\__\\_\\@\n        @@\n  ____  @\n |  _ \\ @\n | |_) |@\n |  _ < @\n |_| \\_\\@\n        @@\n  ____  @\n / ___| @\n \\___ \\ @\n  ___) |@\n |____/ @\n        @@\n  _____ @\n |_   _|@\n   | |  @\n   | |  @\n   |_|  @\n        @@\n  _   _ @\n | | | |@\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n __     __@\n \\ \\   / /@\n  \\ \\ / / @\n   \\ V /  @\n    \\_/   @\n          @@\n __        __@\n \\ \\      / /@\n  \\ \\ /\\ / / @\n   \\ V  V /  @\n    \\_/\\_/   @\n             @@\n __  __@\n \\ \\/ /@\n  \\  / @\n  /  \\ @\n /_/\\_\\@\n       @@\n __   __@\n \\ \\ / /@\n  \\ V / @\n   | |  @\n   |_|  @\n        @@\n  _____@\n |__  /@\n   / / @\n  / /_ @\n /____|@\n       @@\n  __ @\n | _|@\n | | @\n | | @\n | | @\n |__|@@\n __    @\n \\ \\   @\n  \\ \\  @\n   \\ \\ @\n    \\_\\@\n       @@\n  __ @\n |_ |@\n  | |@\n  | |@\n  | |@\n |__|@@\n  /\\ @\n |/\\|@\n   $ @\n   $ @\n   $ @\n     @@\n        @\n        @\n        @\n        @\n  _____ @\n |_____|@@\n  _ @\n ( )@\n  \\|@\n  $ @\n  $ @\n    @@\n        @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n  _     @\n | |__  @\n | '_ \\ @\n | |_) |@\n |_.__/ @\n        @@\n       @\n   ___ @\n  / __|@\n | (__ @\n  \\___|@\n       @@\n      _ @\n   __| |@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n       @\n   ___ @\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n   __ @\n  / _|@\n | |_ @\n |  _|@\n |_|  @\n      @@\n        @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__, |@\n  |___/ @@\n  _     @\n | |__  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n  _ @\n (_)@\n | |@\n | |@\n |_|@\n    @@\n    _ @\n   (_)@\n   | |@\n   | |@\n  _/ |@\n |__/ @@\n  _    @\n | | __@\n | |/ /@\n |   < @\n |_|\\_\\@\n       @@\n  _ @\n | |@\n | |@\n | |@\n |_|@\n    @@\n            @\n  _ __ ___  @\n | '_ ` _ \\ @\n | | | | | |@\n |_| |_| |_|@\n            @@\n        @\n  _ __  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n        @\n   ___  @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n        @\n  _ __  @\n | '_ \\ @\n | |_) |@\n | .__/ @\n |_|    @@\n        @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__, |@\n     |_|@@\n       @\n  _ __ @\n | '__|@\n | |   @\n |_|   @\n       @@\n      @\n  ___ @\n / __|@\n \\__ \\@\n |___/@\n      @@\n  _   @\n | |_ @\n | __|@\n | |_ @\n  \\__|@\n      @@\n        @\n  _   _ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n        @\n __   __@\n \\ \\ / /@\n  \\ V / @\n   \\_/  @\n        @@\n           @\n __      __@\n \\ \\ /\\ / /@\n  \\ V  V / @\n   \\_/\\_/  @\n           @@\n       @\n __  __@\n \\ \\/ /@\n  >  < @\n /_/\\_\\@\n       @@\n        @\n  _   _ @\n | | | |@\n | |_| |@\n  \\__, |@\n  |___/ @@\n      @\n  ____@\n |_  /@\n  / / @\n /___|@\n      @@\n    __@\n   / /@\n  | | @\n < <  @\n  | | @\n   \\_\\@@\n  _ @\n | |@\n | |@\n | |@\n | |@\n |_|@@\n __   @\n \\ \\  @\n  | | @\n   > >@\n  | | @\n /_/  @@\n  /\\/|@\n |/\\/ @\n   $  @\n   $  @\n   $  @\n      @@\n  _   _ @\n (_)_(_)@\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n  _   _ @\n (_)_(_)@\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n  _   _ @\n (_) (_)@\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n  _   _ @\n (_)_(_)@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n  _   _ @\n (_)_(_)@\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n  _   _ @\n (_) (_)@\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n   ___ @\n  / _ \\@\n | |/ /@\n | |\\ \\@\n | ||_/@\n |_|   @@\n160  NO-BREAK SPACE\n $@\n $@\n $@\n $@\n $@\n $@@\n161  INVERTED EXCLAMATION MARK\n  _ @\n (_)@\n | |@\n | |@\n |_|@\n    @@\n162  CENT SIGN\n    _  @\n   | | @\n  / __)@\n | (__ @\n  \\   )@\n   |_| @@\n163  POUND SIGN\n    ___  @\n   / ,_\\ @\n _| |_   @\n  | |___ @\n (_,____|@\n         @@\n164  CURRENCY SIGN\n /\\___/\\@\n \\  _  /@\n | (_) |@\n / ___ \\@\n \\/   \\/@\n        @@\n165  YEN SIGN\n  __ __ @\n  \\ V / @\n |__ __|@\n |__ __|@\n   |_|  @\n        @@\n166  BROKEN BAR\n  _ @\n | |@\n |_|@\n  _ @\n | |@\n |_|@@\n167  SECTION SIGN\n    __ @\n  _/ _)@\n / \\ \\ @\n \\ \\\\ \\@\n  \\ \\_/@\n (__/  @@\n168  DIAERESIS\n  _   _ @\n (_) (_)@\n  $   $ @\n  $   $ @\n  $   $ @\n        @@\n169  COPYRIGHT SIGN\n    _____   @\n   / ___ \\  @\n  / / __| \\ @\n | | (__   |@\n  \\ \\___| / @\n   \\_____/  @@\n170  FEMININE ORDINAL INDICATOR\n  __ _ @\n / _` |@\n \\__,_|@\n |____|@\n    $  @\n       @@\n171  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n   ____@\n  / / /@\n / / / @\n \\ \\ \\ @\n  \\_\\_\\@\n       @@\n172  NOT SIGN\n        @\n  _____ @\n |___  |@\n     |_|@\n    $   @\n        @@\n173  SOFT HYPHEN\n       @\n       @\n  ____ @\n |____|@\n    $  @\n       @@\n174  REGISTERED SIGN\n    _____   @\n   / ___ \\  @\n  / | _ \\ \\ @\n |  |   /  |@\n  \\ |_|_\\ / @\n   \\_____/  @@\n175  MACRON\n  _____ @\n |_____|@\n    $   @\n    $   @\n    $   @\n        @@\n176  DEGREE SIGN\n   __  @\n  /  \\ @\n | () |@\n  \\__/ @\n    $  @\n       @@\n177  PLUS-MINUS SIGN\n    _   @\n  _| |_ @\n |_   _|@\n  _|_|_ @\n |_____|@\n        @@\n178  SUPERSCRIPT TWO\n  ___ @\n |_  )@\n  / / @\n /___|@\n   $  @\n      @@\n179  SUPERSCRIPT THREE\n  ____@\n |__ /@\n  |_ \\@\n |___/@\n   $  @\n      @@\n180  ACUTE ACCENT\n  __@\n /_/@\n  $ @\n  $ @\n  $ @\n    @@\n181  MICRO SIGN\n        @\n  _   _ @\n | | | |@\n | |_| |@\n | ._,_|@\n |_|    @@\n182  PILCROW SIGN\n   _____ @\n  /     |@\n | (| | |@\n  \\__ | |@\n    |_|_|@\n         @@\n183  MIDDLE DOT\n    @\n  _ @\n (_)@\n  $ @\n  $ @\n    @@\n184  CEDILLA\n    @\n    @\n    @\n    @\n  _ @\n )_)@@\n185  SUPERSCRIPT ONE\n  _ @\n / |@\n | |@\n |_|@\n  $ @\n    @@\n186  MASCULINE ORDINAL INDICATOR\n  ___ @\n / _ \\@\n \\___/@\n |___|@\n   $  @\n      @@\n187  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n ____  @\n \\ \\ \\ @\n  \\ \\ \\@\n  / / /@\n /_/_/ @\n       @@\n188  VULGAR FRACTION ONE QUARTER\n  _   __    @\n / | / / _  @\n | |/ / | | @\n |_/ /|_  _|@\n  /_/   |_| @\n            @@\n189  VULGAR FRACTION ONE HALF\n  _   __   @\n / | / /__ @\n | |/ /_  )@\n |_/ / / / @\n  /_/ /___|@\n           @@\n190  VULGAR FRACTION THREE QUARTERS\n  ____  __    @\n |__ / / / _  @\n  |_ \\/ / | | @\n |___/ /|_  _|@\n    /_/   |_| @\n              @@\n191  INVERTED QUESTION MARK\n   _  @\n  (_) @\n  | | @\n / /_ @\n \\___|@\n      @@\n192  LATIN CAPITAL LETTER A WITH GRAVE\n   __   @\n   \\_\\  @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n193  LATIN CAPITAL LETTER A WITH ACUTE\n    __  @\n   /_/  @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n194  LATIN CAPITAL LETTER A WITH CIRCUMFLEX\n   //\\  @\n  |/_\\| @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n195  LATIN CAPITAL LETTER A WITH TILDE\n   /\\/| @\n  |/\\/  @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n196  LATIN CAPITAL LETTER A WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n197  LATIN CAPITAL LETTER A WITH RING ABOVE\n    _   @\n   (o)  @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n198  LATIN CAPITAL LETTER AE\n     ______ @\n    /  ____|@\n   / _  _|  @\n  / __ |___ @\n /_/ |_____|@\n            @@\n199  LATIN CAPITAL LETTER C WITH CEDILLA\n   ____ @\n  / ___|@\n | |    @\n | |___ @\n  \\____|@\n    )_) @@\n200  LATIN CAPITAL LETTER E WITH GRAVE\n   __   @\n  _\\_\\_ @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n201  LATIN CAPITAL LETTER E WITH ACUTE\n    __  @\n  _/_/_ @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n202  LATIN CAPITAL LETTER E WITH CIRCUMFLEX\n   //\\  @\n  |/_\\| @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n203  LATIN CAPITAL LETTER E WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n204  LATIN CAPITAL LETTER I WITH GRAVE\n  __  @\n  \\_\\ @\n |_ _|@\n  | | @\n |___|@\n      @@\n205  LATIN CAPITAL LETTER I WITH ACUTE\n   __ @\n  /_/ @\n |_ _|@\n  | | @\n |___|@\n      @@\n206  LATIN CAPITAL LETTER I WITH CIRCUMFLEX\n  //\\ @\n |/_\\|@\n |_ _|@\n  | | @\n |___|@\n      @@\n207  LATIN CAPITAL LETTER I WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n  |_ _| @\n   | |  @\n  |___| @\n        @@\n208  LATIN CAPITAL LETTER ETH\n    ____  @\n   |  _ \\ @\n  _| |_| |@\n |__ __| |@\n   |____/ @\n          @@\n209  LATIN CAPITAL LETTER N WITH TILDE\n   /\\/|@\n  |/\\/ @\n | \\| |@\n | .` |@\n |_|\\_|@\n       @@\n210  LATIN CAPITAL LETTER O WITH GRAVE\n   __   @\n   \\_\\  @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n211  LATIN CAPITAL LETTER O WITH ACUTE\n    __  @\n   /_/  @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n212  LATIN CAPITAL LETTER O WITH CIRCUMFLEX\n   //\\  @\n  |/_\\| @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n213  LATIN CAPITAL LETTER O WITH TILDE\n   /\\/| @\n  |/\\/  @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n214  LATIN CAPITAL LETTER O WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n215  MULTIPLICATION SIGN\n     @\n     @\n /\\/\\@\n >  <@\n \\/\\/@\n     @@\n216  LATIN CAPITAL LETTER O WITH STROKE\n   ____ @\n  / _// @\n | |// |@\n | //| |@\n  //__/ @\n        @@\n217  LATIN CAPITAL LETTER U WITH GRAVE\n   __   @\n  _\\_\\_ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n218  LATIN CAPITAL LETTER U WITH ACUTE\n    __  @\n  _/_/_ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n219  LATIN CAPITAL LETTER U WITH CIRCUMFLEX\n   //\\  @\n  |/ \\| @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n220  LATIN CAPITAL LETTER U WITH DIAERESIS\n  _   _ @\n (_) (_)@\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n221  LATIN CAPITAL LETTER Y WITH ACUTE\n    __  @\n __/_/__@\n \\ \\ / /@\n  \\ V / @\n   |_|  @\n        @@\n222  LATIN CAPITAL LETTER THORN\n  _     @\n | |___ @\n |  __ \\@\n |  ___/@\n |_|    @\n        @@\n223  LATIN SMALL LETTER SHARP S\n   ___ @\n  / _ \\@\n | |/ /@\n | |\\ \\@\n | ||_/@\n |_|   @@\n224  LATIN SMALL LETTER A WITH GRAVE\n   __   @\n   \\_\\_ @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n225  LATIN SMALL LETTER A WITH ACUTE\n    __  @\n   /_/_ @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n226  LATIN SMALL LETTER A WITH CIRCUMFLEX\n   //\\  @\n  |/_\\| @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n227  LATIN SMALL LETTER A WITH TILDE\n   /\\/| @\n  |/\\/_ @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n228  LATIN SMALL LETTER A WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n229  LATIN SMALL LETTER A WITH RING ABOVE\n    __  @\n   (()) @\n  / _ '|@\n | (_| |@\n  \\__,_|@\n        @@\n230  LATIN SMALL LETTER AE\n           @\n   __ ____ @\n  / _`  _ \\@\n | (_|  __/@\n  \\__,____|@\n           @@\n231  LATIN SMALL LETTER C WITH CEDILLA\n       @\n   ___ @\n  / __|@\n | (__ @\n  \\___|@\n   )_) @@\n232  LATIN SMALL LETTER E WITH GRAVE\n   __  @\n   \\_\\ @\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n233  LATIN SMALL LETTER E WITH ACUTE\n    __ @\n   /_/ @\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n234  LATIN SMALL LETTER E WITH CIRCUMFLEX\n   //\\ @\n  |/_\\|@\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n235  LATIN SMALL LETTER E WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n  / _ \\ @\n |  __/ @\n  \\___| @\n        @@\n236  LATIN SMALL LETTER I WITH GRAVE\n __ @\n \\_\\@\n | |@\n | |@\n |_|@\n    @@\n237  LATIN SMALL LETTER I WITH ACUTE\n  __@\n /_/@\n | |@\n | |@\n |_|@\n    @@\n238  LATIN SMALL LETTER I WITH CIRCUMFLEX\n  //\\ @\n |/_\\|@\n  | | @\n  | | @\n  |_| @\n      @@\n239  LATIN SMALL LETTER I WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n   | |  @\n   | |  @\n   |_|  @\n        @@\n240  LATIN SMALL LETTER ETH\n   /\\/\\ @\n   >  < @\n  _\\/\\ |@\n / __` |@\n \\____/ @\n        @@\n241  LATIN SMALL LETTER N WITH TILDE\n   /\\/| @\n  |/\\/  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n242  LATIN SMALL LETTER O WITH GRAVE\n   __   @\n   \\_\\  @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n243  LATIN SMALL LETTER O WITH ACUTE\n    __  @\n   /_/  @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n244  LATIN SMALL LETTER O WITH CIRCUMFLEX\n   //\\  @\n  |/_\\| @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n245  LATIN SMALL LETTER O WITH TILDE\n   /\\/| @\n  |/\\/  @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n246  LATIN SMALL LETTER O WITH DIAERESIS\n  _   _ @\n (_)_(_)@\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n247  DIVISION SIGN\n        @\n    _   @\n  _(_)_ @\n |_____|@\n   (_)  @\n        @@\n248  LATIN SMALL LETTER O WITH STROKE\n         @\n   ____  @\n  / _//\\ @\n | (//) |@\n  \\//__/ @\n         @@\n249  LATIN SMALL LETTER U WITH GRAVE\n   __   @\n  _\\_\\_ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n250  LATIN SMALL LETTER U WITH ACUTE\n    __  @\n  _/_/_ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n251  LATIN SMALL LETTER U WITH CIRCUMFLEX\n   //\\  @\n  |/ \\| @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n252  LATIN SMALL LETTER U WITH DIAERESIS\n  _   _ @\n (_) (_)@\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n253  LATIN SMALL LETTER Y WITH ACUTE\n    __  @\n  _/_/_ @\n | | | |@\n | |_| |@\n  \\__, |@\n  |___/ @@\n254  LATIN SMALL LETTER THORN\n  _     @\n | |__  @\n | '_ \\ @\n | |_) |@\n | .__/ @\n |_|    @@\n255  LATIN SMALL LETTER Y WITH DIAERESIS\n  _   _ @\n (_) (_)@\n | | | |@\n | |_| |@\n  \\__, |@\n  |___/ @@\n0x0100  LATIN CAPITAL LETTER A WITH MACRON\n   ____ @\n  /___/ @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n0x0101  LATIN SMALL LETTER A WITH MACRON\n    ___ @\n   /_ _/@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n0x0102  LATIN CAPITAL LETTER A WITH BREVE\n  _   _ @\n  \\\\_// @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n        @@\n0x0103  LATIN SMALL LETTER A WITH BREVE\n   \\_/  @\n   ___  @\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n0x0104  LATIN CAPITAL LETTER A WITH OGONEK\n        @\n    _   @\n   /_\\  @\n  / _ \\ @\n /_/ \\_\\@\n     (_(@@\n0x0105  LATIN SMALL LETTER A WITH OGONEK\n        @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__,_|@\n     (_(@@\n0x0106  LATIN CAPITAL LETTER C WITH ACUTE\n     __ @\n   _/_/ @\n  / ___|@\n | |___ @\n  \\____|@\n        @@\n0x0107  LATIN SMALL LETTER C WITH ACUTE\n    __ @\n   /__/@\n  / __|@\n | (__ @\n  \\___|@\n       @@\n0x0108  LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n     /\\ @\n   _//\\\\@\n  / ___|@\n | |___ @\n  \\____|@\n        @@\n0x0109  LATIN SMALL LETTER C WITH CIRCUMFLEX\n    /\\ @\n   /_\\ @\n  / __|@\n | (__ @\n  \\___|@\n       @@\n0x010A  LATIN CAPITAL LETTER C WITH DOT ABOVE\n    []  @\n   ____ @\n  / ___|@\n | |___ @\n  \\____|@\n        @@\n0x010B  LATIN SMALL LETTER C WITH DOT ABOVE\n   []  @\n   ___ @\n  / __|@\n | (__ @\n  \\___|@\n       @@\n0x010C  LATIN CAPITAL LETTER C WITH CARON\n   \\\\// @\n   _\\/_ @\n  / ___|@\n | |___ @\n  \\____|@\n        @@\n0x010D  LATIN SMALL LETTER C WITH CARON\n   \\\\//@\n   _\\/ @\n  / __|@\n | (__ @\n  \\___|@\n       @@\n0x010E  LATIN CAPITAL LETTER D WITH CARON\n   \\\\// @\n  __\\/  @\n |  _ \\ @\n | |_| |@\n |____/ @\n        @@\n0x010F  LATIN SMALL LETTER D WITH CARON\n  \\/  _ @\n   __| |@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n0x0110  LATIN CAPITAL LETTER D WITH STROKE\n   ____   @\n  |_ __ \\ @\n /| |/ | |@\n /|_|/_| |@\n  |_____/ @\n          @@\n0x0111  LATIN SMALL LETTER D WITH STROKE\n    ---|@\n   __| |@\n  / _` |@\n | (_| |@\n  \\__,_|@\n        @@\n0x0112  LATIN CAPITAL LETTER E WITH MACRON\n   ____ @\n  /___/ @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n0x0113  LATIN SMALL LETTER E WITH MACRON\n    ____@\n   /_ _/@\n  / _ \\ @\n |  __/ @\n  \\___| @\n        @@\n0x0114  LATIN CAPITAL LETTER E WITH BREVE\n  _   _ @\n  \\\\_// @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n0x0115  LATIN SMALL LETTER E WITH BREVE\n  \\\\  //@\n    --  @\n  / _ \\ @\n |  __/ @\n  \\___| @\n        @@\n0x0116  LATIN CAPITAL LETTER E WITH DOT ABOVE\n    []  @\n  _____ @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n0x0117  LATIN SMALL LETTER E WITH DOT ABOVE\n    [] @\n    __ @\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n0x0118  LATIN CAPITAL LETTER E WITH OGONEK\n        @\n  _____ @\n | ____|@\n |  _|_ @\n |_____|@\n    (__(@@\n0x0119  LATIN SMALL LETTER E WITH OGONEK\n       @\n   ___ @\n  / _ \\@\n |  __/@\n  \\___|@\n    (_(@@\n0x011A  LATIN CAPITAL LETTER E WITH CARON\n   \\\\// @\n  __\\/_ @\n | ____|@\n |  _|_ @\n |_____|@\n        @@\n0x011B  LATIN SMALL LETTER E WITH CARON\n   \\\\//@\n    \\/ @\n  / _ \\@\n |  __/@\n  \\___|@\n       @@\n0x011C  LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n   _/\\_ @\n  / ___|@\n | |  _ @\n | |_| |@\n  \\____|@\n        @@\n0x011D  LATIN SMALL LETTER G WITH CIRCUMFLEX\n     /\\ @\n   _/_ \\@\n  / _` |@\n | (_| |@\n  \\__, |@\n  |___/ @@\n0x011E  LATIN CAPITAL LETTER G WITH BREVE\n   _\\/_ @\n  / ___|@\n | |  _ @\n | |_| |@\n  \\____|@\n        @@\n0x011F  LATIN SMALL LETTER G WITH BREVE\n  \\___/ @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__, |@\n  |___/ @@\n0x0120  LATIN CAPITAL LETTER G WITH DOT ABOVE\n   _[]_ @\n  / ___|@\n | |  _ @\n | |_| |@\n  \\____|@\n        @@\n0x0121  LATIN SMALL LETTER G WITH DOT ABOVE\n   []   @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__, |@\n  |___/ @@\n0x0122  LATIN CAPITAL LETTER G WITH CEDILLA\n   ____ @\n  / ___|@\n | |  _ @\n | |_| |@\n  \\____|@\n   )__) @@\n0x0123  LATIN SMALL LETTER G WITH CEDILLA\n        @\n   __ _ @\n  / _` |@\n | (_| |@\n  \\__, |@\n  |_))))@@\n0x0124  LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n  _/ \\_ @\n | / \\ |@\n | |_| |@\n |  _  |@\n |_| |_|@\n        @@\n0x0125  LATIN SMALL LETTER H WITH CIRCUMFLEX\n  _  /\\ @\n | |//\\ @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n0x0126  LATIN CAPITAL LETTER H WITH STROKE\n  _   _ @\n | |=| |@\n | |_| |@\n |  _  |@\n |_| |_|@\n        @@\n0x0127  LATIN SMALL LETTER H WITH STROKE\n  _     @\n |=|__  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n0x0128  LATIN CAPITAL LETTER I WITH TILDE\n  /\\//@\n |_ _|@\n  | | @\n  | | @\n |___|@\n      @@\n0x0129  LATIN SMALL LETTER I WITH TILDE\n    @\n /\\/@\n | |@\n | |@\n |_|@\n    @@\n0x012A  LATIN CAPITAL LETTER I WITH MACRON\n /___/@\n |_ _|@\n  | | @\n  | | @\n |___|@\n      @@\n0x012B  LATIN SMALL LETTER I WITH MACRON\n  ____@\n /___/@\n  | | @\n  | | @\n  |_| @\n      @@\n0x012C  LATIN CAPITAL LETTER I WITH BREVE\n  \\__/@\n |_ _|@\n  | | @\n  | | @\n |___|@\n      @@\n0x012D  LATIN SMALL LETTER I WITH BREVE\n    @\n \\_/@\n | |@\n | |@\n |_|@\n    @@\n0x012E  LATIN CAPITAL LETTER I WITH OGONEK\n  ___ @\n |_ _|@\n  | | @\n  | | @\n |___|@\n  (__(@@\n0x012F  LATIN SMALL LETTER I WITH OGONEK\n  _  @\n (_) @\n | | @\n | | @\n |_|_@\n  (_(@@\n0x0130  LATIN CAPITAL LETTER I WITH DOT ABOVE\n  _[] @\n |_ _|@\n  | | @\n  | | @\n |___|@\n      @@\n0x0131  LATIN SMALL LETTER DOTLESS I\n    @\n  _ @\n | |@\n | |@\n |_|@\n    @@\n0x0132  LATIN CAPITAL LIGATURE IJ\n  ___  _ @\n |_ _|| |@\n  | | | |@\n  | |_| |@\n |__|__/ @\n         @@\n0x0133  LATIN SMALL LIGATURE IJ\n  _   _ @\n (_) (_)@\n | | | |@\n | | | |@\n |_|_/ |@\n   |__/ @@\n0x0134  LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n      /\\ @\n     /_\\|@\n  _  | | @\n | |_| | @\n  \\___/  @\n         @@\n0x0135  LATIN SMALL LETTER J WITH CIRCUMFLEX\n    /\\@\n   /_\\@\n   | |@\n   | |@\n  _/ |@\n |__/ @@\n0x0136  LATIN CAPITAL LETTER K WITH CEDILLA\n  _  _  @\n | |/ / @\n | ' /  @\n | . \\  @\n |_|\\_\\ @\n    )__)@@\n0x0137  LATIN SMALL LETTER K WITH CEDILLA\n  _    @\n | | __@\n | |/ /@\n |   < @\n |_|\\_\\@\n    )_)@@\n0x0138  LATIN SMALL LETTER KRA\n       @\n  _ __ @\n | |/ \\@\n |   < @\n |_|\\_\\@\n       @@\n0x0139  LATIN CAPITAL LETTER L WITH ACUTE\n  _   //@\n | | // @\n | |    @\n | |___ @\n |_____|@\n        @@\n0x013A  LATIN SMALL LETTER L WITH ACUTE\n  //@\n | |@\n | |@\n | |@\n |_|@\n    @@\n0x013B  LATIN CAPITAL LETTER L WITH CEDILLA\n  _     @\n | |    @\n | |    @\n | |___ @\n |_____|@\n    )__)@@\n0x013C  LATIN SMALL LETTER L WITH CEDILLA\n  _   @\n | |  @\n | |  @\n | |  @\n |_|  @\n   )_)@@\n0x013D  LATIN CAPITAL LETTER L WITH CARON\n  _ \\\\//@\n | | \\/ @\n | |    @\n | |___ @\n |_____|@\n        @@\n0x013E  LATIN SMALL LETTER L WITH CARON\n  _ \\\\//@\n | | \\/ @\n | |    @\n | |    @\n |_|    @\n        @@\n0x013F  LATIN CAPITAL LETTER L WITH MIDDLE DOT\n  _     @\n | |    @\n | | [] @\n | |___ @\n |_____|@\n        @@\n0x0140  LATIN SMALL LETTER L WITH MIDDLE DOT\n  _    @\n | |   @\n | | []@\n | |   @\n |_|   @\n       @@\n0x0141  LATIN CAPITAL LETTER L WITH STROKE\n  __    @\n | //   @\n |//|   @\n // |__ @\n |_____|@\n        @@\n0x0142  LATIN SMALL LETTER L WITH STROKE\n  _ @\n | |@\n |//@\n //|@\n |_|@\n    @@\n0x0143  LATIN CAPITAL LETTER N WITH ACUTE\n  _/ /_ @\n | \\ | |@\n |  \\| |@\n | |\\  |@\n |_| \\_|@\n        @@\n0x0144  LATIN SMALL LETTER N WITH ACUTE\n     _  @\n  _ /_/ @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n0x0145  LATIN CAPITAL LETTER N WITH CEDILLA\n  _   _ @\n | \\ | |@\n |  \\| |@\n | |\\  |@\n |_| \\_|@\n )_)    @@\n0x0146  LATIN SMALL LETTER N WITH CEDILLA\n        @\n  _ __  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n )_)    @@\n0x0147  LATIN CAPITAL LETTER N WITH CARON\n  _\\/ _ @\n | \\ | |@\n |  \\| |@\n | |\\  |@\n |_| \\_|@\n        @@\n0x0148  LATIN SMALL LETTER N WITH CARON\n  \\\\//  @\n  _\\/_  @\n | '_ \\ @\n | | | |@\n |_| |_|@\n        @@\n0x0149  LATIN SMALL LETTER N PRECEDED BY APOSTROPHE\n          @\n  _  __   @\n ( )| '_\\ @\n |/| | | |@\n   |_| |_|@\n          @@\n0x014A  LATIN CAPITAL LETTER ENG\n  _   _ @\n | \\ | |@\n |  \\| |@\n | |\\  |@\n |_| \\ |@\n     )_)@@\n0x014B  LATIN SMALL LETTER ENG\n  _ __  @\n | '_ \\ @\n | | | |@\n |_| | |@\n     | |@\n    |__ @@\n0x014C  LATIN CAPITAL LETTER O WITH MACRON\n   ____ @\n  /_ _/ @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n0x014D  LATIN SMALL LETTER O WITH MACRON\n   ____ @\n  /_ _/ @\n  / _ \\ @\n | (_) |@\n  \\___/ @\n        @@\n0x014E  LATIN CAPITAL LETTER O WITH BREVE\n  \\   / @\n   _-_  @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n0x014F  LATIN SMALL LETTER O WITH BREVE\n  \\   / @\n   _-_  @\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n0x0150  LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n    ___ @\n   /_/_/@\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n0x0151  LATIN SMALL LETTER O WITH DOUBLE ACUTE\n    ___ @\n   /_/_/@\n  / _ \\ @\n | |_| |@\n  \\___/ @\n        @@\n0x0152  LATIN CAPITAL LIGATURE OE\n   ___  ___ @\n  / _ \\| __|@\n | | | |  | @\n | |_| | |__@\n  \\___/|____@\n            @@\n0x0153  LATIN SMALL LIGATURE OE\n             @\n   ___   ___ @\n  / _ \\ / _ \\@\n | (_) |  __/@\n  \\___/ \\___|@\n             @@\n0x0154  LATIN CAPITAL LETTER R WITH ACUTE\n  _/_/  @\n |  _ \\ @\n | |_) |@\n |  _ < @\n |_| \\_\\@\n        @@\n0x0155  LATIN SMALL LETTER R WITH ACUTE\n     __@\n  _ /_/@\n | '__|@\n | |   @\n |_|   @\n       @@\n0x0156  LATIN CAPITAL LETTER R WITH CEDILLA\n  ____  @\n |  _ \\ @\n | |_) |@\n |  _ < @\n |_| \\_\\@\n )_)    @@\n0x0157  LATIN SMALL LETTER R WITH CEDILLA\n       @\n  _ __ @\n | '__|@\n | |   @\n |_|   @\n   )_) @@\n0x0158  LATIN CAPITAL LETTER R WITH CARON\n  _\\_/  @\n |  _ \\ @\n | |_) |@\n |  _ < @\n |_| \\_\\@\n        @@\n0x0159  LATIN SMALL LETTER R WITH CARON\n  \\\\// @\n  _\\/_ @\n | '__|@\n | |   @\n |_|   @\n       @@\n0x015A  LATIN CAPITAL LETTER S WITH ACUTE\n  _/_/  @\n / ___| @\n \\___ \\ @\n  ___) |@\n |____/ @\n        @@\n0x015B  LATIN SMALL LETTER S WITH ACUTE\n    __@\n  _/_/@\n / __|@\n \\__ \\@\n |___/@\n      @@\n0x015C  LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n  _/\\_  @\n / ___| @\n \\___ \\ @\n  ___) |@\n |____/ @\n        @@\n0x015D  LATIN SMALL LETTER S WITH CIRCUMFLEX\n      @\n  /_\\_@\n / __|@\n \\__ \\@\n |___/@\n      @@\n0x015E  LATIN CAPITAL LETTER S WITH CEDILLA\n  ____  @\n / ___| @\n \\___ \\ @\n  ___) |@\n |____/ @\n    )__)@@\n0x015F  LATIN SMALL LETTER S WITH CEDILLA\n      @\n  ___ @\n / __|@\n \\__ \\@\n |___/@\n   )_)@@\n0x0160  LATIN CAPITAL LETTER S WITH CARON\n  _\\_/  @\n / ___| @\n \\___ \\ @\n  ___) |@\n |____/ @\n        @@\n0x0161  LATIN SMALL LETTER S WITH CARON\n  \\\\//@\n  _\\/ @\n / __|@\n \\__ \\@\n |___/@\n      @@\n0x0162  LATIN CAPITAL LETTER T WITH CEDILLA\n  _____ @\n |_   _|@\n   | |  @\n   | |  @\n   |_|  @\n    )__)@@\n0x0163  LATIN SMALL LETTER T WITH CEDILLA\n  _   @\n | |_ @\n | __|@\n | |_ @\n  \\__|@\n   )_)@@\n0x0164  LATIN CAPITAL LETTER T WITH CARON\n  _____ @\n |_   _|@\n   | |  @\n   | |  @\n   |_|  @\n        @@\n0x0165  LATIN SMALL LETTER T WITH CARON\n  \\/  @\n | |_ @\n | __|@\n | |_ @\n  \\__|@\n      @@\n0x0166  LATIN CAPITAL LETTER T WITH STROKE\n  _____ @\n |_   _|@\n   | |  @\n  -|-|- @\n   |_|  @\n        @@\n0x0167  LATIN SMALL LETTER T WITH STROKE\n  _   @\n | |_ @\n | __|@\n |-|_ @\n  \\__|@\n      @@\n0x0168  LATIN CAPITAL LETTER U WITH TILDE\n        @\n  _/\\/_ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n0x0169  LATIN SMALL LETTER U WITH TILDE\n        @\n  _/\\/_ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n0x016A  LATIN CAPITAL LETTER U WITH MACRON\n   ____ @\n  /__ _/@\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n0x016B  LATIN SMALL LETTER U WITH MACRON\n   ____ @\n  / _  /@\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n0x016C  LATIN CAPITAL LETTER U WITH BREVE\n        @\n   \\_/_ @\n | | | |@\n | |_| |@\n  \\____|@\n        @@\n0x016D  LATIN SMALL LETTER U WITH BREVE\n        @\n   \\_/_ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n0x016E  LATIN CAPITAL LETTER U WITH RING ABOVE\n    O   @\n  __  _ @\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n0x016F  LATIN SMALL LETTER U WITH RING ABOVE\n    O   @\n  __ __ @\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n0x0170  LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n   -- --@\n  /_//_/@\n | | | |@\n | |_| |@\n  \\___/ @\n        @@\n0x0171  LATIN SMALL LETTER U WITH DOUBLE ACUTE\n    ____@\n  _/_/_/@\n | | | |@\n | |_| |@\n  \\__,_|@\n        @@\n0x0172  LATIN CAPITAL LETTER U WITH OGONEK\n  _   _ @\n | | | |@\n | | | |@\n | |_| |@\n  \\___/ @\n    (__(@@\n0x0173  LATIN SMALL LETTER U WITH OGONEK\n        @\n  _   _ @\n | | | |@\n | |_| |@\n  \\__,_|@\n     (_(@@\n0x0174  LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n __    /\\  __@\n \\ \\  //\\\\/ /@\n  \\ \\ /\\ / / @\n   \\ V  V /  @\n    \\_/\\_/   @\n             @@\n0x0175  LATIN SMALL LETTER W WITH CIRCUMFLEX\n      /\\   @\n __  //\\\\__@\n \\ \\ /\\ / /@\n  \\ V  V / @\n   \\_/\\_/  @\n           @@\n0x0176  LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n    /\\  @\n __//\\\\ @\n \\ \\ / /@\n  \\ V / @\n   |_|  @\n        @@\n0x0177  LATIN SMALL LETTER Y WITH CIRCUMFLEX\n    /\\  @\n   //\\\\ @\n | | | |@\n | |_| |@\n  \\__, |@\n  |___/ @@\n0x0178  LATIN CAPITAL LETTER Y WITH DIAERESIS\n  []  []@\n __    _@\n \\ \\ / /@\n  \\ V / @\n   |_|  @\n        @@\n0x0179  LATIN CAPITAL LETTER Z WITH ACUTE\n  __/_/@\n |__  /@\n   / / @\n  / /_ @\n /____|@\n       @@\n0x017A  LATIN SMALL LETTER Z WITH ACUTE\n    _ @\n  _/_/@\n |_  /@\n  / / @\n /___|@\n      @@\n0x017B  LATIN CAPITAL LETTER Z WITH DOT ABOVE\n  __[]_@\n |__  /@\n   / / @\n  / /_ @\n /____|@\n       @@\n0x017C  LATIN SMALL LETTER Z WITH DOT ABOVE\n   [] @\n  ____@\n |_  /@\n  / / @\n /___|@\n      @@\n0x017D  LATIN CAPITAL LETTER Z WITH CARON\n  _\\_/_@\n |__  /@\n   / / @\n  / /_ @\n /____|@\n       @@\n0x017E  LATIN SMALL LETTER Z WITH CARON\n  \\\\//@\n  _\\/_@\n |_  /@\n  / / @\n /___|@\n      @@\n0x017F  LATIN SMALL LETTER LONG S\n     __ @\n    / _|@\n |-| |  @\n |-| |  @\n   |_|  @\n        @@\n0x02C7  CARON\n \\\\//@\n  \\/ @\n    $@\n    $@\n    $@\n    $@@\n0x02D8  BREVE\n \\\\_//@\n  \\_/ @\n     $@\n     $@\n     $@\n     $@@\n0x02D9  DOT ABOVE\n []@\n  $@\n  $@\n  $@\n  $@\n  $@@\n0x02DB  OGONEK\n    $@\n    $@\n    $@\n    $@\n    $@\n )_) @@\n0x02DD  DOUBLE ACUTE ACCENT\n  _ _ @\n /_/_/@\n     $@\n     $@\n     $@\n     $@@"
  },
  {
    "path": "src/Spectre.Console/Widgets/Grid.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable grid.\n/// </summary>\npublic sealed class Grid : JustInTimeRenderable, IExpandable\n{\n    private readonly ListWithCallback<GridColumn> _columns;\n    private readonly ListWithCallback<GridRow> _rows;\n\n    private bool _expand;\n    private bool _padRightCell;\n\n    /// <summary>\n    /// Gets the grid columns.\n    /// </summary>\n    public IReadOnlyList<GridColumn> Columns => _columns;\n\n    /// <summary>\n    /// Gets the grid rows.\n    /// </summary>\n    public IReadOnlyList<GridRow> Rows => _rows;\n\n    /// <inheritdoc/>\n    public bool Expand\n    {\n        get => _expand;\n        set => MarkAsDirty(() => _expand = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the width of the grid.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Grid\"/> class.\n    /// </summary>\n    public Grid()\n    {\n        _expand = false;\n        _columns = new ListWithCallback<GridColumn>(MarkAsDirty);\n        _rows = new ListWithCallback<GridRow>(MarkAsDirty);\n    }\n\n    /// <summary>\n    /// Adds a column to the grid.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Grid AddColumn()\n    {\n        AddColumn(new GridColumn());\n        return this;\n    }\n\n    /// <summary>\n    /// Adds a column to the grid.\n    /// </summary>\n    /// <param name=\"column\">The column to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Grid AddColumn(GridColumn column)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        if (_rows.Count > 0)\n        {\n            throw new InvalidOperationException(\"Cannot add new columns to grid with existing rows.\");\n        }\n\n        // Only pad the most right cell if we've explicitly set a padding.\n        _padRightCell = column.HasExplicitPadding;\n\n        _columns.Add(column);\n\n        return this;\n    }\n\n    /// <summary>\n    /// Adds a new row to the grid.\n    /// </summary>\n    /// <param name=\"columns\">The columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Grid AddRow(params IRenderable[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(columns);\n\n        if (columns.Length > _columns.Count)\n        {\n            throw new InvalidOperationException(\"The number of row columns are greater than the number of grid columns.\");\n        }\n\n        _rows.Add(new GridRow(columns));\n        return this;\n    }\n\n    /// <inheritdoc/>\n    protected override bool HasDirtyChildren()\n    {\n        return _columns.Any(c => ((IHasDirtyState)c).IsDirty);\n    }\n\n    /// <inheritdoc/>\n    protected override IRenderable Build()\n    {\n        var table = new Table\n        {\n            Border = TableBorder.None,\n            ShowHeaders = false,\n            IsGrid = true,\n            PadRightCell = _padRightCell,\n            Width = Width,\n        };\n\n        foreach (var column in _columns)\n        {\n            table.AddColumn(new TableColumn(string.Empty)\n            {\n                Width = column.Width,\n                NoWrap = column.NoWrap,\n                Padding = column.Padding ?? new Padding(0, 0, 2, 0),\n                Alignment = column.Alignment,\n            });\n        }\n\n        foreach (var row in _rows)\n        {\n            table.AddRow(row);\n        }\n\n        return table;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Grid\"/>.\n/// </summary>\npublic static class GridExtensions\n{\n    /// <summary>\n    /// Adds a column to the grid.\n    /// </summary>\n    /// <param name=\"grid\">The grid to add the column to.</param>\n    /// <param name=\"count\">The number of columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Grid AddColumns(this Grid grid, int count)\n    {\n        ArgumentNullException.ThrowIfNull(grid);\n\n        for (var index = 0; index < count; index++)\n        {\n            grid.AddColumn(new GridColumn());\n        }\n\n        return grid;\n    }\n\n    /// <summary>\n    /// Adds a column to the grid.\n    /// </summary>\n    /// <param name=\"grid\">The grid to add the column to.</param>\n    /// <param name=\"columns\">The columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Grid AddColumns(this Grid grid, params GridColumn[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(grid);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        foreach (var column in columns)\n        {\n            grid.AddColumn(column);\n        }\n\n        return grid;\n    }\n\n    /// <summary>\n    /// Adds an empty row to the grid.\n    /// </summary>\n    /// <param name=\"grid\">The grid to add the row to.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Grid AddEmptyRow(this Grid grid)\n    {\n        ArgumentNullException.ThrowIfNull(grid);\n\n        var columns = new IRenderable[grid.Columns.Count];\n        Enumerable.Range(0, grid.Columns.Count).ForEach(index => columns[index] = Text.Empty);\n        grid.AddRow(columns);\n\n        return grid;\n    }\n\n    /// <summary>\n    /// Adds a new row to the grid.\n    /// </summary>\n    /// <param name=\"grid\">The grid to add the row to.</param>\n    /// <param name=\"columns\">The columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Grid AddRow(this Grid grid, params string[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(grid);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        grid.AddRow(columns.Select(column => new Markup(column)).ToArray());\n        return grid;\n    }\n\n    /// <summary>\n    /// Sets the grid width.\n    /// </summary>\n    /// <param name=\"grid\">The grid.</param>\n    /// <param name=\"width\">The width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Grid Width(this Grid grid, int? width)\n    {\n        ArgumentNullException.ThrowIfNull(grid);\n\n        grid.Width = width;\n        return grid;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/GridColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a grid column.\n/// </summary>\npublic sealed class GridColumn : IColumn, IHasDirtyState\n{\n    private bool _isDirty;\n    private int? _width;\n    private bool _noWrap;\n    private Padding? _padding;\n    private Justify? _alignment;\n\n    /// <inheritdoc/>\n    bool IHasDirtyState.IsDirty => _isDirty;\n\n    /// <summary>\n    /// Gets or sets the width of the column.\n    /// If <c>null</c>, the column will adapt to its contents.\n    /// </summary>\n    public int? Width\n    {\n        get => _width;\n        set => MarkAsDirty(() => _width = value);\n    }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether wrapping of\n    /// text within the column should be prevented.\n    /// </summary>\n    public bool NoWrap\n    {\n        get => _noWrap;\n        set => MarkAsDirty(() => _noWrap = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the padding of the column.\n    /// Vertical padding (top and bottom) is ignored.\n    /// </summary>\n    public Padding? Padding\n    {\n        get => _padding;\n        set => MarkAsDirty(() => _padding = value);\n    }\n\n    /// <summary>\n    /// Gets or sets the alignment of the column.\n    /// </summary>\n    public Justify? Alignment\n    {\n        get => _alignment;\n        set => MarkAsDirty(() => _alignment = value);\n    }\n\n    /// <summary>\n    /// Gets a value indicating whether the user\n    /// has set an explicit padding for this column.\n    /// </summary>\n    internal bool HasExplicitPadding => Padding != null;\n\n    private void MarkAsDirty(Action action)\n    {\n        action();\n        _isDirty = true;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/GridRow.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a grid row.\n/// </summary>\npublic sealed class GridRow : IEnumerable<IRenderable>\n{\n    private readonly List<IRenderable> _items;\n\n    /// <summary>\n    /// Gets a row item at the specified grid column index.\n    /// </summary>\n    /// <param name=\"index\">The grid column index.</param>\n    /// <returns>The row item at the specified grid column index.</returns>\n    public IRenderable this[int index]\n    {\n        get => _items[index];\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"GridRow\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The row items.</param>\n    public GridRow(IEnumerable<IRenderable> items)\n    {\n        _items = new List<IRenderable>(items ?? []);\n    }\n\n    internal void Add(IRenderable item)\n    {\n        ArgumentNullException.ThrowIfNull(item);\n\n        _items.Add(item);\n    }\n\n    /// <inheritdoc/>\n    public IEnumerator<IRenderable> GetEnumerator()\n    {\n        return _items.GetEnumerator();\n    }\n\n    /// <inheritdoc/>\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Layout/Layout.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a renderable to divide a fixed height into rows or columns.\n/// </summary>\npublic sealed class Layout : Renderable, IRatioResolvable, IHasVisibility\n{\n    private LayoutSplitter _splitter;\n    private Layout[] _children;\n    private IRenderable _renderable;\n    private int _ratio;\n    private int _minimumSize;\n    private int? _size;\n\n    /// <summary>\n    /// Gets or sets the name.\n    /// </summary>\n    public string? Name { get; set; }\n\n    /// <summary>\n    /// Gets or sets the ratio.\n    /// </summary>\n    /// <remarks>\n    /// Defaults to <c>1</c>.\n    /// Must be greater than <c>0</c>.\n    /// </remarks>\n    public int Ratio\n    {\n        get => _ratio;\n        set\n        {\n            if (value < 1)\n            {\n                throw new InvalidOperationException(\"Ratio must be equal to or greater than 1\");\n            }\n\n            _ratio = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the minimum width.\n    /// </summary>\n    /// <remarks>\n    /// Defaults to <c>1</c>.\n    /// Must be greater than <c>0</c>.\n    /// </remarks>\n    public int MinimumSize\n    {\n        get => _minimumSize;\n        set\n        {\n            if (value < 1)\n            {\n                throw new InvalidOperationException(\"Minimum size must be equal to or greater than 1\");\n            }\n\n            _minimumSize = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the width.\n    /// </summary>\n    /// <remarks>\n    /// Defaults to <c>null</c>.\n    /// Must be greater than <c>0</c>.\n    /// </remarks>\n    public int? Size\n    {\n        get => _size;\n        set\n        {\n            if (value < 1)\n            {\n                throw new InvalidOperationException(\"Size must be equal to or greater than 1\");\n            }\n\n            _size = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the layout should\n    /// be visible or not.\n    /// </summary>\n    /// <remarks>Defaults to <c>true</c>.</remarks>\n    public bool IsVisible { get; set; } = true;\n\n    /// <summary>\n    /// Gets the splitter used for this layout.\n    /// </summary>\n    internal LayoutSplitter Splitter => _splitter;\n\n    /// <summary>\n    /// Gets the <see cref=\"IRenderable\"/> associated with this layout.\n    /// </summary>\n    internal IRenderable Renderable => _renderable;\n\n    /// <summary>\n    /// Gets a child layout by it's name.\n    /// </summary>\n    /// <param name=\"name\">The layout name.</param>\n    /// <returns>The specified child <see cref=\"Layout\"/>.</returns>\n    public Layout this[string name]\n    {\n        get => GetLayout(name);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Layout\"/> class.\n    /// </summary>\n    /// <param name=\"name\">The layout name.</param>\n    public Layout(string name)\n        : this(name, null)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Layout\"/> class.\n    /// </summary>\n    /// <param name=\"renderable\">The renderable.</param>\n    public Layout(IRenderable renderable)\n        : this(null, renderable)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Layout\"/> class.\n    /// </summary>\n    /// <param name=\"name\">The layout name.</param>\n    /// <param name=\"renderable\">The renderable.</param>\n    public Layout(string? name = null, IRenderable? renderable = null)\n    {\n        _splitter = LayoutSplitter.Null;\n        _children = [];\n        _renderable = renderable ?? new LayoutPlaceholder(this);\n        _ratio = 1;\n        _size = null;\n\n        Name = name;\n    }\n\n    /// <summary>\n    /// Gets a child layout by it's name.\n    /// </summary>\n    /// <param name=\"name\">The layout name.</param>\n    /// <returns>The specified child <see cref=\"Layout\"/>.</returns>\n    public Layout GetLayout(string name)\n    {\n        if (string.IsNullOrEmpty(name))\n        {\n            throw new ArgumentException($\"'{nameof(name)}' cannot be null or empty.\", nameof(name));\n        }\n\n        var stack = new Stack<Layout>();\n        stack.Push(this);\n\n        while (stack.Count > 0)\n        {\n            var current = stack.Pop();\n            if (name.Equals(current.Name, StringComparison.OrdinalIgnoreCase))\n            {\n                return current;\n            }\n\n            foreach (var layout in current.GetChildren())\n            {\n                stack.Push(layout);\n            }\n        }\n\n        throw new InvalidOperationException($\"Could not find layout '{name}'\");\n    }\n\n    /// <summary>\n    /// Splits the layout into rows.\n    /// </summary>\n    /// <param name=\"children\">The layout to split into rows.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Layout SplitRows(params Layout[] children)\n    {\n        Split(LayoutSplitter.Row, children);\n        return this;\n    }\n\n    /// <summary>\n    /// Splits the layout into columns.\n    /// </summary>\n    /// <param name=\"children\">The layout to split into columns.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Layout SplitColumns(params Layout[] children)\n    {\n        Split(LayoutSplitter.Column, children);\n        return this;\n    }\n\n    /// <summary>\n    /// Updates the containing <see cref=\"IRenderable\"/>.\n    /// </summary>\n    /// <param name=\"renderable\">The renderable to use for this layout.</param>\n    /// /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Layout Update(IRenderable renderable)\n    {\n        _renderable = renderable ?? new LayoutPlaceholder(this);\n        return this;\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var height = options.Height ?? options.ConsoleSize.Height;\n        var map = MakeRenderMap(options, maxWidth);\n\n        var layoutLines = new List<SegmentLine>();\n        layoutLines.AddRange(Enumerable.Range(0, height).Select(x => new SegmentLine()));\n\n        foreach (var (region, lines) in map.Values.Select(x => (x.Region, x.Render)))\n        {\n            foreach (var line in layoutLines\n                .Skip(region.Y)\n                .Take(region.Y + region.Height)\n                .Enumerate().Select(x => (Index: x.Index + region.Y, Line: x.Item))\n                .Zip(lines, (first, second) => (first.Index, Line: second)))\n            {\n                layoutLines[line.Index].AddRange(line.Line);\n            }\n        }\n\n        // Return all the segments in all the lines\n        foreach (var (_, _, last, line) in layoutLines.Enumerate())\n        {\n            foreach (var segment in line)\n            {\n                yield return segment;\n            }\n\n            if (!last)\n            {\n                yield return Segment.LineBreak;\n            }\n        }\n    }\n\n    private IEnumerable<Layout> GetChildren(bool visibleOnly = false)\n    {\n        return visibleOnly ? _children.Where(c => c.IsVisible) : _children;\n    }\n\n    private bool HasChildren(bool visibleOnly = false)\n    {\n        return visibleOnly ? _children.Any(c => c.IsVisible) : _children.Any();\n    }\n\n    private void Split(LayoutSplitter splitter, Layout[] layouts)\n    {\n        if (_children.Length > 0)\n        {\n            throw new InvalidOperationException(\"Cannot split the same layout twice\");\n        }\n\n        _splitter = splitter ?? throw new ArgumentNullException(nameof(splitter));\n        _children = layouts ?? throw new ArgumentNullException(nameof(layouts));\n    }\n\n    private Dictionary<Layout, LayoutRender> MakeRenderMap(RenderOptions options, int maxWidth)\n    {\n        var result = new Dictionary<Layout, LayoutRender>();\n\n        var renderWidth = maxWidth;\n        var renderHeight = options.Height ?? options.ConsoleSize.Height;\n        var regionMap = MakeRegionMap(maxWidth, renderHeight);\n\n        foreach (var (layout, region) in regionMap.Where(x => !x.Layout.HasChildren(visibleOnly: true)))\n        {\n            var segments = layout.Renderable.Render(options with { Height = region.Height }, region.Width);\n\n            var lines = Segment.SplitLines(segments, region.Width, region.Height);\n            lines = Segment.MakeWidth(region.Width, lines);\n\n            result[layout] = new LayoutRender(region, lines);\n        }\n\n        return result;\n    }\n\n    private IEnumerable<(Layout Layout, Region Region)> MakeRegionMap(int width, int height)\n    {\n        var stack = new Stack<(Layout Layout, Region Region)>();\n        stack.Push((this, new Region(0, 0, width, height)));\n\n        var result = new List<(Layout Layout, Region Region)>();\n\n        while (stack.Count > 0)\n        {\n            var current = stack.Pop();\n            result.Add(current);\n\n            if (current.Layout.HasChildren(visibleOnly: true))\n            {\n                foreach (var childAndRegion in current.Layout.Splitter\n                    .Divide(current.Region, current.Layout.GetChildren(visibleOnly: true)))\n                {\n                    stack.Push(childAndRegion);\n                }\n            }\n        }\n\n        return result.ReverseEnumerable();\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Layout\"/>.\n/// </summary>\npublic static class LayoutExtensions\n{\n    /// <summary>\n    /// Sets the ratio of the layout.\n    /// </summary>\n    /// <param name=\"layout\">The layout.</param>\n    /// <param name=\"ratio\">The ratio.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Layout Ratio(this Layout layout, int ratio)\n    {\n        ArgumentNullException.ThrowIfNull(layout);\n\n        layout.Ratio = ratio;\n        return layout;\n    }\n\n    /// <summary>\n    /// Sets the size of the layout.\n    /// </summary>\n    /// <param name=\"layout\">The layout.</param>\n    /// <param name=\"size\">The size.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Layout Size(this Layout layout, int size)\n    {\n        ArgumentNullException.ThrowIfNull(layout);\n\n        layout.Size = size;\n        return layout;\n    }\n\n    /// <summary>\n    /// Sets the minimum width of the layout.\n    /// </summary>\n    /// <param name=\"layout\">The layout.</param>\n    /// <param name=\"size\">The size.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Layout MinimumSize(this Layout layout, int size)\n    {\n        ArgumentNullException.ThrowIfNull(layout);\n\n        layout.MinimumSize = size;\n        return layout;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Layout/LayoutPlaceholder.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class LayoutPlaceholder : Renderable\n{\n    public Layout Layout { get; }\n\n    public LayoutPlaceholder(Layout layout)\n    {\n        Layout = layout ?? throw new ArgumentNullException(nameof(layout));\n    }\n\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var width = maxWidth;\n        var height = options.Height ?? options.ConsoleSize.Height;\n        var title = Layout.Name != null\n            ? $\"{Layout.Name} ({width} x {height})\"\n            : $\"{width} x {height}\";\n\n        var panel = new Panel(\n            Align.Center(new Text(\"Placeholder\"), VerticalAlignment.Middle))\n        {\n            Width = maxWidth,\n            Height = options.Height ?? options.ConsoleSize.Height,\n            Header = new PanelHeader(title),\n            Border = BoxBorder.Rounded,\n        };\n\n        return ((IRenderable)panel).Render(options, maxWidth);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Layout/LayoutRender.cs",
    "content": "namespace Spectre.Console;\n\n[DebuggerDisplay(\"{Region,nq}\")]\ninternal sealed class LayoutRender\n{\n    public Region Region { get; }\n    public List<SegmentLine> Render { get; }\n\n    public LayoutRender(Region region, List<SegmentLine> render)\n    {\n        Region = region;\n        Render = render ?? throw new ArgumentNullException(nameof(render));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Layout/LayoutSplitter.cs",
    "content": "namespace Spectre.Console;\n\ninternal abstract class LayoutSplitter\n{\n    public static LayoutSplitter Column { get; } = new ColumnSplitter();\n    public static LayoutSplitter Row { get; } = new RowSplitter();\n    public static LayoutSplitter Null { get; } = new NullSplitter();\n\n    public abstract IEnumerable<(Layout Child, Region Region)> Divide(Region region, IEnumerable<Layout> layouts);\n\n    private sealed class NullSplitter : LayoutSplitter\n    {\n        public override IEnumerable<(Layout Child, Region Region)> Divide(Region region, IEnumerable<Layout> layouts)\n        {\n            yield break;\n        }\n    }\n\n    private sealed class ColumnSplitter : LayoutSplitter\n    {\n        public override IEnumerable<(Layout Child, Region Region)> Divide(Region region, IEnumerable<Layout> children)\n        {\n            var widths = Ratio.Resolve(region.Width, children);\n            var offset = 0;\n\n            foreach (var (child, childWidth) in children.Zip(widths, (child, width) => (child, width)))\n            {\n                yield return (child, new Region(region.X + offset, region.Y, childWidth, region.Height));\n                offset += childWidth;\n            }\n        }\n    }\n\n    private sealed class RowSplitter : LayoutSplitter\n    {\n        public override IEnumerable<(Layout Child, Region Region)> Divide(Region region, IEnumerable<Layout> children)\n        {\n            var heights = Ratio.Resolve(region.Height, children);\n            var offset = 0;\n\n            foreach (var (child, childHeight) in children.Zip(heights, (child, height) => (child, height)))\n            {\n                yield return (child, new Region(region.X, region.Y + offset, region.Width, childHeight));\n                offset += childHeight;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Markup.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable piece of markup text.\n/// </summary>\n[SuppressMessage(\"Naming\", \"CA1724:Type names should not match namespaces\")]\npublic sealed class Markup : Renderable, IHasJustification, IOverflowable\n{\n    private readonly Paragraph _paragraph;\n\n    /// <inheritdoc/>\n    public Justify? Justification\n    {\n        get => _paragraph.Justification;\n        set => _paragraph.Justification = value;\n    }\n\n    /// <inheritdoc/>\n    public Overflow? Overflow\n    {\n        get => _paragraph.Overflow;\n        set => _paragraph.Overflow = value;\n    }\n\n    /// <summary>\n    /// Gets the character count.\n    /// </summary>\n    public int Length => _paragraph.Length;\n\n    /// <summary>\n    /// Gets the number of lines.\n    /// </summary>\n    public int Lines => _paragraph.Lines;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Markup\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The markup text.</param>\n    /// <param name=\"style\">The style of the text.</param>\n    public Markup(string text, Style? style = null)\n    {\n        _paragraph = new Paragraph();\n        foreach (var segment in AnsiMarkup.Parse(text, style))\n        {\n            _paragraph.Append(Emoji.Replace(segment.Text), segment.Style, segment.Link);\n        }\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        return ((IRenderable)_paragraph).Measure(options, maxWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        return ((IRenderable)_paragraph).Render(options, maxWidth);\n    }\n\n    /// <summary>\n    /// Returns a new instance of a Markup widget from an interpolated string.\n    /// </summary>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    /// <param name=\"style\">The style of the text.</param>\n    /// <returns>A new markup instance.</returns>\n    public static Markup FromInterpolated(FormattableString value, Style? style = null)\n    {\n        return FromInterpolated(CultureInfo.CurrentCulture, value, style);\n    }\n\n    /// <summary>\n    /// Returns a new instance of a Markup widget from an interpolated string.\n    /// </summary>\n    /// <param name=\"provider\">The format provider to use.</param>\n    /// <param name=\"value\">The interpolated string value to write.</param>\n    /// <param name=\"style\">The style of the text.</param>\n    /// <returns>A new markup instance.</returns>\n    public static Markup FromInterpolated(IFormatProvider provider, FormattableString value, Style? style = null)\n    {\n        return new Markup(EscapeInterpolated(provider, value), style);\n    }\n\n    /// <summary>\n    /// Escapes text so that it won’t be interpreted as markup.\n    /// </summary>\n    /// <param name=\"text\">The text to escape.</param>\n    /// <returns>A string that is safe to use in markup.</returns>\n    public static string Escape(string text)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        return text.EscapeMarkup();\n    }\n\n    /// <summary>\n    /// Removes markup from the specified string.\n    /// </summary>\n    /// <param name=\"text\">The text to remove markup from.</param>\n    /// <returns>A string that does not have any markup.</returns>\n    public static string Remove(string text)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        return text.RemoveMarkup();\n    }\n\n    internal static string EscapeInterpolated(IFormatProvider provider, FormattableString value)\n    {\n        object?[] args = value.GetArguments().Select(arg => arg is string s ? s.EscapeMarkup() : arg).ToArray();\n        return string.Format(provider, value.Format, args);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Padder.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents padding around a <see cref=\"IRenderable\"/> object.\n/// </summary>\npublic sealed class Padder : Renderable, IPaddable, IExpandable\n{\n    private readonly IRenderable _child;\n\n    /// <inheritdoc/>\n    public Padding? Padding { get; set; } = new Padding(1, 1, 1, 1);\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the padding should\n    /// fit the available space. If <c>false</c>, the padding width will be\n    /// auto calculated. Defaults to <c>false</c>.\n    /// </summary>\n    public bool Expand { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Padder\"/> class.\n    /// </summary>\n    /// <param name=\"child\">The thing to pad.</param>\n    /// <param name=\"padding\">The padding. Defaults to <c>1,1,1,1</c> if null.</param>\n    public Padder(IRenderable child, Padding? padding = null)\n    {\n        _child = child;\n        Padding = padding ?? Padding;\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var paddingWidth = Padding?.GetWidth() ?? 0;\n        var measurement = _child.Measure(options, maxWidth - paddingWidth);\n\n        return new Measurement(\n            measurement.Min + paddingWidth,\n            measurement.Max + paddingWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var paddingWidth = Padding?.GetWidth() ?? 0;\n        var childWidth = maxWidth - paddingWidth;\n\n        if (!Expand)\n        {\n            var measurement = _child.Measure(options, maxWidth - paddingWidth);\n            childWidth = measurement.Max;\n        }\n\n        var width = childWidth + paddingWidth;\n        var result = new List<Segment>();\n\n        if (width > maxWidth)\n        {\n            width = maxWidth;\n        }\n\n        // Top padding\n        for (var i = 0; i < Padding.GetTopSafe(); i++)\n        {\n            result.Add(Segment.Padding(width));\n            result.Add(Segment.LineBreak);\n        }\n\n        var child = _child.Render(options, maxWidth - paddingWidth);\n        foreach (var line in Segment.SplitLines(child))\n        {\n            // Left padding\n            if (Padding.GetLeftSafe() != 0)\n            {\n                result.Add(Segment.Padding(Padding.GetLeftSafe()));\n            }\n\n            result.AddRange(line);\n\n            // Right padding\n            if (Padding.GetRightSafe() != 0)\n            {\n                result.Add(Segment.Padding(Padding.GetRightSafe()));\n            }\n\n            // Missing space on right side?\n            var lineWidth = line.CellCount();\n            var diff = width - lineWidth - Padding.GetLeftSafe() - Padding.GetRightSafe();\n            if (diff > 0)\n            {\n                result.Add(Segment.Padding(diff));\n            }\n\n            result.Add(Segment.LineBreak);\n        }\n\n        // Bottom padding\n        for (var i = 0; i < Padding.GetBottomSafe(); i++)\n        {\n            result.Add(Segment.Padding(width));\n            result.Add(Segment.LineBreak);\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Panel.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable panel.\n/// </summary>\npublic sealed class Panel : Renderable, IHasBoxBorder, IHasBorder, IExpandable, IPaddable\n{\n    private const int EdgeWidth = 2;\n\n    private readonly IRenderable _child;\n\n    /// <inheritdoc/>\n    public BoxBorder Border { get; set; } = BoxBorder.Square;\n\n    /// <inheritdoc/>\n    public bool UseSafeBorder { get; set; } = true;\n\n    /// <inheritdoc/>\n    public Style? BorderStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the panel should\n    /// fit the available space. If <c>false</c>, the panel width will be\n    /// auto calculated. Defaults to <c>false</c>.\n    /// </summary>\n    public bool Expand { get; set; }\n\n    /// <summary>\n    /// Gets or sets the padding.\n    /// </summary>\n    public Padding? Padding { get; set; } = new Padding(1, 0, 1, 0);\n\n    /// <summary>\n    /// Gets or sets the header.\n    /// </summary>\n    public PanelHeader? Header { get; set; }\n\n    /// <summary>\n    /// Gets or sets the width of the panel.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets the height of the panel.\n    /// </summary>\n    public int? Height { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the panel is inlined.\n    /// </summary>\n    internal bool Inline { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Panel\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The panel content.</param>\n    public Panel(string text)\n        : this(new Markup(text))\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Panel\"/> class.\n    /// </summary>\n    /// <param name=\"content\">The panel content.</param>\n    public Panel(IRenderable content)\n    {\n        _child = content ?? throw new ArgumentNullException(nameof(content));\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var child = new Padder(_child, Padding);\n        return Measure(options, maxWidth, child);\n    }\n\n    private Measurement Measure(RenderOptions options, int maxWidth, IRenderable child)\n    {\n        var edgeWidth = (options.GetSafeBorder(this) is not NoBoxBorder) ? EdgeWidth : 0;\n        var childWidth = child.Measure(options, maxWidth - edgeWidth);\n\n        if (Width != null)\n        {\n            var width = Width.Value - edgeWidth;\n\n            // If Width is specified, constrain or expand the measurement\n            // to exactly the specified width (clamped by maxWidth)\n            var constrainedWidth = Math.Min(width, maxWidth - edgeWidth);\n            childWidth = new Measurement(\n                Math.Min(childWidth.Min, constrainedWidth),\n                constrainedWidth);\n        }\n\n        return new Measurement(\n            childWidth.Min + edgeWidth,\n            childWidth.Max + edgeWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var border = options.GetSafeBorder(this);\n        var borderStyle = BorderStyle ?? Style.Plain;\n\n        var showBorder = border is not NoBoxBorder;\n        var edgeWidth = showBorder ? EdgeWidth : 0;\n\n        var child = new Padder(_child, Padding);\n        var width = Measure(options, maxWidth, child);\n\n        var panelWidth = Math.Min(!Expand ? width.Max : maxWidth, maxWidth);\n        var innerWidth = panelWidth - edgeWidth;\n\n        var height = Height != null\n            ? Height - 2\n            : options.Height != null\n                ? options.Height - 2\n                : null;\n\n        if (!Expand)\n        {\n            // Set the height to the explicit height (or null)\n            // if the panel isn't expandable.\n            height = Height != null ? Height - 2 : null;\n        }\n\n        // Start building the panel\n        var result = new List<Segment>();\n\n        // Panel top\n        if (showBorder)\n        {\n            AddTopBorder(result, options, border, borderStyle, panelWidth);\n        }\n        else\n        {\n            // Not showing border, but we have a header text?\n            // Use a invisible border to draw the top border\n            if (Header?.Text != null)\n            {\n                AddTopBorder(result, options, BoxBorder.None, borderStyle, panelWidth);\n            }\n        }\n\n        // Split the child segments into lines.\n        var childSegments = ((IRenderable)child).Render(options with { Height = height }, innerWidth);\n        foreach (var (_, _, last, line) in Segment.SplitLines(childSegments, innerWidth, height).Enumerate())\n        {\n            if (line.Count == 1 && line[0].IsWhiteSpace)\n            {\n                // NOTE: This check might impact other things.\n                // Hopefully not, but there is a chance.\n                continue;\n            }\n\n            if (showBorder)\n            {\n                result.Add(new Segment(border.GetPart(BoxBorderPart.Left), borderStyle));\n            }\n\n            var content = new List<Segment>();\n            content.AddRange(line);\n\n            // Do we need to pad the panel?\n            var length = line.Sum(segment => segment.CellCount());\n            if (length < innerWidth)\n            {\n                var diff = innerWidth - length;\n                content.Add(Segment.Padding(diff));\n            }\n\n            result.AddRange(content);\n\n            if (showBorder)\n            {\n                result.Add(new Segment(border.GetPart(BoxBorderPart.Right), borderStyle));\n            }\n\n            // Don't emit a line break if this is the last\n            // line, we're not showing the border, and we're\n            // not rendering this inline.\n            var emitLinebreak = !(last && !showBorder && !Inline);\n            if (!emitLinebreak)\n            {\n                continue;\n            }\n\n            result.Add(Segment.LineBreak);\n        }\n\n        // Panel bottom\n        if (showBorder)\n        {\n            result.Add(new Segment(border.GetPart(BoxBorderPart.BottomLeft), borderStyle));\n            result.Add(new Segment(border.GetPart(BoxBorderPart.Bottom).Repeat(panelWidth - EdgeWidth), borderStyle));\n            result.Add(new Segment(border.GetPart(BoxBorderPart.BottomRight), borderStyle));\n        }\n\n        // TODO: Need a better name for this?\n        // If we're rendering this as part of an inline parent renderable,\n        // such as columns, we should not emit the last line break.\n        if (!Inline)\n        {\n            result.Add(Segment.LineBreak);\n        }\n\n        return result;\n    }\n\n    private void AddTopBorder(\n        List<Segment> result, RenderOptions options, BoxBorder border,\n        Style borderStyle, int panelWidth)\n    {\n        var rule = new Rule\n        {\n            Style = borderStyle,\n            Border = border,\n            TitlePadding = 1,\n            TitleSpacing = 0,\n            Title = Header?.Text,\n            Justification = Header?.Justification ?? Justify.Left,\n        };\n\n        // Top left border\n        result.Add(new Segment(border.GetPart(BoxBorderPart.TopLeft), borderStyle));\n\n        // Top border (and header text if specified)\n        result.AddRange(((IRenderable)rule).Render(options, panelWidth - 2).Where(x => !x.IsLineBreak));\n\n        // Top right border\n        result.Add(new Segment(border.GetPart(BoxBorderPart.TopRight), borderStyle));\n        result.Add(Segment.LineBreak);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Panel\"/>.\n/// </summary>\npublic static class PanelExtensions\n{\n    /// <summary>\n    /// Sets the panel header.\n    /// </summary>\n    /// <param name=\"panel\">The panel.</param>\n    /// <param name=\"text\">The header text.</param>\n    /// <param name=\"alignment\">The header alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Panel Header(this Panel panel, string text, Justify? alignment = null)\n    {\n        ArgumentNullException.ThrowIfNull(panel);\n        ArgumentNullException.ThrowIfNull(text);\n\n        alignment ??= panel.Header?.Justification;\n        return Header(panel, new PanelHeader(text, alignment));\n    }\n\n    /// <summary>\n    /// Sets the panel header alignment.\n    /// </summary>\n    /// <param name=\"panel\">The panel.</param>\n    /// <param name=\"alignment\">The header alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Panel HeaderAlignment(this Panel panel, Justify alignment)\n    {\n        ArgumentNullException.ThrowIfNull(panel);\n\n        if (panel.Header != null)\n        {\n            // Update existing style\n            panel.Header.Justification = alignment;\n        }\n        else\n        {\n            // Create header\n            Header(panel, string.Empty, alignment);\n        }\n\n        return panel;\n    }\n\n    /// <summary>\n    /// Sets the panel header.\n    /// </summary>\n    /// <param name=\"panel\">The panel.</param>\n    /// <param name=\"header\">The header to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Panel Header(this Panel panel, PanelHeader header)\n    {\n        ArgumentNullException.ThrowIfNull(panel);\n\n        panel.Header = header;\n        return panel;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/PanelHeader.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a panel header.\n/// </summary>\npublic sealed class PanelHeader : IHasJustification\n{\n    /// <summary>\n    /// Gets the panel header text.\n    /// </summary>\n    public string Text { get; }\n\n    /// <summary>\n    /// Gets or sets the panel header alignment.\n    /// </summary>\n    public Justify? Justification { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"PanelHeader\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The panel header text.</param>\n    /// <param name=\"alignment\">The panel header alignment.</param>\n    public PanelHeader(string text, Justify? alignment = null)\n    {\n        Text = text ?? throw new ArgumentNullException(nameof(text));\n        Justification = alignment;\n    }\n\n    /// <summary>\n    /// Sets the panel header style.\n    /// </summary>\n    /// <param name=\"style\">The panel header style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    [Obsolete(\"Use markup instead.\")]\n    [EditorBrowsable(EditorBrowsableState.Never)]\n    public PanelHeader SetStyle(Style? style)\n    {\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the panel header style.\n    /// </summary>\n    /// <param name=\"style\">The panel header style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    [Obsolete(\"Use markup instead.\")]\n    [EditorBrowsable(EditorBrowsableState.Never)]\n    public PanelHeader SetStyle(string style)\n    {\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the panel header alignment.\n    /// </summary>\n    /// <param name=\"alignment\">The panel header alignment.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public PanelHeader SetAlignment(Justify alignment)\n    {\n        Justification = alignment;\n        return this;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Paragraph.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A paragraph of text where different parts\n/// of the paragraph can have individual styling.\n/// </summary>\npublic sealed class Paragraph : Renderable, IHasJustification, IOverflowable\n{\n    private readonly List<SegmentLine> _lines;\n\n    /// <summary>\n    /// Gets or sets the alignment of the whole paragraph.\n    /// </summary>\n    public Justify? Justification { get; set; }\n\n    /// <summary>\n    /// Gets or sets the text overflow strategy.\n    /// </summary>\n    public Overflow? Overflow { get; set; }\n\n    /// <summary>\n    /// Gets the character count of the paragraph.\n    /// </summary>\n    public int Length => _lines.Sum(line => line.Length) + Math.Max(0, Lines - 1);\n\n    /// <summary>\n    /// Gets the number of lines in the paragraph.\n    /// </summary>\n    public int Lines => _lines.Count;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Paragraph\"/> class.\n    /// </summary>\n    public Paragraph()\n    {\n        _lines = [];\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Paragraph\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"style\">The style of the text or <see cref=\"Style.Plain\"/> if <see langword=\"null\"/>.</param>\n    /// <param name=\"link\">The link of the text.</param>\n    public Paragraph(string text, Style? style = null, Link? link = null)\n        : this()\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        Append(text, style, link);\n    }\n\n    /// <summary>\n    /// Appends some text to this paragraph.\n    /// </summary>\n    /// <param name=\"text\">The text to append.</param>\n    /// <param name=\"style\">The style of the appended text or <see cref=\"Style.Plain\"/> if <see langword=\"null\"/>.</param>\n    /// <param name=\"link\">The link that the appended text points at.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Paragraph Append(string text, Style? style = null, Link? link = null)\n    {\n        ArgumentNullException.ThrowIfNull(text);\n\n        style ??= Style.Plain;\n\n        var first = true;\n        var span = text.AsSpan();\n        foreach (var lineSpan in span.EnumerateLines())\n        {\n            SegmentLine line;\n            if (!first || _lines.Count == 0)\n            {\n                line = [];\n                _lines.Add(line);\n            }\n            else\n            {\n                line = _lines[^1];\n            }\n            first = false;\n\n            if (lineSpan.IsEmpty)\n            {\n                line.Add(Segment.Empty);\n            }\n            else\n            {\n                foreach (var part in new WhiteSpaceSegmentEnumerator(lineSpan))\n                {\n                    line.Add(new Segment(part.ToString(), style.Value, link));\n                }\n            }\n        }\n\n        return this;\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        if (_lines.Count == 0)\n        {\n            return new Measurement(0, 0);\n        }\n\n        var min = _lines.Max(line => line.Max(segment => segment.CellCount()));\n        var max = _lines.Max(x => x.CellCount());\n\n        return new Measurement(min, Math.Min(max, maxWidth));\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(options);\n\n        if (_lines.Count == 0)\n        {\n            return [];\n        }\n\n        var lines = options.SingleLine\n            ? [.. _lines]\n            : SplitLines(maxWidth);\n\n        // Justify lines\n        var justification = options.Justification ?? Justification ?? Console.Justify.Left;\n        if (justification != Console.Justify.Left)\n        {\n            foreach (var line in lines)\n            {\n                Aligner.Align(line, justification, maxWidth);\n            }\n        }\n\n        if (options.SingleLine)\n        {\n            // Return the first line\n            return lines[0].Where(segment => !segment.IsLineBreak);\n        }\n\n        return new SegmentLineEnumerator(lines);\n    }\n\n    private List<SegmentLine> Clone()\n    {\n        var result = new List<SegmentLine>();\n\n        foreach (var line in _lines)\n        {\n            var newLine = new SegmentLine();\n            foreach (var segment in line)\n            {\n                newLine.Add(segment);\n            }\n\n            result.Add(newLine);\n        }\n\n        return result;\n    }\n\n    private List<SegmentLine> SplitLines(int maxWidth)\n    {\n        if (maxWidth <= 0)\n        {\n            // Nothing fits, so return an empty line.\n            return [];\n        }\n\n        if (_lines.Max(x => x.CellCount()) <= maxWidth)\n        {\n            return Clone();\n        }\n\n        var lines = new List<SegmentLine>();\n        var line = new SegmentLine();\n\n        using var iterator = new SegmentLineIterator(_lines);\n        var queue = new Queue<Segment>();\n        while (true)\n        {\n            Segment? current;\n            if (queue.Count == 0)\n            {\n                if (!iterator.MoveNext())\n                {\n                    break;\n                }\n\n                current = iterator.Current;\n            }\n            else\n            {\n                current = queue.Dequeue();\n            }\n\n            if (current == null)\n            {\n                throw new InvalidOperationException(\"Iterator returned empty segment.\");\n            }\n\n            var newLine = false;\n\n            if (current.IsLineBreak)\n            {\n                lines.Add(line);\n                line = [];\n                continue;\n            }\n\n            var length = current.CellCount();\n            if (length > maxWidth)\n            {\n                // The current segment is longer than the width of the console,\n                // so we will need to crop it up, into new segments.\n                var segments = Segment.SplitOverflow(current, Overflow, maxWidth);\n                if (segments.Count > 0)\n                {\n                    if (line.CellCount() + segments[0].CellCount() > maxWidth)\n                    {\n                        lines.Add(line);\n                        line = [];\n\n                        segments.ForEach(s => queue.Enqueue(s));\n                        continue;\n                    }\n                    else\n                    {\n                        // Add the segment and push the rest of them to the queue.\n                        line.Add(segments[0]);\n                        segments.Skip(1).ForEach(s => queue.Enqueue(s));\n                        continue;\n                    }\n                }\n            }\n            else\n            {\n                if (line.CellCount() + length > maxWidth)\n                {\n                    line.Add(Segment.Empty);\n                    lines.Add(line);\n                    line = [];\n                    newLine = true;\n                }\n            }\n\n            if (newLine && current.IsWhiteSpace)\n            {\n                continue;\n            }\n\n            line.Add(current);\n        }\n\n        // Flush remaining.\n        if (line.Count > 0)\n        {\n            lines.Add(line);\n        }\n\n        return lines;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/ProgressBar.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class ProgressBar : Renderable, IHasCulture\n{\n    private const int PULSESIZE = 20;\n    private const int PULSESPEED = 15;\n\n    public double Value { get; set; }\n    public double MaxValue { get; set; } = 100;\n\n    public int? Width { get; set; }\n    public bool ShowRemaining { get; set; } = true;\n    public char UnicodeBar { get; set; } = '━';\n    public char AsciiBar { get; set; } = '-';\n    public bool ShowValue { get; set; }\n    public bool IsIndeterminate { get; set; }\n    public CultureInfo? Culture { get; set; }\n    public Func<double, CultureInfo, string>? ValueFormatter { get; set; }\n\n    public Style CompletedStyle { get; set; } = Color.Yellow;\n    public Style FinishedStyle { get; set; } = Color.Green;\n    public Style RemainingStyle { get; set; } = Color.Grey;\n    public Style IndeterminateStyle { get; set; } = DefaultPulseStyle;\n\n    internal static Style DefaultPulseStyle { get; } = new Style(foreground: Color.DodgerBlue1, background: Color.Grey23);\n\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        return new Measurement(4, width);\n    }\n\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var width = Math.Min(Width ?? maxWidth, maxWidth);\n        var completedBarCount = Math.Min(MaxValue, Math.Max(0, Value));\n        var isCompleted = completedBarCount >= MaxValue;\n\n        if (IsIndeterminate && !isCompleted)\n        {\n            foreach (var segment in RenderIndeterminate(options, width))\n            {\n                yield return segment;\n            }\n\n            yield break;\n        }\n\n        var bar = !options.Unicode ? AsciiBar : UnicodeBar;\n        var style = isCompleted ? FinishedStyle : CompletedStyle;\n        var barCount = Math.Max(0, (int)(width * (completedBarCount / MaxValue)));\n\n        // Show value?\n        var value = ValueFormatter != null ? ValueFormatter(completedBarCount, Culture ?? CultureInfo.InvariantCulture) : completedBarCount.ToString(Culture ?? CultureInfo.InvariantCulture);\n        if (ShowValue)\n        {\n            barCount = barCount - value.Length - 1;\n            barCount = Math.Max(0, barCount);\n        }\n\n        yield return new Segment(new string(bar, barCount), style);\n\n        if (ShowValue)\n        {\n            yield return barCount == 0\n                ? new Segment(value, style)\n                : new Segment(\" \" + value, style);\n        }\n\n        // More space available?\n        if (barCount < width)\n        {\n            var diff = width - barCount;\n            if (ShowValue)\n            {\n                diff = diff - value.Length - 1;\n                if (diff <= 0)\n                {\n                    yield break;\n                }\n            }\n\n            var legacy = options.ColorSystem == ColorSystem.NoColors || options.ColorSystem == ColorSystem.Legacy;\n            var remainingToken = ShowRemaining && !legacy ? bar : ' ';\n            yield return new Segment(new string(remainingToken, diff), RemainingStyle);\n        }\n    }\n\n    private IEnumerable<Segment> RenderIndeterminate(RenderOptions options, int width)\n    {\n        var bar = options.Unicode ? UnicodeBar.ToString() : AsciiBar.ToString();\n        var style = IndeterminateStyle;\n\n        IEnumerable<Segment> GetPulseSegments()\n        {\n            // For 1-bit and 3-bit colors, fall back to\n            // a simpler versions with only two colors.\n            if (options.ColorSystem is ColorSystem.NoColors or ColorSystem.Legacy)\n            {\n                // First half of the pulse\n                var segments = Enumerable.Repeat(new Segment(bar, new Style(style.Foreground)), PULSESIZE / 2);\n\n                // Second half of the pulse\n                var legacy = options.ColorSystem is ColorSystem.NoColors or ColorSystem.Legacy;\n                var bar2 = legacy ? \" \" : bar;\n                segments = segments.Concat(Enumerable.Repeat(new Segment(bar2, new Style(style.Background)), PULSESIZE - (PULSESIZE / 2)));\n\n                foreach (var segment in segments)\n                {\n                    yield return segment;\n                }\n\n                yield break;\n            }\n\n            for (var index = 0; index < PULSESIZE; index++)\n            {\n                var position = index / (float)PULSESIZE;\n                var fade = 0.5f + ((float)Math.Cos(position * Math.PI * 2) / 2.0f);\n                var color = style.Foreground.Blend(style.Background, fade);\n\n                yield return new Segment(bar, new Style(foreground: color));\n            }\n        }\n\n        // Get the pulse segments\n        var pulseSegments = GetPulseSegments();\n        pulseSegments = pulseSegments.Repeat((width / PULSESIZE) + 2);\n\n        // Repeat the pulse segments\n        var currentTime = (DateTime.Now - DateTime.Today).TotalSeconds;\n        var offset = (int)(currentTime * PULSESPEED) % PULSESIZE;\n\n        return pulseSegments.Skip(offset).Take(width);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Rows.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Renders things in rows.\n/// </summary>\npublic sealed class Rows : Renderable, IExpandable\n{\n    private readonly List<IRenderable> _children;\n\n    /// <inheritdoc/>\n    public bool Expand { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Rows\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The items to render as rows.</param>\n    public Rows(params IRenderable[] items)\n        : this((IEnumerable<IRenderable>)items)\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Rows\"/> class.\n    /// </summary>\n    /// <param name=\"children\">The items to render as rows.</param>\n    public Rows(IEnumerable<IRenderable> children)\n    {\n        _children = new List<IRenderable>(children ?? throw new ArgumentNullException(nameof(children)));\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        if (Expand)\n        {\n            return new Measurement(maxWidth, maxWidth);\n        }\n        else\n        {\n            var measurements = _children.Select(c => c.Measure(options, maxWidth)).ToArray();\n            if (measurements.Length > 0)\n            {\n                return new Measurement(\n                    measurements.Max(c => c.Min),\n                    measurements.Max(c => c.Max));\n            }\n\n            return new Measurement(0, 0);\n        }\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var result = new List<Segment>();\n\n        foreach (var child in _children)\n        {\n            var segments = child.Render(options, maxWidth);\n            foreach (var (_, _, last, segment) in segments.Enumerate())\n            {\n                result.Add(segment);\n\n                if (last)\n                {\n                    if (!segment.IsLineBreak && child is not ControlCode)\n                    {\n                        result.Add(Segment.LineBreak);\n                    }\n                }\n            }\n        }\n\n        return result;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Rule.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable horizontal rule.\n/// </summary>\npublic sealed class Rule : Renderable, IHasJustification, IHasBoxBorder\n{\n    /// <summary>\n    /// Gets or sets the rule title markup text.\n    /// </summary>\n    public string? Title { get; set; }\n\n    /// <summary>\n    /// Gets or sets the rule style.\n    /// </summary>\n    public Style? Style { get; set; }\n\n    /// <summary>\n    /// Gets or sets the rule's title justification.\n    /// </summary>\n    public Justify? Justification { get; set; }\n\n    /// <inheritdoc/>\n    public BoxBorder Border { get; set; } = BoxBorder.Square;\n\n    internal int TitlePadding { get; set; } = 2;\n    internal int TitleSpacing { get; set; } = 1;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Rule\"/> class.\n    /// </summary>\n    public Rule()\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Rule\"/> class.\n    /// </summary>\n    /// <param name=\"title\">The rule title markup text.</param>\n    public Rule(string title)\n    {\n        Title = title ?? throw new ArgumentNullException(nameof(title));\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var extraLength = (2 * TitlePadding) + (2 * TitleSpacing);\n\n        if (Title == null || maxWidth <= extraLength)\n        {\n            return GetLineWithoutTitle(options, maxWidth);\n        }\n\n        // Get the title and make sure it fits.\n        var title = GetTitleSegments(options, Title, maxWidth - extraLength);\n        if (Segment.CellCount(title) > maxWidth - extraLength)\n        {\n            // Truncate the title\n            title = Segment.TruncateWithEllipsis(title, maxWidth - extraLength);\n            if (!title.Any())\n            {\n                // We couldn't fit the title at all.\n                return GetLineWithoutTitle(options, maxWidth);\n            }\n        }\n\n        var (left, right) = GetLineSegments(options, maxWidth, title);\n\n        var segments = new List<Segment>();\n        segments.Add(left);\n        segments.AddRange(title);\n        segments.Add(right);\n        segments.Add(Segment.LineBreak);\n\n        return segments;\n    }\n\n    private IEnumerable<Segment> GetLineWithoutTitle(RenderOptions options, int maxWidth)\n    {\n        var border = Border.GetSafeBorder(safe: !options.Unicode);\n        var text = border.GetPart(BoxBorderPart.Top).Repeat(maxWidth);\n\n        return\n        [\n            new Segment(text, Style ?? Spectre.Console.Style.Plain),\n            Segment.LineBreak\n        ];\n    }\n\n    private IEnumerable<Segment> GetTitleSegments(RenderOptions options, string title, int width)\n    {\n        title = title.NormalizeNewLines().ReplaceExact(\"\\n\", \" \").Trim();\n        var markup = new Markup(title, Style);\n        return ((IRenderable)markup).Render(options with\n        {\n            SingleLine = true\n        }, width);\n    }\n\n    private (Segment Left, Segment Right) GetLineSegments(RenderOptions options, int width, IEnumerable<Segment> title)\n    {\n        var titleLength = Segment.CellCount(title);\n\n        var border = Border.GetSafeBorder(safe: !options.Unicode);\n        var borderPart = border.GetPart(BoxBorderPart.Top);\n\n        var alignment = Justification ?? Justify.Center;\n        if (alignment == Justify.Left)\n        {\n            var left = new Segment(borderPart.Repeat(TitlePadding) + new string(' ', TitleSpacing),\n                Style ?? Spectre.Console.Style.Plain);\n\n            var rightLength = width - titleLength - left.CellCount() - TitleSpacing;\n            var right = new Segment(new string(' ', TitleSpacing) + borderPart.Repeat(rightLength),\n                Style ?? Spectre.Console.Style.Plain);\n\n            return (left, right);\n        }\n        else if (alignment == Justify.Center)\n        {\n            var leftLength = ((width - titleLength) / 2) - TitleSpacing;\n            var left = new Segment(borderPart.Repeat(leftLength) + new string(' ', TitleSpacing),\n                Style ?? Spectre.Console.Style.Plain);\n\n            var rightLength = width - titleLength - left.CellCount() - TitleSpacing;\n            var right = new Segment(new string(' ', TitleSpacing) + borderPart.Repeat(rightLength),\n                Style ?? Spectre.Console.Style.Plain);\n\n            return (left, right);\n        }\n        else if (alignment == Justify.Right)\n        {\n            var right = new Segment(new string(' ', TitleSpacing) + borderPart.Repeat(TitlePadding),\n                Style ?? Spectre.Console.Style.Plain);\n\n            var leftLength = width - titleLength - right.CellCount() - TitleSpacing;\n            var left = new Segment(borderPart.Repeat(leftLength) + new string(' ', TitleSpacing),\n                Style ?? Spectre.Console.Style.Plain);\n\n            return (left, right);\n        }\n\n        throw new NotSupportedException(\"Unsupported alignment.\");\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"RuleExtensions\"/>.\n/// </summary>\npublic static class RuleExtensions\n{\n    /// <summary>\n    /// Sets the rule title.\n    /// </summary>\n    /// <param name=\"rule\">The rule.</param>\n    /// <param name=\"title\">The title.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Rule RuleTitle(this Rule rule, string title)\n    {\n        ArgumentNullException.ThrowIfNull(rule);\n        ArgumentNullException.ThrowIfNull(title);\n\n        rule.Title = title;\n        return rule;\n    }\n\n    /// <summary>\n    /// Sets the rule style.\n    /// </summary>\n    /// <param name=\"rule\">The rule.</param>\n    /// <param name=\"style\">The rule style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Rule RuleStyle(this Rule rule, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(rule);\n\n        rule.Style = style;\n        return rule;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/Table.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable table.\n/// </summary>\npublic sealed class Table : Renderable, IHasTableBorder, IExpandable\n{\n    private readonly List<TableColumn> _columns;\n\n    /// <summary>\n    /// Gets the table columns.\n    /// </summary>\n    public IReadOnlyList<TableColumn> Columns => _columns;\n\n    /// <summary>\n    /// Gets the table rows.\n    /// </summary>\n    public TableRowCollection Rows { get; }\n\n    /// <inheritdoc/>\n    public TableBorder Border { get; set; } = TableBorder.Square;\n\n    /// <inheritdoc/>\n    public Style? BorderStyle { get; set; }\n\n    /// <inheritdoc/>\n    public bool UseSafeBorder { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not table headers should be shown.\n    /// </summary>\n    public bool ShowHeaders { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not row separators should be shown.\n    /// </summary>\n    public bool ShowRowSeparators { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not table footers should be shown.\n    /// </summary>\n    public bool ShowFooters { get; set; } = true;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the table should\n    /// fit the available space. If <c>false</c>, the table width will be\n    /// auto calculated. Defaults to <c>false</c>.\n    /// </summary>\n    public bool Expand { get; set; }\n\n    /// <summary>\n    /// Gets or sets the width of the table.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets the table title.\n    /// </summary>\n    public TableTitle? Title { get; set; }\n\n    /// <summary>\n    /// Gets or sets the table footnote.\n    /// </summary>\n    public TableTitle? Caption { get; set; }\n\n    // Whether this is a grid or not.\n    internal bool IsGrid { get; set; }\n\n    // Whether or not the most right cell should be padded.\n    // This is almost always the case, unless we're rendering\n    // a grid without explicit padding in the last cell.\n    internal bool PadRightCell { get; set; } = true;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Table\"/> class.\n    /// </summary>\n    public Table()\n    {\n        _columns = [];\n        Rows = new TableRowCollection(this);\n    }\n\n    /// <summary>\n    /// Adds a column to the table.\n    /// </summary>\n    /// <param name=\"column\">The column to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public Table AddColumn(TableColumn column)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n\n        if (Rows.Count > 0)\n        {\n            throw new InvalidOperationException(\"Cannot add new columns to table with existing rows.\");\n        }\n\n        _columns.Add(column);\n        return this;\n    }\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(options);\n\n        var measurer = new TableMeasurer(this, options);\n\n        // Calculate the total cell width\n        var totalCellWidth = measurer.CalculateTotalCellWidth(maxWidth);\n\n        // Calculate the minimum and maximum table width\n        var measurements = _columns.Select(column => measurer.MeasureColumn(column, totalCellWidth));\n        var minTableWidth = measurements.Sum(x => x.Min) + measurer.GetNonColumnWidth();\n        var maxTableWidth = Width ?? measurements.Sum(x => x.Max) + measurer.GetNonColumnWidth();\n        return new Measurement(minTableWidth, maxTableWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        ArgumentNullException.ThrowIfNull(options);\n\n        var measurer = new TableMeasurer(this, options);\n\n        // Calculate the column and table width\n        var totalCellWidth = measurer.CalculateTotalCellWidth(maxWidth);\n        var columnWidths = measurer.CalculateColumnWidths(totalCellWidth);\n        var tableWidth = columnWidths.Sum() + measurer.GetNonColumnWidth();\n\n        // Get the rows to render\n        var rows = GetRenderableRows();\n\n        // Render the table\n        return TableRenderer.Render(\n            new TableRendererContext(this, options, rows, tableWidth, maxWidth),\n            columnWidths);\n    }\n\n    private List<TableRow> GetRenderableRows()\n    {\n        var rows = new List<TableRow>();\n\n        // Show headers?\n        if (ShowHeaders)\n        {\n            rows.Add(TableRow.Header(_columns.Select(c => c.Header)));\n        }\n\n        // Add rows\n        rows.AddRange(Rows);\n\n        // Show footers?\n        if (ShowFooters && _columns.Any(c => c.Footer != null))\n        {\n            rows.Add(TableRow.Footer(_columns.Select(c => c.Footer ?? Text.Empty)));\n        }\n\n        return rows;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Table\"/>.\n/// </summary>\npublic static class TableExtensions\n{\n    /// <summary>\n    /// Adds multiple columns to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the column to.</param>\n    /// <param name=\"columns\">The columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddColumns(this Table table, params TableColumn[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        foreach (var column in columns)\n        {\n            table.AddColumn(column);\n        }\n\n        return table;\n    }\n\n    /// <summary>\n    /// Adds a row to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddRow(this Table table, IEnumerable<IRenderable> columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        table.Rows.Add(new TableRow(columns));\n        return table;\n    }\n\n    /// <summary>\n    /// Adds a row to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddRow(this Table table, params IRenderable[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        return table.AddRow((IEnumerable<IRenderable>)columns);\n    }\n\n    /// <summary>\n    /// Adds an empty row to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddEmptyRow(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        var columns = new IRenderable[table.Columns.Count];\n        Enumerable.Range(0, table.Columns.Count).ForEach(index => columns[index] = Text.Empty);\n        table.AddRow(columns);\n        return table;\n    }\n\n    /// <summary>\n    /// Adds a column to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the column to.</param>\n    /// <param name=\"column\">The column to add.</param>\n    /// <param name=\"configure\">Delegate that can be used to configure the added column.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddColumn(this Table table, string column, Action<TableColumn>? configure = null)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(column);\n\n        var tableColumn = new TableColumn(column);\n        configure?.Invoke(tableColumn);\n\n        table.AddColumn(tableColumn);\n        return table;\n    }\n\n    /// <summary>\n    /// Adds multiple columns to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the columns to.</param>\n    /// <param name=\"columns\">The columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddColumns(this Table table, params string[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        foreach (var column in columns)\n        {\n            AddColumn(table, column);\n        }\n\n        return table;\n    }\n\n    /// <summary>\n    /// Adds a row to the table.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table AddRow(this Table table, params string[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        table.AddRow(columns.Select(column => new Markup(column)).ToArray());\n        return table;\n    }\n\n    /// <summary>\n    /// Inserts a row in the table at the specified index.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"index\">The index to insert the row at.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table InsertRow(this Table table, int index, IEnumerable<IRenderable> columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(columns);\n\n        table.Rows.Insert(index, new TableRow(columns));\n        return table;\n    }\n\n    /// <summary>\n    /// Updates a tables cell.\n    /// </summary>\n    /// <param name=\"table\">The table to update.</param>\n    /// <param name=\"rowIndex\">The index of row to update.</param>\n    /// <param name=\"columnIndex\">The index of column to update.</param>\n    /// <param name=\"cellData\">New cell data.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table UpdateCell(this Table table, int rowIndex, int columnIndex, IRenderable cellData)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(cellData);\n\n        table.Rows.Update(rowIndex, columnIndex, cellData);\n\n        return table;\n    }\n\n    /// <summary>\n    /// Updates a tables cell.\n    /// </summary>\n    /// <param name=\"table\">The table to update.</param>\n    /// <param name=\"rowIndex\">The index of row to update.</param>\n    /// <param name=\"columnIndex\">The index of column to update.</param>\n    /// <param name=\"cellData\">New cell data.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table UpdateCell(this Table table, int rowIndex, int columnIndex, string cellData)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(cellData);\n\n        table.Rows.Update(rowIndex, columnIndex, new Markup(cellData));\n\n        return table;\n    }\n\n    /// <summary>\n    /// Inserts a row in the table at the specified index.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"index\">The index to insert the row at.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table InsertRow(this Table table, int index, params IRenderable[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        return InsertRow(table, index, (IEnumerable<IRenderable>)columns);\n    }\n\n    /// <summary>\n    /// Inserts a row in the table at the specified index.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"index\">The index to insert the row at.</param>\n    /// <param name=\"columns\">The row columns to add.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table InsertRow(this Table table, int index, params string[] columns)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        return InsertRow(table, index, columns.Select(column => new Markup(column)));\n    }\n\n    /// <summary>\n    /// Removes a row from the table with the specified index.\n    /// </summary>\n    /// <param name=\"table\">The table to add the row to.</param>\n    /// <param name=\"index\">The index to remove the row at.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table RemoveRow(this Table table, int index)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.Rows.RemoveAt(index);\n        return table;\n    }\n\n    /// <summary>\n    /// Sets the table width.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <param name=\"width\">The width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table Width(this Table table, int? width)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.Width = width;\n        return table;\n    }\n\n    /// <summary>\n    /// Shows table headers.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table ShowHeaders(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowHeaders = true;\n        return table;\n    }\n\n    /// <summary>\n    /// Hides table headers.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table HideHeaders(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowHeaders = false;\n        return table;\n    }\n\n    /// <summary>\n    /// Shows row separators.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table ShowRowSeparators(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowRowSeparators = true;\n        return table;\n    }\n\n    /// <summary>\n    /// Hides row separators.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table HideRowSeparators(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowRowSeparators = false;\n        return table;\n    }\n\n    /// <summary>\n    /// Shows table footers.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table ShowFooters(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowFooters = true;\n        return table;\n    }\n\n    /// <summary>\n    /// Hides table footers.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table HideFooters(this Table table)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.ShowFooters = false;\n        return table;\n    }\n\n    /// <summary>\n    /// Sets the table title.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <param name=\"text\">The table title markup text.</param>\n    /// <param name=\"style\">The table title style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table Title(this Table table, string text, Style? style = null)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(text);\n\n        return Title(table, new TableTitle(text, style));\n    }\n\n    /// <summary>\n    /// Sets the table title.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <param name=\"title\">The table title.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table Title(this Table table, TableTitle title)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.Title = title;\n        return table;\n    }\n\n    /// <summary>\n    /// Sets the table caption.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <param name=\"text\">The caption markup text.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table Caption(this Table table, string text, Style? style = null)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        ArgumentNullException.ThrowIfNull(text);\n\n        return Caption(table, new TableTitle(text, style));\n    }\n\n    /// <summary>\n    /// Sets the table caption.\n    /// </summary>\n    /// <param name=\"table\">The table.</param>\n    /// <param name=\"caption\">The caption.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Table Caption(this Table table, TableTitle caption)\n    {\n        ArgumentNullException.ThrowIfNull(table);\n\n        table.Caption = caption;\n        return table;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableAccessor.cs",
    "content": "namespace Spectre.Console;\n\ninternal abstract class TableAccessor\n{\n    private readonly Table _table;\n\n    public RenderOptions Options { get; }\n    public IReadOnlyList<TableColumn> Columns => _table.Columns;\n    public virtual IReadOnlyList<TableRow> Rows => _table.Rows;\n    public bool Expand => _table.Expand || _table.Width != null;\n\n    protected TableAccessor(Table table, RenderOptions options)\n    {\n        _table = table ?? throw new ArgumentNullException(nameof(table));\n        Options = options ?? throw new ArgumentNullException(nameof(options));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableCell.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a table cell that can span multiple columns.\n/// </summary>\npublic sealed class TableCell : IRenderable\n{\n    /// <summary>\n    /// Gets the cell content.\n    /// </summary>\n    public IRenderable Content { get; }\n\n    /// <summary>\n    /// Gets the number of columns this cell spans.\n    /// </summary>\n    public int ColumnSpan { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableCell\"/> class.\n    /// </summary>\n    /// <param name=\"content\">The cell content.</param>\n    public TableCell(IRenderable content)\n    {\n        Content = content ?? throw new ArgumentNullException(nameof(content));\n        ColumnSpan = 1;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableCell\"/> class.\n    /// </summary>\n    /// <param name=\"markup\">Markup text.</param>\n    public TableCell(string markup)\n        : this(new Markup(markup ?? string.Empty))\n    {\n    }\n\n    /// <summary>\n    /// Sets the number of columns this cell should span.\n    /// </summary>\n    /// <param name=\"span\">The number of columns to span.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public TableCell Span(int span)\n    {\n        if (span < 1)\n        {\n            throw new ArgumentException(\"Column span must be at least 1.\", nameof(span));\n        }\n\n        ColumnSpan = span;\n        return this;\n    }\n\n    /// <summary>\n    /// Implicitly converts a <see cref=\"string\"/> to a <see cref=\"TableCell\"/>.\n    /// </summary>\n    /// <param name=\"markup\">The markup text to convert.</param>\n    public static implicit operator TableCell(string markup)\n    {\n        return new TableCell(markup);\n    }\n\n    /// <inheritdoc/>\n    Measurement IRenderable.Measure(RenderOptions options, int maxWidth)\n    {\n        return Content.Measure(options, maxWidth);\n    }\n\n    /// <inheritdoc/>\n    IEnumerable<Segment> IRenderable.Render(RenderOptions options, int maxWidth)\n    {\n        return Content.Render(options, maxWidth);\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableColumn.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a table column.\n/// </summary>\npublic sealed class TableColumn : IColumn\n{\n    private IRenderable _header = null!;\n    private IRenderable? _footer;\n\n    /// <summary>\n    /// Gets or sets the column header.\n    /// </summary>\n    public IRenderable Header\n    {\n        get => _header;\n        set\n        {\n            if (value is TableCell cell && cell.ColumnSpan > 1)\n            {\n                throw new InvalidOperationException(\"Column spanning is not supported in table header rows.\");\n            }\n\n            _header = value ?? throw new ArgumentNullException(nameof(value));\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the column footer.\n    /// </summary>\n    public IRenderable? Footer\n    {\n        get => _footer;\n        set\n        {\n            if (value is TableCell cell && cell.ColumnSpan > 1)\n            {\n                throw new InvalidOperationException(\"Column spanning is not supported in table footer rows.\");\n            }\n\n            _footer = value;\n        }\n    }\n\n    /// <summary>\n    /// Gets or sets the width of the column.\n    /// If <c>null</c>, the column will adapt to its contents.\n    /// </summary>\n    public int? Width { get; set; }\n\n    /// <summary>\n    /// Gets or sets the padding of the column.\n    /// Vertical padding (top and bottom) is ignored.\n    /// </summary>\n    public Padding? Padding { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether wrapping of\n    /// text within the column should be prevented.\n    /// </summary>\n    public bool NoWrap { get; set; }\n\n    /// <summary>\n    /// Gets or sets the alignment of the column.\n    /// </summary>\n    public Justify? Alignment { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableColumn\"/> class.\n    /// </summary>\n    /// <param name=\"header\">The table column header.</param>\n    public TableColumn(string header)\n        : this(new Markup(header).Overflow(Overflow.Ellipsis))\n    {\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableColumn\"/> class.\n    /// </summary>\n    /// <param name=\"header\">The <see cref=\"IRenderable\"/> instance to use as the table column header.</param>\n    public TableColumn(IRenderable header)\n    {\n        Header = header ?? throw new ArgumentNullException(nameof(header));\n        Width = null;\n        Padding = new Padding(1, 0, 1, 0);\n        NoWrap = false;\n        Alignment = null;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TableColumn\"/>.\n/// </summary>\npublic static class TableColumnExtensions\n{\n    /// <summary>\n    /// Sets the table column header.\n    /// </summary>\n    /// <param name=\"column\">The table column.</param>\n    /// <param name=\"header\">The table column header markup text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TableColumn Header(this TableColumn column, string header)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n        ArgumentNullException.ThrowIfNull(header);\n\n        column.Header = new Markup(header);\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the table column header.\n    /// </summary>\n    /// <param name=\"column\">The table column.</param>\n    /// <param name=\"header\">The table column header.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TableColumn Header(this TableColumn column, IRenderable header)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n        ArgumentNullException.ThrowIfNull(header);\n\n        column.Header = header;\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the table column footer.\n    /// </summary>\n    /// <param name=\"column\">The table column.</param>\n    /// <param name=\"footer\">The table column footer markup text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TableColumn Footer(this TableColumn column, string footer)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n        ArgumentNullException.ThrowIfNull(footer);\n\n        column.Footer = new Markup(footer);\n        return column;\n    }\n\n    /// <summary>\n    /// Sets the table column footer.\n    /// </summary>\n    /// <param name=\"column\">The table column.</param>\n    /// <param name=\"footer\">The table column footer.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TableColumn Footer(this TableColumn column, IRenderable footer)\n    {\n        ArgumentNullException.ThrowIfNull(column);\n        ArgumentNullException.ThrowIfNull(footer);\n\n        column.Footer = footer;\n        return column;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableMeasurer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class TableMeasurer : TableAccessor\n{\n    private const int EdgeCount = 2;\n\n    private readonly int? _explicitWidth;\n    private readonly TableBorder _border;\n    private readonly bool _padRightCell;\n\n    public TableMeasurer(Table table, RenderOptions options)\n        : base(table, options)\n    {\n        _explicitWidth = table.Width;\n        _border = table.Border;\n        _padRightCell = table.PadRightCell;\n    }\n\n    public int CalculateTotalCellWidth(int maxWidth)\n    {\n        var totalCellWidth = maxWidth;\n        if (_explicitWidth != null)\n        {\n            totalCellWidth = Math.Min(_explicitWidth.Value, maxWidth);\n        }\n\n        return totalCellWidth - GetNonColumnWidth();\n    }\n\n    /// <summary>\n    /// Gets the width of everything that's not a cell.\n    /// That means separators, edges and padding.\n    /// </summary>\n    /// <returns>The width of everything that's not a cell.</returns>\n    public int GetNonColumnWidth()\n    {\n        var hideBorder = !_border.Visible;\n        var usePadding = _border.UsePadding;\n        var separators = hideBorder ? 0 : Columns.Count - 1;\n        var edges = hideBorder || !usePadding ? 0 : EdgeCount;\n        var padding = !usePadding ? 0 : Columns.Select(x => x.Padding?.GetWidth() ?? 0).Sum();\n\n        if (usePadding && !_padRightCell)\n        {\n            padding -= Columns.Last().Padding.GetRightSafe();\n        }\n\n        return separators + edges + padding;\n    }\n\n    /// <summary>\n    /// Calculates the width of all columns minus any padding.\n    /// </summary>\n    /// <param name=\"maxWidth\">The maximum width that the columns may occupy.</param>\n    /// <returns>A list of column widths.</returns>\n    public List<int> CalculateColumnWidths(int maxWidth)\n    {\n        var width_ranges = Columns.Select(column => MeasureColumn(column, maxWidth)).ToArray();\n        var widths = width_ranges.Select(range => range.Max).ToList();\n\n        var tableWidth = widths.Sum();\n        if (tableWidth > maxWidth)\n        {\n            var wrappable = Columns.Select(c => !c.NoWrap).ToList();\n            widths = CollapseWidths(widths, wrappable, maxWidth);\n            tableWidth = widths.Sum();\n\n            // last resort, reduce columns evenly\n            if (tableWidth > maxWidth)\n            {\n                var excessWidth = tableWidth - maxWidth;\n                widths = Ratio.Reduce(excessWidth, widths.Select(_ => 1).ToList(), widths, widths);\n                tableWidth = widths.Sum();\n            }\n        }\n\n        if (tableWidth < maxWidth && Expand)\n        {\n            var flexibleColumns = Columns.Select(column => column.Width == null).ToList();\n            if (flexibleColumns.Any(isFlexible => isFlexible))\n            {\n                var ratios = widths.Select((width, index) => flexibleColumns[index] ? Math.Max(width, 1) : 0).ToList();\n                var padWidths = Ratio.Distribute(maxWidth - tableWidth, ratios);\n                widths = widths.Zip(padWidths, (a, b) => (a, b)).Select(f => f.a + f.b).ToList();\n            }\n        }\n\n        return widths;\n    }\n\n    public Measurement MeasureColumn(TableColumn column, int maxWidth)\n    {\n        // Predetermined width?\n        if (column.Width != null)\n        {\n            return new Measurement(column.Width.Value, column.Width.Value);\n        }\n\n        var columnIndex = Columns.IndexOf(column);\n\n        var minWidths = new List<int>();\n        var maxWidths = new List<int>();\n\n        // Include columns (both header and footer) in measurement\n        var headerMeasure = column.Header.Measure(Options, maxWidth);\n        var footerMeasure = column.Footer?.Measure(Options, maxWidth) ?? headerMeasure;\n        minWidths.Add(Math.Min(headerMeasure.Min, footerMeasure.Min));\n        maxWidths.Add(Math.Max(headerMeasure.Max, footerMeasure.Max));\n\n        // Measure rows, accounting for column spanning\n        foreach (var row in Rows)\n        {\n            var currentColumnIndex = 0;\n            foreach (var item in row)\n            {\n                if (currentColumnIndex == columnIndex)\n                {\n                    // This cell starts at the column we're measuring\n                    if (item is TableCell tableCell)\n                    {\n                        // For spanning cells, distribute the measurement across spanned columns\n                        var cellMeasure = tableCell.Content.Measure(Options, maxWidth);\n\n                        if (tableCell.ColumnSpan > 1)\n                        {\n                            // Distribute the measurement evenly across spanned columns\n                            var minPerColumn = cellMeasure.Min / tableCell.ColumnSpan;\n                            var maxPerColumn = cellMeasure.Max / tableCell.ColumnSpan;\n                            minWidths.Add(minPerColumn);\n                            maxWidths.Add(maxPerColumn);\n                        }\n                        else\n                        {\n                            minWidths.Add(cellMeasure.Min);\n                            maxWidths.Add(cellMeasure.Max);\n                        }\n                    }\n                    else\n                    {\n                        var rowMeasure = item.Measure(Options, maxWidth);\n                        minWidths.Add(rowMeasure.Min);\n                        maxWidths.Add(rowMeasure.Max);\n                    }\n                    break; // Found the cell for this column, move to next row\n                }\n                else if (item is TableCell tableCell && currentColumnIndex + tableCell.ColumnSpan > columnIndex)\n                {\n                    // This column is covered by a spanning cell that started earlier\n                    // Contribute a portion of the spanning cell's measurement\n                    var cellMeasure = tableCell.Content.Measure(Options, maxWidth);\n                    var minPerColumn = cellMeasure.Min / tableCell.ColumnSpan;\n                    var maxPerColumn = cellMeasure.Max / tableCell.ColumnSpan;\n                    minWidths.Add(minPerColumn);\n                    maxWidths.Add(maxPerColumn);\n                    break;\n                }\n\n                // Advance column index\n                currentColumnIndex += item is TableCell tc ? tc.ColumnSpan : 1;\n            }\n        }\n\n        var padding = column.Padding?.GetWidth() ?? 0;\n\n        return new Measurement(\n            minWidths.Count > 0 ? minWidths.Max() : padding,\n            maxWidths.Count > 0 ? maxWidths.Max() : maxWidth);\n    }\n\n    // Reduce widths so that the total is less or equal to the max width.\n    // Ported from Rich by Will McGugan, licensed under MIT.\n    // https://github.com/willmcgugan/rich/blob/527475837ebbfc427530b3ee0d4d0741d2d0fc6d/rich/table.py#L442\n    private static List<int> CollapseWidths(List<int> widths, List<bool> wrappable, int maxWidth)\n    {\n        var totalWidth = widths.Sum();\n        var excessWidth = totalWidth - maxWidth;\n\n        if (wrappable.AnyTrue())\n        {\n            while (totalWidth != 0 && excessWidth > 0)\n            {\n                var maxColumn = widths.Zip(wrappable, (first, second) => (width: first, allowWrap: second))\n                    .Where(x => x.allowWrap)\n                    .Max(x => x.width);\n\n                var secondMaxColumn = widths.Zip(wrappable, (width, allowWrap) => allowWrap && width != maxColumn ? width : 1).Max();\n                var columnDifference = maxColumn - secondMaxColumn;\n\n                var ratios = widths.Zip(wrappable, (width, allowWrap) => width == maxColumn && allowWrap ? 1 : 0).ToList();\n                if (!ratios.Any(x => x != 0) || columnDifference == 0)\n                {\n                    break;\n                }\n\n                var maxReduce = widths.Select(_ => Math.Min(excessWidth, columnDifference)).ToList();\n                widths = Ratio.Reduce(excessWidth, ratios, maxReduce, widths);\n\n                totalWidth = widths.Sum();\n                excessWidth = totalWidth - maxWidth;\n            }\n        }\n\n        return widths;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableRenderer.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class TableRenderer\n{\n    private static readonly Style _defaultHeadingStyle = Color.Silver;\n    private static readonly Style _defaultCaptionStyle = Color.Grey;\n\n    public static List<Segment> Render(TableRendererContext context, List<int> columnWidths)\n    {\n        // Can't render the table?\n        if (context.TableWidth <= 0 || context.TableWidth > context.MaxWidth || columnWidths.Any(c => c < 0))\n        {\n            return\n            [\n                ..new[]\n                {\n                    new Segment(\"…\", context.BorderStyle)\n                }\n            ];\n        }\n\n        var result = new List<Segment>();\n        result.AddRange(RenderAnnotation(context, context.Title, _defaultHeadingStyle));\n\n        // Iterate all rows\n        foreach (var (index, isFirstRow, isLastRow, row) in context.Rows.Enumerate())\n        {\n            var cellHeight = 1;\n\n            // Get the list of cells for the row and calculate the cell height\n            // Store rendered lines, calculated width, column index, and span for each cell\n            var cells = new List<(List<SegmentLine>? Lines, int Width, int ColumnIndex, int Span)>();\n            var columnIndex = 0;\n\n            foreach (var item in row)\n            {\n                var cell = item;\n                var span = 1;\n\n                // Check if this is a spanning cell\n                if (item is TableCell tableCell)\n                {\n                    cell = tableCell.Content;\n                    span = tableCell.ColumnSpan;\n                }\n\n                // Calculate the total width for this cell (including spanned columns)\n                var cellWidth = columnWidths[columnIndex];\n                if (span > 1)\n                {\n                    // Add widths of spanned columns plus separator widths\n                    for (var i = 1; i < span; i++)\n                    {\n                        if (columnIndex + i < columnWidths.Count)\n                        {\n                            // Add separator width (assuming 1 character separator)\n                            if (context.ShowBorder)\n                            {\n                                cellWidth += 1;\n                            }\n                            cellWidth += columnWidths[columnIndex + i];\n\n                            // Add padding from intermediate columns\n                            if ((context.ShowBorder && context.Border.UsePadding) || context.IsGrid)\n                            {\n                                cellWidth += context.Columns[columnIndex + i].Padding.GetLeftSafe();\n                                cellWidth += context.Columns[columnIndex + i].Padding.GetRightSafe();\n                            }\n                        }\n                    }\n                }\n\n                var justification = context.Columns[columnIndex].Alignment;\n                var childContext = context.Options with\n                {\n                    Justification = justification\n                };\n\n                var lines = Segment.SplitLines(cell.Render(childContext, cellWidth));\n                cellHeight = Math.Max(cellHeight, lines.Count);\n                cells.Add((lines, cellWidth, columnIndex, span));\n\n                // Add null placeholders for spanned columns\n                for (var i = 1; i < span; i++)\n                {\n                    cells.Add((null, 0, columnIndex + i, 0));\n                }\n\n                columnIndex += span;\n            }\n\n            // Show top of header?\n            if (isFirstRow && context.ShowBorder)\n            {\n                var separator = context.Border.GetColumnRow(TablePart.Top, columnWidths, context.Columns);\n                if (!string.IsNullOrEmpty(separator))\n                {\n                    result.Add(new Segment(separator, context.BorderStyle));\n                    result.Add(Segment.LineBreak);\n                }\n            }\n\n            // Show footer separator?\n            if (context.ShowFooters && isLastRow && context.ShowBorder && context.HasFooters)\n            {\n                var textBorder = context.Border.GetColumnRow(TablePart.FooterSeparator, columnWidths, context.Columns);\n                if (!string.IsNullOrEmpty(textBorder))\n                {\n                    result.Add(new Segment(textBorder, context.BorderStyle));\n                    result.Add(Segment.LineBreak);\n                }\n            }\n\n            // Make cells the same shape (skip null placeholders for spanning)\n            for (var i = 0; i < cells.Count; i++)\n            {\n                if (cells[i].Lines != null && cells[i].Lines?.Count < cellHeight)\n                {\n                    var lines = cells[i].Lines;\n                    while (lines?.Count < cellHeight)\n                    {\n                        lines.Add(new SegmentLine());\n                    }\n                }\n            }\n\n            // Determine the indices of the first and last non-null cells\n            // to correctly apply border edges when spanning cells create trailing nulls.\n            var firstNonNullIndex = cells.FindIndex(c => c.Lines != null);\n            var lastNonNullIndex = cells.FindLastIndex(c => c.Lines != null);\n\n            // Iterate through each cell row\n            foreach (var cellRowIndex in Enumerable.Range(0, cellHeight))\n            {\n                var rowResult = new List<Segment>();\n\n                foreach (var (cellIndex, _, _, cellData) in cells.Enumerate())\n                {\n                    // Skip cells that are part of a span from a previous cell\n                    if (cellData.Lines == null)\n                    {\n                        continue;\n                    }\n\n                    var isFirstCell = cellIndex == firstNonNullIndex;\n                    var isLastCell = cellIndex == lastNonNullIndex;\n                    var actualColumnIndex = cellData.ColumnIndex;\n                    var cell = cellData.Lines;\n                    var cellWidth = cellData.Width;\n                    var cellSpan = cellData.Span;\n\n                    if (isFirstCell && context.ShowBorder)\n                    {\n                        // Show left column edge\n                        var part = isFirstRow && context.ShowHeaders\n                            ? TableBorderPart.HeaderLeft\n                            : TableBorderPart.CellLeft;\n                        rowResult.Add(new Segment(context.Border.GetPart(part), context.BorderStyle));\n                    }\n\n                    // Pad column on left side.\n                    if ((context.ShowBorder && context.Border.UsePadding) || context.IsGrid)\n                    {\n                        var leftPadding = context.Columns[actualColumnIndex].Padding.GetLeftSafe();\n                        if (leftPadding > 0)\n                        {\n                            rowResult.Add(new Segment(new string(' ', leftPadding)));\n                        }\n                    }\n\n                    // Add content\n                    rowResult.AddRange(cell[cellRowIndex]);\n\n                    // Pad cell content right\n                    var length = cell[cellRowIndex].Sum(segment => segment.CellCount());\n                    if (length < cellWidth)\n                    {\n                        rowResult.Add(new Segment(new string(' ', cellWidth - length)));\n                    }\n\n                    // Pad column on the right side (use the LAST column in the span)\n                    var rightColumnIndex = actualColumnIndex + cellSpan - 1;\n                    if ((context.ShowBorder && context.Border.UsePadding) || (context.HideBorder && !isLastCell) ||\n                        (context.HideBorder && isLastCell && context.IsGrid && context.PadRightCell))\n                    {\n                        var rightPadding = context.Columns[rightColumnIndex].Padding.GetRightSafe();\n                        if (rightPadding > 0)\n                        {\n                            rowResult.Add(new Segment(new string(' ', rightPadding)));\n                        }\n                    }\n\n                    if (isLastCell && context.ShowBorder)\n                    {\n                        // Add right column edge\n                        var part = isFirstRow && context.ShowHeaders\n                            ? TableBorderPart.HeaderRight\n                            : TableBorderPart.CellRight;\n                        rowResult.Add(new Segment(context.Border.GetPart(part), context.BorderStyle));\n                    }\n                    else if (context.ShowBorder)\n                    {\n                        // Add column separator\n                        // We should ALWAYS add separator after a cell, unless this is the last cell\n                        var part = isFirstRow && context.ShowHeaders\n                            ? TableBorderPart.HeaderSeparator\n                            : TableBorderPart.CellSeparator;\n                        rowResult.Add(new Segment(context.Border.GetPart(part), context.BorderStyle));\n                    }\n                }\n\n                // Is the row larger than the allowed max width?\n                if (Segment.CellCount(rowResult) > context.MaxWidth)\n                {\n                    result.AddRange(Segment.Truncate(rowResult, context.MaxWidth));\n                }\n                else\n                {\n                    result.AddRange(rowResult);\n                }\n\n                result.Add(Segment.LineBreak);\n            }\n\n            // Show header separator?\n            if (isFirstRow && context.ShowBorder && context.ShowHeaders && context.HasRows)\n            {\n                var separator = context.Border.GetColumnRow(TablePart.HeaderSeparator, columnWidths, context.Columns);\n                result.Add(new Segment(separator, context.BorderStyle));\n                result.Add(Segment.LineBreak);\n            }\n\n            // Show row separator, if headers are hidden show separator after the first row\n            if (context.Border.SupportsRowSeparator && context.ShowRowSeparators &&\n                (!isFirstRow || (isFirstRow && !context.ShowHeaders)) &&\n                !isLastRow)\n            {\n                var hasVisibleFootes = context is { ShowFooters: true, HasFooters: true };\n                var isNextLastLine = index == context.Rows.Count - 2;\n\n                var isRenderingFooter = hasVisibleFootes && isNextLastLine;\n                if (!isRenderingFooter)\n                {\n                    var separator = context.Border.GetColumnRow(TablePart.RowSeparator, columnWidths, context.Columns);\n                    result.Add(new Segment(separator, context.BorderStyle));\n                    result.Add(Segment.LineBreak);\n                }\n            }\n\n            // Show bottom of footer?\n            if (isLastRow && context.ShowBorder)\n            {\n                var separator = context.Border.GetColumnRow(TablePart.Bottom, columnWidths, context.Columns);\n                if (!string.IsNullOrEmpty(separator))\n                {\n                    result.Add(new Segment(separator, context.BorderStyle));\n                    result.Add(Segment.LineBreak);\n                }\n            }\n        }\n\n        result.AddRange(RenderAnnotation(context, context.Caption, _defaultCaptionStyle));\n        return result;\n    }\n\n    private static IEnumerable<Segment> RenderAnnotation(TableRendererContext context, TableTitle? header,\n        Style defaultStyle)\n    {\n        if (header == null)\n        {\n            return [];\n        }\n\n        var paragraph = new Markup(header.Text, header.Style ?? defaultStyle)\n            .Justify(Justify.Center)\n            .Overflow(Overflow.Ellipsis);\n\n        // Render the paragraphs\n        var segments = new List<Segment>();\n        segments.AddRange(((IRenderable)paragraph).Render(context.Options, context.TableWidth));\n\n        segments.Add(Segment.LineBreak);\n        return segments;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableRendererContext.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class TableRendererContext : TableAccessor\n{\n    private readonly Table _table;\n    private readonly List<TableRow> _rows;\n\n    public override IReadOnlyList<TableRow> Rows => _rows;\n\n    public TableBorder Border { get; }\n    public Style BorderStyle { get; }\n    public bool ShowBorder { get; }\n    public bool ShowRowSeparators { get; }\n    public bool HasRows { get; }\n    public bool HasFooters { get; }\n\n    /// <summary>\n    /// Gets the max width of the destination area.\n    /// The table might take up less than this.\n    /// </summary>\n    public int MaxWidth { get; }\n\n    /// <summary>\n    /// Gets the width of the table.\n    /// </summary>\n    public int TableWidth { get; }\n\n    public bool HideBorder => !ShowBorder;\n    public bool ShowHeaders => _table.ShowHeaders;\n    public bool ShowFooters => _table.ShowFooters;\n    public bool IsGrid => _table.IsGrid;\n    public bool PadRightCell => _table.PadRightCell;\n    public TableTitle? Title => _table.Title;\n    public TableTitle? Caption => _table.Caption;\n\n    public TableRendererContext(Table table, RenderOptions options, IEnumerable<TableRow> rows, int tableWidth, int maxWidth)\n        : base(table, options)\n    {\n        _table = table ?? throw new ArgumentNullException(nameof(table));\n        _rows = new List<TableRow>(rows ?? []);\n\n        ShowBorder = _table.Border.Visible;\n        HasRows = Rows.Any(row => !row.IsHeader && !row.IsFooter);\n        HasFooters = Rows.Any(column => column.IsFooter);\n        Border = table.Border.GetSafeBorder(!options.Unicode && table.UseSafeBorder);\n        BorderStyle = table.BorderStyle ?? Style.Plain;\n        ShowRowSeparators = table.ShowRowSeparators;\n\n        TableWidth = tableWidth;\n        MaxWidth = maxWidth;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableRow.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a table row.\n/// </summary>\npublic sealed class TableRow : IEnumerable<IRenderable>\n{\n    private readonly List<IRenderable> _items;\n\n    /// <summary>\n    /// Gets the number of columns in the row.\n    /// </summary>\n    public int Count => _items.Count;\n\n    internal bool IsHeader { get; }\n    internal bool IsFooter { get; }\n\n    /// <summary>\n    /// Gets a row item at the specified table column index.\n    /// </summary>\n    /// <param name=\"index\">The table column index.</param>\n    /// <returns>The row item at the specified table column index.</returns>\n    public IRenderable this[int index]\n    {\n        get => _items[index];\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableRow\"/> class.\n    /// </summary>\n    /// <param name=\"items\">The row items.</param>\n    public TableRow(IEnumerable<IRenderable> items)\n        : this(items, false, false)\n    {\n    }\n\n    private TableRow(IEnumerable<IRenderable> items, bool isHeader, bool isFooter)\n    {\n        _items = new List<IRenderable>(items ?? []);\n\n        // Reject column spanning in header or footer rows\n        if ((isHeader || isFooter) && _items.OfType<TableCell>().Any(cell => cell.ColumnSpan > 1))\n        {\n            var rowType = isHeader ? \"header\" : \"footer\";\n            throw new InvalidOperationException($\"Column spanning is not supported in table {rowType} rows.\");\n        }\n\n        IsHeader = isHeader;\n        IsFooter = isFooter;\n    }\n\n    internal static TableRow Header(IEnumerable<IRenderable> items)\n    {\n        return new TableRow(items, true, false);\n    }\n\n    internal static TableRow Footer(IEnumerable<IRenderable> items)\n    {\n        return new TableRow(items, false, true);\n    }\n\n    internal void Add(IRenderable item)\n    {\n        ArgumentNullException.ThrowIfNull(item);\n\n        _items.Add(item);\n    }\n\n    /// <inheritdoc/>\n    public IEnumerator<IRenderable> GetEnumerator()\n    {\n        return _items.GetEnumerator();\n    }\n\n    /// <inheritdoc/>\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableRowCollection.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a collection holding table rows.\n/// </summary>\npublic sealed class TableRowCollection : IReadOnlyList<TableRow>\n{\n    private readonly Table _table;\n    private readonly IList<TableRow> _list;\n    private readonly Lock _lock;\n\n    /// <inheritdoc/>\n    TableRow IReadOnlyList<TableRow>.this[int index]\n    {\n        get\n        {\n            lock (_lock)\n            {\n                return _list[index];\n            }\n        }\n    }\n\n    /// <summary>\n    /// Gets the number of rows in the collection.\n    /// </summary>\n    public int Count\n    {\n        get\n        {\n            lock (_lock)\n            {\n                return _list.Count;\n            }\n        }\n    }\n\n    internal TableRowCollection(Table table)\n    {\n        _table = table ?? throw new ArgumentNullException(nameof(table));\n        _list = new List<TableRow>();\n        _lock = LockFactory.Create();\n    }\n\n    /// <summary>\n    /// Adds a new row.\n    /// </summary>\n    /// <param name=\"columns\">The columns that are part of the row to add.</param>\n    /// <returns>The index of the added item.</returns>\n    public int Add(IEnumerable<IRenderable> columns)\n    {\n        ArgumentNullException.ThrowIfNull(columns);\n\n        lock (_lock)\n        {\n            var row = CreateRow(columns);\n            _list.Add(row);\n            return _list.Count - 1;\n        }\n    }\n\n    /// <summary>\n    /// Inserts a new row at the specified index.\n    /// </summary>\n    /// <param name=\"index\">The index to insert the row at.</param>\n    /// <param name=\"columns\">The columns that are part of the row to insert.</param>\n    /// <returns>The index of the inserted item.</returns>\n    public int Insert(int index, IEnumerable<IRenderable> columns)\n    {\n        ArgumentNullException.ThrowIfNull(columns);\n\n        lock (_lock)\n        {\n            var row = CreateRow(columns);\n            _list.Insert(index, row);\n            return _list.IndexOf(row);\n        }\n    }\n\n    /// <summary>\n    /// Update a table cell at the specified index.\n    /// </summary>\n    /// <param name=\"row\">Index of cell row.</param>\n    /// <param name=\"column\">index of cell column.</param>\n    /// <param name=\"cellData\">The new cells details.</param>\n    public void Update(int row, int column, IRenderable cellData)\n    {\n        ArgumentNullException.ThrowIfNull(cellData);\n\n        lock (_lock)\n        {\n            if (row < 0)\n            {\n                throw new IndexOutOfRangeException(\"Table row index cannot be negative.\");\n            }\n            else if (row >= _list.Count)\n            {\n                throw new IndexOutOfRangeException(\"Table row index cannot exceed the number of rows in the table.\");\n            }\n\n            var tableRow = _list.ElementAt(row);\n            var currentRenderables = tableRow.ToList();\n\n            if (column < 0)\n            {\n                throw new IndexOutOfRangeException(\"Table column index cannot be negative.\");\n            }\n            else if (column >= currentRenderables.Count)\n            {\n                throw new IndexOutOfRangeException(\"Table column index cannot exceed the number of rows in the table.\");\n            }\n\n            currentRenderables.RemoveAt(column);\n\n            currentRenderables.Insert(column, cellData);\n\n            var newTableRow = new TableRow(currentRenderables);\n\n            _list.RemoveAt(row);\n\n            _list.Insert(row, newTableRow);\n        }\n    }\n\n    /// <summary>\n    /// Removes a row at the specified index.\n    /// </summary>\n    /// <param name=\"index\">The index to remove a row at.</param>\n    public void RemoveAt(int index)\n    {\n        lock (_lock)\n        {\n            if (index < 0)\n            {\n                throw new IndexOutOfRangeException(\"Table row index cannot be negative.\");\n            }\n            else if (index >= _list.Count)\n            {\n                throw new IndexOutOfRangeException(\"Table row index cannot exceed the number of rows in the table.\");\n            }\n\n            _list.RemoveAt(index);\n        }\n    }\n\n    /// <summary>\n    /// Clears all rows.\n    /// </summary>\n    public void Clear()\n    {\n        lock (_lock)\n        {\n            _list.Clear();\n        }\n    }\n\n    /// <inheritdoc/>\n    public IEnumerator<TableRow> GetEnumerator()\n    {\n        lock (_lock)\n        {\n            var items = new TableRow[_list.Count];\n            _list.CopyTo(items, 0);\n            return new TableRowEnumerator(items);\n        }\n    }\n\n    /// <inheritdoc/>\n    IEnumerator IEnumerable.GetEnumerator()\n    {\n        return GetEnumerator();\n    }\n\n    private TableRow CreateRow(IEnumerable<IRenderable> columns)\n    {\n        var row = new TableRow(columns);\n\n        // Calculate total span considering TableCell instances\n        var totalSpan = 0;\n        for (var i = 0; i < row.Count; i++)\n        {\n            var cell = row[i];\n            if (cell is TableCell tableCell)\n            {\n                totalSpan += tableCell.ColumnSpan;\n            }\n            else\n            {\n                totalSpan++;\n            }\n        }\n\n        if (totalSpan > _table.Columns.Count)\n        {\n            throw new InvalidOperationException($\"The number of row columns (including spans) are greater than the number of table columns. Expected {_table.Columns.Count} but got {totalSpan}.\");\n        }\n\n        // Need to add missing columns\n        if (totalSpan < _table.Columns.Count)\n        {\n            var diff = _table.Columns.Count - totalSpan;\n            Enumerable.Range(0, diff).ForEach(_ => row.Add(Text.Empty));\n        }\n\n        return row;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableRowEnumerator.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class TableRowEnumerator : IEnumerator<TableRow>\n{\n    private readonly TableRow[] _items;\n    private int _index;\n\n    public TableRow Current => _items[_index];\n    object? IEnumerator.Current => _items[_index];\n\n    public TableRowEnumerator(TableRow[] items)\n    {\n        _items = items ?? throw new ArgumentNullException(nameof(items));\n        _index = -1;\n    }\n\n    public void Dispose()\n    {\n    }\n\n    public bool MoveNext()\n    {\n        _index++;\n        return _index < _items.Length;\n    }\n\n    public void Reset()\n    {\n        _index = -1;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Table/TableTitle.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a table title such as a heading or footnote.\n/// </summary>\npublic sealed class TableTitle\n{\n    /// <summary>\n    /// Gets the title text.\n    /// </summary>\n    public string Text { get; }\n\n    /// <summary>\n    /// Gets or sets the title style.\n    /// </summary>\n    public Style? Style { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TableTitle\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The title text.</param>\n    /// <param name=\"style\">The title style.</param>\n    public TableTitle(string text, Style? style = null)\n    {\n        Text = text ?? throw new ArgumentNullException(nameof(text));\n        Style = style;\n    }\n\n    /// <summary>\n    /// Sets the title style.\n    /// </summary>\n    /// <param name=\"style\">The title style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public TableTitle SetStyle(Style? style)\n    {\n        Style = style ?? Spectre.Console.Style.Plain;\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the title style.\n    /// </summary>\n    /// <param name=\"style\">The title style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public TableTitle SetStyle(string style)\n    {\n        ArgumentNullException.ThrowIfNull(style);\n\n        Style = Spectre.Console.Style.Parse(style);\n        return this;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Text.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// A renderable piece of text.\n/// </summary>\n[DebuggerDisplay(\"{_text,nq}\")]\n[SuppressMessage(\"Naming\", \"CA1724:Type names should not match namespaces\")]\npublic sealed class Text : Renderable, IHasJustification, IOverflowable\n{\n    private readonly Paragraph _paragraph;\n\n    /// <summary>\n    /// Gets an empty <see cref=\"Text\"/> instance.\n    /// </summary>\n    public static Text Empty { get; } = new Text(string.Empty);\n\n    /// <summary>\n    /// Gets an instance of <see cref=\"Text\"/> containing a new line.\n    /// </summary>\n    public static Text NewLine { get; } = new Text(Environment.NewLine, Style.Plain);\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Text\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"style\">The style of the text or <see cref=\"Style.Plain\"/> if <see langword=\"null\"/>.</param>\n    public Text(string text, Style? style = null)\n    {\n        _paragraph = new Paragraph(text, style);\n    }\n\n    /// <summary>\n    /// Gets or sets the text alignment.\n    /// </summary>\n    public Justify? Justification\n    {\n        get => _paragraph.Justification;\n        set => _paragraph.Justification = value;\n    }\n\n    /// <summary>\n    /// Gets or sets the text overflow strategy.\n    /// </summary>\n    public Overflow? Overflow\n    {\n        get => _paragraph.Overflow;\n        set => _paragraph.Overflow = value;\n    }\n\n    /// <summary>\n    /// Gets the character count.\n    /// </summary>\n    public int Length => _paragraph.Length;\n\n    /// <summary>\n    /// Gets the number of lines in the text.\n    /// </summary>\n    public int Lines => _paragraph.Lines;\n\n    /// <inheritdoc/>\n    protected override Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        return ((IRenderable)_paragraph).Measure(options, maxWidth);\n    }\n\n    /// <inheritdoc/>\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        return ((IRenderable)_paragraph).Render(options, maxWidth);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/TextPath.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Representation of a file system path.\n/// </summary>\npublic sealed class TextPath : IRenderable, IHasJustification\n{\n    private const string Ellipsis = \"...\";\n    private const string UnicodeEllipsis = \"…\";\n\n    private readonly string[] _parts;\n    private readonly bool _rooted;\n    private readonly bool _windows;\n\n    /// <summary>\n    /// Gets or sets the root style.\n    /// </summary>\n    public Style? RootStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the separator style.\n    /// </summary>\n    public Style? SeparatorStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the stem style.\n    /// </summary>\n    public Style? StemStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the leaf style.\n    /// </summary>\n    public Style? LeafStyle { get; set; }\n\n    /// <summary>\n    /// Gets or sets the alignment.\n    /// </summary>\n    public Justify? Justification { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TextPath\"/> class.\n    /// </summary>\n    /// <param name=\"path\">The path to render.</param>\n    public TextPath(string path)\n    {\n        // Normalize the path\n        path ??= string.Empty;\n        path = path.Replace('\\\\', '/');\n        path = path.TrimEnd('/').Trim();\n\n        // Get the distinct parts\n        _parts = path.Split(['/'], StringSplitOptions.RemoveEmptyEntries);\n\n        // Rooted Unix path?\n        if (path.StartsWith(\"/\", StringComparison.Ordinal))\n        {\n            _rooted = true;\n            _parts = new[] { \"/\" }.Concat(_parts).ToArray();\n        }\n        else if (_parts.Length > 0 && _parts[0].EndsWith(\":\", StringComparison.Ordinal))\n        {\n            // Rooted Windows path\n            _rooted = true;\n            _windows = true;\n        }\n    }\n\n    /// <inheritdoc/>\n    public Measurement Measure(RenderOptions options, int maxWidth)\n    {\n        var fitted = Fit(options, maxWidth);\n        var separatorCount = fitted.Length - 1;\n        var length = fitted.Sum(f => f.Length) + separatorCount;\n\n        return new Measurement(\n            Math.Min(length, maxWidth),\n            Math.Min(length, maxWidth));\n    }\n\n    /// <inheritdoc/>\n    public IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var rootStyle = RootStyle ?? Style.Plain;\n        var separatorStyle = SeparatorStyle ?? Style.Plain;\n        var stemStyle = StemStyle ?? Style.Plain;\n        var leafStyle = LeafStyle ?? Style.Plain;\n\n        var fitted = Fit(options, maxWidth);\n        var parts = new List<Segment>();\n        foreach (var (_, first, last, item) in fitted.Enumerate())\n        {\n            // Leaf?\n            if (last)\n            {\n                parts.Add(new Segment(item, leafStyle));\n            }\n            else\n            {\n                if (first && _rooted)\n                {\n                    // Root\n                    parts.Add(new Segment(item, rootStyle));\n\n                    if (_windows)\n                    {\n                        // Windows root has a slash\n                        parts.Add(new Segment(\"/\", separatorStyle));\n                    }\n                }\n                else\n                {\n                    // Normal path segment\n                    parts.Add(new Segment(item, stemStyle));\n                    parts.Add(new Segment(\"/\", separatorStyle));\n                }\n            }\n        }\n\n        // Align the result\n        Aligner.Align(parts, Justification, maxWidth);\n\n        return parts;\n    }\n\n    private string[] Fit(RenderOptions options, int maxWidth)\n    {\n        // No parts?\n        if (_parts.Length == 0)\n        {\n            return _parts;\n        }\n\n        // Will it fit as is?\n        if (_parts.Sum(Cell.GetCellLength) + (_parts.Length - 1) <= maxWidth)\n        {\n            return _parts;\n        }\n\n        var ellipsis = options.Unicode ? UnicodeEllipsis : Ellipsis;\n        var ellipsisLength = Cell.GetCellLength(ellipsis);\n\n        if (_parts.Length >= 2)\n        {\n            var skip = _rooted ? 1 : 0;\n            var separatorCount = _rooted ? 2 : 1;\n            var rootLength = _rooted ? Cell.GetCellLength(_parts[0]) : 0;\n\n            // Try popping parts until it fits\n            var queue = new Queue<string>(_parts.Skip(skip).Take(_parts.Length - separatorCount));\n            while (queue.Count > 0)\n            {\n                // Remove the first item\n                queue.Dequeue();\n\n                // Get the current queue width in cells\n                var queueWidth =\n                        rootLength // Root (if rooted)\n                        + ellipsisLength // Ellipsis\n                        + queue.Sum(Cell.GetCellLength) // Middle\n                        + Cell.GetCellLength(_parts.Last()) // Last\n                        + queue.Count + separatorCount; // Separators\n\n                // Will it fit?\n                if (maxWidth >= queueWidth)\n                {\n                    var result = new List<string>();\n\n                    if (_rooted)\n                    {\n                        // Add the root\n                        result.Add(_parts[0]);\n                    }\n\n                    result.Add(ellipsis);\n                    result.AddRange(queue);\n                    result.Add(_parts.Last());\n\n                    return result.ToArray();\n                }\n            }\n        }\n\n        // Just trim the last part so it fits\n        var last = _parts.Last();\n        var take = Math.Min(last.Length, Math.Max(0, maxWidth - ellipsisLength));\n        var start = Math.Max(0, last.Length - take);\n\n        return [string.Concat(ellipsis, last.Substring(start, take))];\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TextPath\"/>.\n/// </summary>\npublic static class TextPathExtensions\n{\n    /// <summary>\n    /// Sets the separator style.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"style\">The separator style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath SeparatorStyle(this TextPath obj, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.SeparatorStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the separator color.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"color\">The separator color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath SeparatorColor(this TextPath obj, Color color)\n    {\n        return SeparatorStyle(obj, new Style(foreground: color));\n    }\n\n    /// <summary>\n    /// Sets the root style.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"style\">The root style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath RootStyle(this TextPath obj, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.RootStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the root color.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"color\">The root color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath RootColor(this TextPath obj, Color color)\n    {\n        return RootStyle(obj, new Style(foreground: color));\n    }\n\n    /// <summary>\n    /// Sets the stem style.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"style\">The stem style to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath StemStyle(this TextPath obj, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.StemStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the stem color.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"color\">The stem color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath StemColor(this TextPath obj, Color color)\n    {\n        return StemStyle(obj, new Style(foreground: color));\n    }\n\n    /// <summary>\n    /// Sets the leaf style.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"style\">The stem leaf to set.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath LeafStyle(this TextPath obj, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(obj);\n\n        obj.LeafStyle = style;\n        return obj;\n    }\n\n    /// <summary>\n    /// Sets the leaf color.\n    /// </summary>\n    /// <param name=\"obj\">The path.</param>\n    /// <param name=\"color\">The leaf color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TextPath LeafColor(this TextPath obj, Color color)\n    {\n        return LeafStyle(obj, new Style(foreground: color));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/Tree.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Representation of non-circular tree data.\n/// Each node added to the tree may only be present in it a single time, in order to facilitate cycle detection.\n/// </summary>\npublic sealed class Tree : Renderable, IHasTreeNodes\n{\n    private readonly TreeNode _root;\n    private bool _expanded = true;\n\n    /// <summary>\n    /// Gets or sets the tree style.\n    /// </summary>\n    public Style? Style { get; set; }\n\n    /// <summary>\n    ///  Gets or sets the tree guide lines.\n    /// </summary>\n    public TreeGuide Guide { get; set; } = TreeGuide.Line;\n\n    /// <summary>\n    /// Gets the tree's child nodes.\n    /// </summary>\n    public List<TreeNode> Nodes => _root.Nodes;\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the tree is expanded or not.\n    /// </summary>\n    public bool Expanded\n    {\n        get => _expanded;\n        set\n        {\n            _expanded = value;\n            _root.Expand(value);\n        }\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Tree\"/> class.\n    /// </summary>\n    /// <param name=\"renderable\">The tree label.</param>\n    public Tree(IRenderable renderable)\n    {\n        _root = new TreeNode(renderable);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Tree\"/> class.\n    /// </summary>\n    /// <param name=\"label\">The tree label.</param>\n    public Tree(string label)\n    {\n        _root = new TreeNode(new Markup(label));\n    }\n\n    /// <inheritdoc />\n    protected override IEnumerable<Segment> Render(RenderOptions options, int maxWidth)\n    {\n        var result = new List<Segment>();\n        var visitedNodes = new HashSet<TreeNode>();\n\n        var stack = new Stack<Queue<TreeNode>>();\n        stack.Push(new Queue<TreeNode>([_root]));\n\n        var levels = new List<Segment>();\n        levels.Add(GetGuide(options, TreeGuidePart.Continue));\n\n        while (stack.Count > 0)\n        {\n            var stackNode = stack.Pop();\n            if (stackNode.Count == 0)\n            {\n                levels.RemoveLast();\n                if (levels.Count > 0)\n                {\n                    levels.AddOrReplaceLast(GetGuide(options, TreeGuidePart.Fork));\n                }\n\n                continue;\n            }\n\n            var isLastChild = stackNode.Count == 1;\n            var current = stackNode.Dequeue();\n            if (!visitedNodes.Add(current))\n            {\n                throw new CircularTreeException(\"Cycle detected in tree - unable to render.\");\n            }\n\n            stack.Push(stackNode);\n\n            if (isLastChild)\n            {\n                levels.AddOrReplaceLast(GetGuide(options, TreeGuidePart.End));\n            }\n\n            var prefix = levels.Skip(1).ToList();\n            var renderableLines = Segment.SplitLines(current.Renderable.Render(options, maxWidth - Segment.CellCount(prefix)));\n\n            foreach (var (_, isFirstLine, _, line) in renderableLines.Enumerate())\n            {\n                if (prefix.Count > 0)\n                {\n                    result.AddRange(prefix.ToList());\n                }\n\n                result.AddRange(line);\n                result.Add(Segment.LineBreak);\n\n                if (isFirstLine && prefix.Count > 0)\n                {\n                    var part = isLastChild ? TreeGuidePart.Space : TreeGuidePart.Continue;\n                    prefix.AddOrReplaceLast(GetGuide(options, part));\n                }\n            }\n\n            if (current.Expanded && current.Nodes.Count > 0)\n            {\n                levels.AddOrReplaceLast(GetGuide(options, isLastChild ? TreeGuidePart.Space : TreeGuidePart.Continue));\n                levels.Add(GetGuide(options, current.Nodes.Count == 1 ? TreeGuidePart.End : TreeGuidePart.Fork));\n\n                stack.Push(new Queue<TreeNode>(current.Nodes));\n            }\n        }\n\n        return result;\n    }\n\n    private Segment GetGuide(RenderOptions options, TreeGuidePart part)\n    {\n        var guide = Guide.GetSafeTreeGuide(safe: !options.Unicode);\n        return new Segment(guide.GetPart(part), Style ?? Spectre.Console.Style.Plain);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Tree\"/>.\n/// </summary>\npublic static class TreeExtensions\n{\n    /// <summary>\n    /// Sets the tree style.\n    /// </summary>\n    /// <param name=\"tree\">The tree.</param>\n    /// <param name=\"style\">The tree style.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Tree Style(this Tree tree, Style? style)\n    {\n        ArgumentNullException.ThrowIfNull(tree);\n\n        tree.Style = style;\n        return tree;\n    }\n\n    /// <summary>\n    /// Sets the tree guide line appearance.\n    /// </summary>\n    /// <param name=\"tree\">The tree.</param>\n    /// <param name=\"guide\">The tree guide lines to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Tree Guide(this Tree tree, TreeGuide guide)\n    {\n        ArgumentNullException.ThrowIfNull(tree);\n\n        tree.Guide = guide;\n        return tree;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console/Widgets/TreeNode.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a tree node.\n/// </summary>\npublic sealed class TreeNode : IHasTreeNodes\n{\n    internal IRenderable Renderable { get; }\n\n    /// <summary>\n    /// Gets the tree node's child nodes.\n    /// </summary>\n    public List<TreeNode> Nodes { get; } = [];\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not the tree node is expanded or not.\n    /// </summary>\n    public bool Expanded { get; set; } = true;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TreeNode\"/> class.\n    /// </summary>\n    /// <param name=\"renderable\">The tree node label.</param>\n    public TreeNode(IRenderable renderable)\n    {\n        Renderable = renderable;\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"TreeNode\"/>.\n/// </summary>\npublic static class TreeNodeExtensions\n{\n    /// <summary>\n    /// Expands the tree.\n    /// </summary>\n    /// <param name=\"node\">The tree node.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TreeNode Expand(this TreeNode node)\n    {\n        return Expand(node, true);\n    }\n\n    /// <summary>\n    /// Collapses the tree.\n    /// </summary>\n    /// <param name=\"node\">The tree node.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TreeNode Collapse(this TreeNode node)\n    {\n        return Expand(node, false);\n    }\n\n    /// <summary>\n    /// Sets whether or not the tree node should be expanded.\n    /// </summary>\n    /// <param name=\"node\">The tree node.</param>\n    /// <param name=\"expand\">Whether or not the tree node should be expanded.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TreeNode Expand(this TreeNode node, bool expand)\n    {\n        ArgumentNullException.ThrowIfNull(node);\n\n        node.Expanded = expand;\n        return node;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiCapabilities.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents ANSI capabilities.\n/// </summary>\npublic class AnsiCapabilities : IReadOnlyAnsiCapabilities\n{\n    /// <summary>\n    /// Gets or sets the color system.\n    /// </summary>\n    public ColorSystem ColorSystem { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// the console supports VT/ANSI control codes.\n    /// </summary>\n    public bool Ansi { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// the console support links.\n    /// </summary>\n    public bool Links { get; set; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether\n    /// or not the console supports alternate buffers.\n    /// </summary>\n    public bool AlternateBuffer { get; set; }\n\n    /// <summary>\n    /// Creates a <see cref=\"AnsiCapabilities\"/> instance from the provided arguments.\n    /// </summary>\n    /// <param name=\"writer\">The text writer to use.</param>\n    /// <returns>A <see cref=\"AnsiCapabilities\"/> instance.</returns>\n    public static AnsiCapabilities Create(TextWriter writer)\n    {\n        return Create(writer, new AnsiWriterSettings());\n    }\n\n    /// <summary>\n    /// Creates a <see cref=\"AnsiCapabilities\"/> instance from the provided arguments.\n    /// </summary>\n    /// <param name=\"writer\">The text writer to use.</param>\n    /// <param name=\"settings\">The settings to use.</param>\n    /// <returns>A <see cref=\"AnsiCapabilities\"/> instance.</returns>\n    public static AnsiCapabilities Create(TextWriter writer, AnsiWriterSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(writer);\n\n        // Detect if the terminal support ANSI or not\n        var (supportsAnsi, legacyConsole) = AnsiDetector.Detect(writer, settings.Ansi);\n\n        // Get the color system\n        var colorSystem = settings.ColorSystem == ColorSystemSupport.Detect\n            ? ColorSystemDetector.Detect(supportsAnsi)\n            : (ColorSystem)settings.ColorSystem;\n\n        return new AnsiCapabilities\n        {\n            ColorSystem = colorSystem,\n            Ansi = supportsAnsi,\n            Links = supportsAnsi && !legacyConsole,\n            AlternateBuffer = supportsAnsi && !legacyConsole,\n        };\n    }\n}\n\n/// <summary>\n/// Represents read-only ANSI capabilities.\n/// </summary>\npublic interface IReadOnlyAnsiCapabilities\n{\n    /// <summary>\n    /// Gets or sets the color system.\n    /// </summary>\n    public ColorSystem ColorSystem { get; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// the console supports VT/ANSI control codes.\n    /// </summary>\n    public bool Ansi { get; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not\n    /// the console support links.\n    /// </summary>\n    public bool Links { get; }\n\n    /// <summary>\n    /// Gets or sets a value indicating whether\n    /// or not the console supports alternate buffers.\n    /// </summary>\n    public bool AlternateBuffer { get; }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiDetector.cs",
    "content": "using System.Text.RegularExpressions;\n\nnamespace Spectre.Console;\n\ninternal static class AnsiDetector\n{\n    private static readonly Regex[] _regexes =\n    [\n        new(\"^xterm\"), // xterm, PuTTY, Mintty\n        new(\"^rxvt\"), // RXVT\n        new(\"^eterm\"), // Eterm\n        new(\"^screen\"), // GNU screen, tmux\n        new(\"tmux\"), // tmux\n        new(\"^vt100\"), // DEC VT series\n        new(\"^vt102\"), // DEC VT series\n        new(\"^vt220\"), // DEC VT series\n        new(\"^vt320\"), // DEC VT series\n        new(\"ansi\"), // ANSI\n        new(\"scoansi\"), // SCO ANSI\n        new(\"cygwin\"), // Cygwin, MinGW\n        new(\"linux\"), // Linux console\n        new(\"konsole\"), // Konsole\n        new(\"bvterm\"), // Bitvise SSH Client\n        new(\"^st-256color\"), // Suckless Simple Terminal, st\n        new(\"alacritty\") // Alacritty\n    ];\n\n    public static (bool Ansi, bool Legacy) Detect(TextWriter buffer, AnsiSupport ansi)\n    {\n        return Detect(\n            buffer,\n            ansi,\n            System.Console.IsOutputRedirected,\n            System.Console.IsErrorRedirected);\n    }\n\n    internal static (bool Ansi, bool Legacy) Detect(\n        TextWriter buffer,\n        AnsiSupport ansi,\n        bool isOutputRedirected,\n        bool isErrorRedirected)\n    {\n        var supportsAnsi = ansi == AnsiSupport.Yes;\n        var legacyConsole = false;\n\n        if (ansi == AnsiSupport.Detect)\n        {\n            if (buffer.IsStandardOut() && isOutputRedirected)\n            {\n                return (false, false);\n            }\n\n            if (buffer.IsStandardError() && isErrorRedirected)\n            {\n                return (false, false);\n            }\n\n            (supportsAnsi, legacyConsole) = AnsiDetector.Detect(buffer.IsStandardError(), true);\n            return (supportsAnsi, legacyConsole);\n        }\n\n        if (buffer.IsStandardOut() || buffer.IsStandardError())\n        {\n            // Are we running on Windows?\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n            {\n                // Try detecting whether or not this is a legacy console\n                (_, legacyConsole) = AnsiDetector.Detect(buffer.IsStandardError(), false);\n            }\n        }\n\n        return (supportsAnsi, legacyConsole);\n    }\n\n    private static (bool SupportsAnsi, bool LegacyConsole) Detect(bool stdError, bool upgrade)\n    {\n        // Running on Windows?\n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            // Running under ConEmu?\n            var conEmu = Environment.GetEnvironmentVariable(\"ConEmuANSI\");\n            if (!string.IsNullOrEmpty(conEmu) && conEmu.Equals(\"On\", StringComparison.OrdinalIgnoreCase))\n            {\n                return (true, false);\n            }\n\n            var supportsAnsi = Windows.SupportsAnsi(upgrade, stdError, out var legacyConsole);\n            return (supportsAnsi, legacyConsole);\n        }\n\n        return DetectFromTerm();\n    }\n\n    private static (bool SupportsAnsi, bool LegacyConsole) DetectFromTerm()\n    {\n        // Check if the terminal is of type ANSI/VT100/xterm compatible.\n        var term = Environment.GetEnvironmentVariable(\"TERM\");\n        if (!string.IsNullOrWhiteSpace(term))\n        {\n            if (_regexes.Any(regex => regex.IsMatch(term)))\n            {\n                return (true, false);\n            }\n        }\n\n        return (false, true);\n    }\n\n    private static class Windows\n    {\n        [SuppressMessage(\"StyleCop.CSharp.NamingRules\", \"SA1310:Field names should not contain underscore\")]\n        private const int STD_OUTPUT_HANDLE = -11;\n\n        [SuppressMessage(\"StyleCop.CSharp.NamingRules\", \"SA1310:Field names should not contain underscore\")]\n        private const int STD_ERROR_HANDLE = -12;\n\n        [SuppressMessage(\"StyleCop.CSharp.NamingRules\", \"SA1310:Field names should not contain underscore\")]\n        private const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;\n\n        [SuppressMessage(\"StyleCop.CSharp.NamingRules\", \"SA1310:Field names should not contain underscore\")]\n        private const uint DISABLE_NEWLINE_AUTO_RETURN = 0x0008;\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);\n\n        [DllImport(\"kernel32.dll\")]\n        private static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        private static extern IntPtr GetStdHandle(int nStdHandle);\n\n        [DllImport(\"kernel32.dll\")]\n        public static extern uint GetLastError();\n\n        public static bool SupportsAnsi(bool upgrade, bool stdError, out bool isLegacy)\n        {\n            isLegacy = false;\n\n            try\n            {\n                var @out = GetStdHandle(stdError ? STD_ERROR_HANDLE : STD_OUTPUT_HANDLE);\n                if (!GetConsoleMode(@out, out var mode))\n                {\n                    // Could not get console mode, try TERM (set in cygwin, WSL-Shell).\n                    var (ansiFromTerm, legacyFromTerm) = DetectFromTerm();\n\n                    isLegacy = ansiFromTerm ? legacyFromTerm : isLegacy;\n                    return ansiFromTerm;\n                }\n\n                if ((mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0)\n                {\n                    isLegacy = true;\n\n                    if (!upgrade)\n                    {\n                        return false;\n                    }\n\n                    // Try enable ANSI support.\n                    mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN;\n                    if (!SetConsoleMode(@out, mode))\n                    {\n                        // Enabling failed.\n                        return false;\n                    }\n\n                    isLegacy = false;\n                }\n\n                return true;\n            }\n            catch\n            {\n                // All we know here is that we don't support ANSI.\n                return false;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiMarkup.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Utility used for working with markup text.\n/// </summary>\npublic sealed class AnsiMarkup\n{\n    private readonly AnsiWriter _writer;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiMarkup\"/> class.\n    /// </summary>\n    /// <param name=\"writer\">The ANSI writer to use for writing.</param>\n    public AnsiMarkup(AnsiWriter writer)\n    {\n        _writer = writer ?? throw new ArgumentNullException(nameof(writer));\n    }\n\n    /// <summary>\n    /// Outputs the specified markup.\n    /// </summary>\n    /// <param name=\"markup\">The markup to write.</param>\n    /// <param name=\"style\">The base style to use during parsing.</param>\n    public void Write(string markup, Style? style = null)\n    {\n        foreach (var segment in Parse(markup, style))\n        {\n            _writer.Write(segment.Text, segment.Style, segment.Link);\n        }\n    }\n\n    /// <summary>\n    /// Outputs the specified markup, followed by the current line terminator\n    /// </summary>\n    /// <param name=\"markup\">The markup to write.</param>\n    public void WriteLine(string markup)\n    {\n        Write(markup);\n        _writer.WriteLine();\n    }\n\n    /// <summary>\n    /// Parses the specified markup text into segments that can be processed.\n    /// </summary>\n    /// <param name=\"markup\">The markup to parse.</param>\n    /// <param name=\"style\">The base style to use when parsing.</param>\n    /// <returns>One or more segments that represents the parsed markup.</returns>\n    public static IEnumerable<AnsiMarkupSegment> Parse(string markup, Style? style = null)\n    {\n        ArgumentNullException.ThrowIfNull(markup);\n\n        style ??= Style.Plain;\n\n        using var tokenizer = new MarkupTokenizer(markup);\n\n        var result = new List<AnsiMarkupSegment>();\n        var stack = new Stack<Style>();\n        var link = default(Link?);\n\n        while (tokenizer.MoveNext())\n        {\n            var token = tokenizer.Current;\n\n            if (token.Kind == MarkupTokenKind.Open)\n            {\n                var parsed = AnsiMarkupTagParser.Parse(token.Value);\n                link ??= parsed.Link;\n                stack.Push(style.Value);\n                style = style.Value.Combine(parsed.Style);\n            }\n            else if (token.Kind == MarkupTokenKind.Close)\n            {\n                if (stack.Count == 0)\n                {\n                    throw new InvalidOperationException(\n                        $\"Encountered closing tag when none was expected near position {token.Position}.\");\n                }\n\n                style = stack.Pop();\n            }\n            else if (token.Kind == MarkupTokenKind.Text)\n            {\n                if (result.Count > 0 && result[^1].Style.Equals(style))\n                {\n                    // Merge segments\n                    result[^1].Text += token.Value;\n                }\n                else\n                {\n                    result.Add(\n                        new AnsiMarkupSegment(\n                        token.Value, style.Value, link));\n                }\n            }\n            else\n            {\n                throw new InvalidOperationException(\"Encountered unknown markup token.\");\n            }\n        }\n\n        if (stack.Count > 0)\n        {\n            throw new InvalidOperationException(\"Unbalanced markup stack. Did you forget to close a tag?\");\n        }\n\n        return result;\n    }\n\n    /// <summary>\n    /// Escapes the specified text so that it won’t be interpreted as markup.\n    /// </summary>\n    /// <param name=\"markup\">The markup to escape.</param>\n    /// <returns>The escaped markup.</returns>\n    public static string Escape(string? markup)\n    {\n        if (markup == null)\n        {\n            return string.Empty;\n        }\n\n        return markup\n            .ReplaceExact(\"[\", \"[[\")\n            .ReplaceExact(\"]\", \"]]\");\n    }\n\n    /// <summary>\n    /// Removes markup from the specified text.\n    /// </summary>\n    /// <param name=\"markup\">The markup to clean.</param>\n    /// <returns>The provided text without markup.</returns>\n    public static string Remove(string? markup)\n    {\n        if (string.IsNullOrWhiteSpace(markup))\n        {\n            return string.Empty;\n        }\n\n        var result = new StringBuilder();\n\n        using var tokenizer = new MarkupTokenizer(markup);\n        while (tokenizer.MoveNext() && tokenizer.Current != null)\n        {\n            if (tokenizer.Current.Kind == MarkupTokenKind.Text)\n            {\n                result.Append(tokenizer.Current.Value);\n            }\n        }\n\n        return result.ToString();\n    }\n\n    /// <summary>\n    /// Highlights the first text match in provided markup.\n    /// </summary>\n    /// <param name=\"markup\">The markup text.</param>\n    /// <param name=\"query\">The search text to highlight.</param>\n    /// <param name=\"style\">The highlight style.</param>\n    /// <returns>Highlighted markup text, using the specified style.</returns>\n    public static string Highlight(string markup, string query, Style style)\n    {\n        return AnsiMarkupHighlighter.Highlight(markup, query, style);\n    }\n}\n\n/// <summary>\n/// Represents a markup segment.\n/// </summary>\npublic sealed class AnsiMarkupSegment\n{\n    /// <summary>\n    /// Gets the segment text.\n    /// </summary>\n    public string Text { get; internal set; }\n\n    /// <summary>\n    /// Gets the segment style.\n    /// </summary>\n    public Style Style { get; }\n\n    /// <summary>\n    /// Gets the segment link.\n    /// </summary>\n    public Link? Link { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiMarkupSegment\"/> class.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"link\">The link.</param>\n    public AnsiMarkupSegment(string text, Style style, Link? link)\n    {\n        Text = text;\n        Style = style;\n        Link = link;\n    }\n\n    /// <inheritdoc />\n    public override string ToString()\n    {\n        var escaped = AnsiMarkup.Escape(Text);\n        return !Style.Equals(Style.Plain)\n            ? $\"[{Style.ToMarkup()}]{escaped}[/]\"\n            : escaped;\n    }\n}\n\nfile enum MarkupTokenKind\n{\n    Text = 0,\n    Open,\n    Close,\n}\n\nfile sealed class MarkupToken\n{\n    public MarkupTokenKind Kind { get; }\n    public string Value { get; }\n    public int Position { get; set; }\n\n    public MarkupToken(MarkupTokenKind kind, string value, int position)\n    {\n        Kind = kind;\n        Value = value ?? throw new ArgumentNullException(nameof(value));\n        Position = position;\n    }\n}\n\nfile sealed class MarkupTokenizer : IDisposable\n{\n    private readonly StringBuffer _reader;\n\n    public MarkupToken Current { get => field!; private set; }\n\n    public MarkupTokenizer(string text)\n    {\n        _reader = new StringBuffer(text);\n    }\n\n    public void Dispose()\n    {\n        _reader.Dispose();\n    }\n\n    public bool MoveNext()\n    {\n        if (_reader.Eof)\n        {\n            return false;\n        }\n\n        Current = _reader.Peek() == '['\n            ? ReadMarkup()\n            : ReadText();\n\n        return true;\n    }\n\n    private MarkupToken ReadText()\n    {\n        var position = _reader.Position;\n        var builder = new StringBuilder();\n\n        while (!_reader.Eof)\n        {\n            var current = _reader.Peek();\n            if (current == '[')\n            {\n                // markup encountered. Stop processing.\n                break;\n            }\n\n            // If we find a closing tag (']') there must be two of them.\n            if (current == ']')\n            {\n                _reader.Read();\n                if (_reader.Peek() != ']')\n                {\n                    throw new InvalidOperationException(\n                        $\"Encountered unescaped ']' token at position {_reader.Position}\");\n                }\n            }\n\n            builder.Append(_reader.Read());\n        }\n\n        return new MarkupToken(MarkupTokenKind.Text, builder.ToString(), position);\n    }\n\n    private MarkupToken ReadMarkup()\n    {\n        var position = _reader.Position;\n\n        // Read initial opening bracket\n        _reader.Read();\n\n        if (_reader.Eof)\n        {\n            ThrowMalformed(_reader.Position);\n        }\n\n        switch (_reader.Peek())\n        {\n            case '[':\n                // No markup but instead escaped markup in text.\n                _reader.Read();\n                return new MarkupToken(MarkupTokenKind.Text, \"[\", position);\n            case '/':\n                // Markup closed.\n                _reader.Read();\n\n                if (_reader.Eof)\n                {\n                    ThrowMalformed(_reader.Position);\n                }\n\n                if (_reader.Read() != ']')\n                {\n                    ThrowMalformed(_reader.Position - 1);\n                }\n\n                return new MarkupToken(MarkupTokenKind.Close, string.Empty, position);\n        }\n\n        // Read the \"content\" of the markup until we find the end-of-markup\n        var builder = new StringBuilder();\n        var currentStylePartCanContainMarkup = false;\n        while (!_reader.Eof)\n        {\n            var current = _reader.Read();\n\n            if (current == ']')\n            {\n                if (!currentStylePartCanContainMarkup || _reader.Peek() != ']')\n                {\n                    // Not parsing a link or not escaped. Markup closed\n                    break;\n                }\n\n                _reader.Read();\n            }\n\n            if (current == '[')\n            {\n                if (!currentStylePartCanContainMarkup || _reader.Peek() != '[')\n                {\n                    ThrowMalformed(_reader.Position - 1);\n                }\n\n                _reader.Read();\n            }\n\n            builder.Append(current);\n\n            const string LinkPrefix = \"link=\";\n            if (current == ' ')\n            {\n                currentStylePartCanContainMarkup = false;\n            }\n            // Only check if we're not already parsing a link & we added the last character of the prefix\n            else if (!currentStylePartCanContainMarkup && current == LinkPrefix[^1] && builder.Length >= LinkPrefix.Length)\n            {\n                currentStylePartCanContainMarkup =\n                    (builder.Length == LinkPrefix.Length || builder[^(LinkPrefix.Length + 1)] == ' ')\n                    && builder.ToString(builder.Length - LinkPrefix.Length, LinkPrefix.Length)\n                        .Equals(LinkPrefix, StringComparison.OrdinalIgnoreCase);\n            }\n        }\n\n        if (_reader.Eof)\n        {\n            ThrowMalformed(_reader.Position);\n        }\n\n        return new MarkupToken(MarkupTokenKind.Open, builder.ToString(), position);\n    }\n\n    [DoesNotReturn]\n    private static void ThrowMalformed(int pos) =>\n        throw new InvalidOperationException($\"Encountered malformed markup tag at position {pos}.\");\n}\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiMarkupHighlighter.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class AnsiMarkupHighlighter\n{\n    public static string Highlight(string markup, string query, Style style)\n    {\n        ArgumentNullException.ThrowIfNull(markup);\n        ArgumentNullException.ThrowIfNull(query);\n\n        if (query.Length == 0)\n        {\n            return markup;\n        }\n\n        var parts = IndexedMarkupSegment.Parse(markup);\n        var plain = string.Concat(parts.Select(p => p.Text));\n        var startIndex = plain.IndexOf(query, StringComparison.Ordinal);\n        var endIndex = startIndex + query.Length;\n\n        if (startIndex == -1)\n        {\n            return markup;\n        }\n\n        var result = new List<AnsiMarkupSegment>();\n        var partFound = false;\n\n        foreach (var part in parts)\n        {\n            // Not found the part with the search expression yet?\n            if (!partFound)\n            {\n                if (startIndex >= part.StartIndex && startIndex <= part.EndIndex)\n                {\n                    var beginning = part.Text[0..(startIndex - part.StartIndex)];\n                    result.Add(new AnsiMarkupSegment(beginning, part.Style, part.Link));\n\n                    var centerStart = startIndex - part.StartIndex;\n                    var centerEnd = Math.Min(endIndex - startIndex, part.Text.Length - beginning.Length);\n                    var center = part.Text.Substring(centerStart, centerEnd);\n                    result.Add(new AnsiMarkupSegment(center, style, part.Link));\n\n                    var endStart = part.Text.Length - center.Length - beginning.Length;\n                    if (endStart > 0)\n                    {\n                        // Got an end as well\n                        result.Add(new AnsiMarkupSegment(part.Text[^endStart..], part.Style, part.Link));\n                    }\n\n                    partFound = true;\n                }\n                else\n                {\n                    result.Add(new AnsiMarkupSegment(part.Text, part.Style, part.Link));\n                }\n\n                continue;\n            }\n\n            // Now continue with everything after the query\n\n            if (part.StartIndex < endIndex)\n            {\n                var remaining = endIndex - part.StartIndex;\n                if (remaining > part.Text.Length)\n                {\n                    result.Add(new AnsiMarkupSegment(part.Text, style, part.Link));\n                }\n                else\n                {\n                    result.Add(new AnsiMarkupSegment(part.Text[..remaining], style, part.Link));\n\n                    if (remaining < part.Text.Length)\n                    {\n                        result.Add(new AnsiMarkupSegment(part.Text[remaining..], part.Style, part.Link));\n                    }\n                }\n            }\n            else\n            {\n                result.Add(new AnsiMarkupSegment(part.Text, part.Style, part.Link));\n            }\n        }\n\n        // Merge and render all the segments\n        return string.Concat(\n            MergeSegments(result)\n                .Select(item => item.ToString()));\n    }\n\n    private static List<AnsiMarkupSegment> MergeSegments(IEnumerable<AnsiMarkupSegment> segments)\n    {\n        var result = new List<AnsiMarkupSegment>();\n\n        foreach (var (item, index) in segments.Select((item, index) => (item, index)))\n        {\n            if (index > 0 && result.Count > 0)\n            {\n                if (result[^1].Style.Equals(item.Style))\n                {\n                    result[^1].Text += item.Text;\n                }\n                else\n                {\n                    result.Add(new AnsiMarkupSegment(\n                        item.Text, item.Style, item.Link));\n                }\n            }\n            else\n            {\n                result.Add(new AnsiMarkupSegment(\n                    item.Text, item.Style, item.Link));\n            }\n        }\n\n        return result;\n    }\n}\n\nfile sealed class IndexedMarkupSegment\n{\n    private readonly AnsiMarkupSegment _segment;\n\n    public string Text => _segment.Text;\n    public Style Style => _segment.Style;\n    public Link? Link => _segment.Link;\n    public int StartIndex { get; }\n    public int EndIndex => StartIndex + _segment.Text.Length;\n\n    private IndexedMarkupSegment(AnsiMarkupSegment segment, int startIndex)\n    {\n        _segment = segment ?? throw new ArgumentNullException(nameof(segment));\n        StartIndex = startIndex;\n    }\n\n    public static IndexedMarkupSegment[] Parse(string value)\n    {\n        var currentIndex = 0;\n        return AnsiMarkup.Parse(value).Select(segment =>\n        {\n            var result = new IndexedMarkupSegment(segment, currentIndex);\n            currentIndex += segment.Text.Length;\n            return result;\n        }).ToArray();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiMarkupTagParser.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class AnsiMarkupTagParser\n{\n    public static (Style Style, Link? Link) Parse(string text)\n    {\n        var result = Parse(text, out var error);\n        if (error != null)\n        {\n            throw new InvalidOperationException(error);\n        }\n\n        return result ?? throw new InvalidOperationException(\"Could not parse style.\");\n    }\n\n    public static bool TryParse(string text, [NotNullWhen(true)] out (Style Style, Link?)? result)\n    {\n        result = Parse(text, out _);\n        return result != null;\n    }\n\n    private static (Style Style, Link? Link)? Parse(string text, out string? error)\n    {\n        var effectiveDecoration = (Decoration?)null;\n        var effectiveForeground = (Color?)null;\n        var effectiveBackground = (Color?)null;\n        var effectiveLink = (string?)null;\n\n        var parts = text.Split([' ']);\n        var foreground = true;\n        foreach (var part in parts)\n        {\n            if (part.Equals(\"default\", StringComparison.OrdinalIgnoreCase))\n            {\n                continue;\n            }\n\n            if (part.Equals(\"on\", StringComparison.OrdinalIgnoreCase))\n            {\n                foreground = false;\n                continue;\n            }\n\n            if (part.StartsWith(\"link=\", StringComparison.OrdinalIgnoreCase))\n            {\n                if (effectiveLink != null)\n                {\n                    error = \"A link has already been set.\";\n                    return null;\n                }\n\n                effectiveLink = part.Substring(5);\n                continue;\n            }\n            else if (part.StartsWith(\"link\", StringComparison.OrdinalIgnoreCase))\n            {\n                effectiveLink = Constants.EmptyLink;\n                continue;\n            }\n\n            var decoration = DecorationTable.GetDecoration(part);\n            if (decoration != null)\n            {\n                effectiveDecoration ??= Decoration.None;\n\n                effectiveDecoration |= decoration.Value;\n            }\n            else\n            {\n                var color = ColorTable.GetColor(part);\n                if (color == null)\n                {\n                    if (part.StartsWith(\"#\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        color = ParseHexColor(part, out error);\n                        if (!string.IsNullOrWhiteSpace(error))\n                        {\n                            return null;\n                        }\n                    }\n                    else if (part.StartsWith(\"rgb\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        color = ParseRgbColor(part, out error);\n                        if (!string.IsNullOrWhiteSpace(error))\n                        {\n                            return null;\n                        }\n                    }\n                    else if (int.TryParse(part, out var number))\n                    {\n                        if (number < 0)\n                        {\n                            error = $\"Color number must be greater than or equal to 0 (was {number})\";\n                            return null;\n                        }\n                        else if (number > 255)\n                        {\n                            error = $\"Color number must be less than or equal to 255 (was {number})\";\n                            return null;\n                        }\n\n                        color = number;\n                    }\n                    else\n                    {\n                        error = !foreground\n                            ? $\"Could not find color '{part}'.\"\n                            : $\"Could not find color or style '{part}'.\";\n\n                        return null;\n                    }\n                }\n\n                if (foreground)\n                {\n                    if (effectiveForeground != null)\n                    {\n                        error = \"A foreground color has already been set.\";\n                        return null;\n                    }\n\n                    effectiveForeground = color;\n                }\n                else\n                {\n                    if (effectiveBackground != null)\n                    {\n                        error = \"A background color has already been set.\";\n                        return null;\n                    }\n\n                    effectiveBackground = color;\n                }\n            }\n        }\n\n        var link = effectiveLink != null\n            ? new Link(effectiveLink)\n            : null;\n\n        error = null;\n        return (new Style(\n                effectiveForeground,\n                effectiveBackground,\n                effectiveDecoration),\n            link);\n    }\n\n    private static Color? ParseHexColor(string hex, out string? error)\n    {\n        error = null;\n\n        hex ??= string.Empty;\n        hex = hex.ReplaceExact(\"#\", string.Empty).Trim();\n\n        try\n        {\n            if (!string.IsNullOrWhiteSpace(hex))\n            {\n                if (hex.Length == 6)\n                {\n                    return new Color(\n                        (byte)Convert.ToUInt32(hex.Substring(0, 2), 16),\n                        (byte)Convert.ToUInt32(hex.Substring(2, 2), 16),\n                        (byte)Convert.ToUInt32(hex.Substring(4, 2), 16));\n                }\n                else if (hex.Length == 3)\n                {\n                    return new Color(\n                        (byte)Convert.ToUInt32(new string(hex[0], 2), 16),\n                        (byte)Convert.ToUInt32(new string(hex[1], 2), 16),\n                        (byte)Convert.ToUInt32(new string(hex[2], 2), 16));\n                }\n            }\n        }\n        catch (Exception ex)\n        {\n            error = $\"Invalid hex color '#{hex}'. {ex.Message}\";\n            return null;\n        }\n\n        error = $\"Invalid hex color '#{hex}'.\";\n        return null;\n    }\n\n    private static Color? ParseRgbColor(string rgb, out string? error)\n    {\n        try\n        {\n            error = null;\n\n            var normalized = rgb ?? string.Empty;\n            if (normalized.Length >= 3)\n            {\n                // Trim parentheses\n                normalized = normalized.Substring(3).Trim();\n\n                if (normalized.StartsWith(\"(\", StringComparison.OrdinalIgnoreCase) &&\n                   normalized.EndsWith(\")\", StringComparison.OrdinalIgnoreCase))\n                {\n                    normalized = normalized.Trim('(').Trim(')');\n\n                    var parts = normalized.Split([','], StringSplitOptions.RemoveEmptyEntries);\n                    if (parts.Length == 3)\n                    {\n                        return new Color(\n                            (byte)Convert.ToInt32(parts[0], CultureInfo.InvariantCulture),\n                            (byte)Convert.ToInt32(parts[1], CultureInfo.InvariantCulture),\n                            (byte)Convert.ToInt32(parts[2], CultureInfo.InvariantCulture));\n                    }\n                }\n            }\n        }\n        catch (Exception ex)\n        {\n            error = $\"Invalid RGB color '{rgb}'. {ex.Message}\";\n            return null;\n        }\n\n        error = $\"Invalid RGB color '{rgb}'.\";\n        return null;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiSupport.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Determines ANSI escape sequence support.\n/// </summary>\npublic enum AnsiSupport\n{\n    /// <summary>\n    /// ANSI escape sequence support should\n    /// be detected by the system.\n    /// </summary>\n    Detect = 0,\n\n    /// <summary>\n    /// ANSI escape sequences are supported.\n    /// </summary>\n    Yes = 1,\n\n    /// <summary>\n    /// ANSI escape sequences are not supported.\n    /// </summary>\n    No = 2,\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiWriter.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents an ANSI writer, capable of outputting ANSI/VT escape sequences.\n/// </summary>\npublic sealed class AnsiWriter\n{\n    private readonly TextWriter _output;\n    private readonly List<byte> _codes;\n    private readonly List<byte> _styleBuffer;\n    private int _linkCount;\n\n    /// <summary>\n    /// Gets or sets the capabilities for the writer.\n    /// </summary>\n    public IReadOnlyAnsiCapabilities Capabilities { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiWriter\"/> class.\n    /// </summary>\n    /// <param name=\"output\">The <see cref=\"TextWriter\"/> to write to.</param>\n    public AnsiWriter(TextWriter output)\n    {\n        _output = output ?? throw new ArgumentNullException(nameof(output));\n        _codes = [];\n        _styleBuffer = [];\n\n        Capabilities = AnsiCapabilities.Create(_output);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"AnsiWriter\"/> class.\n    /// </summary>\n    /// <param name=\"output\">The <see cref=\"TextWriter\"/> to write to.</param>\n    /// <param name=\"capabilities\">The capabilities.</param>\n    public AnsiWriter(TextWriter output, AnsiCapabilities capabilities)\n    {\n        _output = output ?? throw new ArgumentNullException(nameof(output));\n        _codes = [];\n        _styleBuffer = [];\n\n        Capabilities = capabilities ?? throw new ArgumentNullException(nameof(capabilities));\n    }\n\n    /// <summary>\n    /// Writes the specified text.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Write(string text)\n    {\n        _output.Write(text);\n        return this;\n    }\n\n    /// <summary>\n    /// Writes an integer.\n    /// </summary>\n    /// <param name=\"value\">The integer.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Write(int value)\n    {\n        _output.Write(value);\n        return this;\n    }\n\n    /// <summary>\n    /// Writes the specified text with the specified style.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"link\">The link.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Write(string text, Style style, Link? link = null)\n    {\n        var shouldClose = false;\n\n        if (Capabilities.Ansi)\n        {\n            if (link != null)\n            {\n                var url = link.Url.Equals(Constants.EmptyLink) ? text : link.Url;\n                BeginLink(url, link.Id);\n            }\n\n            _styleBuffer.Clear();\n            _styleBuffer.AddRange(AnsiCodeBuilder.Build(style.Decoration));\n            _styleBuffer.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, style.Foreground, true));\n            _styleBuffer.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, style.Background, false));\n\n            shouldClose = WriteSgr(_styleBuffer);\n        }\n\n        _output.Write(text);\n\n        if (Capabilities.Ansi)\n        {\n            if (shouldClose)\n            {\n                WriteSgr(0);\n            }\n\n            if (link != null)\n            {\n                EndLink();\n            }\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Writes an empty line.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter WriteLine()\n    {\n        _output.Write(Environment.NewLine);\n        return this;\n    }\n\n    /// <summary>\n    /// Writes the specified text, followed by the current line terminator.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter WriteLine(string text)\n    {\n        _output.Write(text);\n        WriteLine();\n\n        return this;\n    }\n\n    /// <summary>\n    /// Writes the specified text with the specified style, followed by the current line terminator.\n    /// </summary>\n    /// <param name=\"text\">The text.</param>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"link\">The link.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter WriteLine(string text, Style style, Link? link = null)\n    {\n        Write(text, style, link);\n        WriteLine();\n\n        return this;\n    }\n\n    /// <summary>\n    /// Writes a <see cref=\"Style\"/> by emitting <c>SGR</c>.\n    /// </summary>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"link\">The link.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Style(Style style, Link? link = null)\n    {\n        if (Capabilities.Ansi)\n        {\n            if (link != null)\n            {\n                BeginLink(link);\n            }\n\n            _codes.Clear();\n            _codes.AddRange(AnsiCodeBuilder.Build(style.Decoration));\n            _codes.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, style.Foreground, true));\n            _codes.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, style.Background, false));\n\n            WriteSgr(_codes);\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Resets any foreground, background, decoration, or style by emitting <c>SGR(0)</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#SGR\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter ResetStyle()\n    {\n        if (Capabilities.Ansi)\n        {\n            WriteSgr(0);\n            EndLink();\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the current decoration by emitting <c>SGR</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#SGR\"/>.\n    /// </remarks>\n    /// <param name=\"decoration\">The decoration.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Decoration(Decoration decoration)\n    {\n        if (Capabilities.Ansi)\n        {\n            _codes.Clear();\n            _codes.AddRange(AnsiCodeBuilder.Build(decoration));\n\n            WriteSgr(_codes);\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the current background color by emitting <c>SGR</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#SGR\"/>.\n    /// </remarks>\n    /// <param name=\"color\">The background color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Background(Color color)\n    {\n        if (Capabilities.Ansi)\n        {\n            _codes.Clear();\n            _codes.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, color, false));\n\n            WriteSgr(_codes);\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Sets the current foreground color by emitting <c>SGR</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#SGR\"/>.\n    /// </remarks>\n    /// <param name=\"color\">The foreground color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter Foreground(Color color)\n    {\n        if (Capabilities.Ansi)\n        {\n            _codes.Clear();\n            _codes.AddRange(AnsiCodeBuilder.Build(Capabilities.ColorSystem, color, true));\n\n            WriteSgr(_codes);\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Begins a link by emitting <c>OSC 8</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda\"/>.\n    /// </remarks>\n    /// <param name=\"link\">The link.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter BeginLink(Link link)\n    {\n        ArgumentNullException.ThrowIfNull(link);\n        return BeginLink(link.Url, link.Id);\n    }\n\n    /// <summary>\n    /// Begins a link by emitting <c>OSC 8</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda\"/>.\n    /// </remarks>\n    /// <param name=\"link\">The link.</param>\n    /// <param name=\"linkId\">The link ID.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter BeginLink(string link, int? linkId = null)\n    {\n        ArgumentNullException.ThrowIfNull(link);\n\n        if (Capabilities is { Ansi: true, Links: true })\n        {\n            _linkCount++;\n\n            WriteOsc(\n                linkId != null\n                    ? $\"8;id={linkId};{link}\\e\\\\\"\n                    : $\"8;{link}\\e\\\\\");\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// Ends a link by emitting <c>OSC 8</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter EndLink()\n    {\n        if (Capabilities is { Ansi: true, Links: true } && _linkCount > 0)\n        {\n            _linkCount--;\n            WriteOsc(\"8;;\\e\\\\\");\n        }\n\n        return this;\n    }\n\n    /// <summary>\n    /// This control function moves the cursor to the specified line and column (1-indexed)\n    /// by emitting <c>CSI row;column H</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUP\"/>.\n    /// </remarks>\n    /// <param name=\"row\">The row.</param>\n    /// <param name=\"column\">The column.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorPosition(int row, int column)\n    {\n        WriteCsi($\"{row};{column}\", 'H');\n        return this;\n    }\n\n    /// <summary>\n    /// Moves the cursor to position 1,1 (top left corner) by emitting <c>CSI H</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUP\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorHome()\n    {\n        WriteCsi(\"H\");\n        return this;\n    }\n\n    /// <summary>\n    /// Moves the cursor up a specified number of lines in the same column by emitting <c>CSI n A</c>.\n    /// The cursor stops at the top margin.\n    /// If the cursor is already above the top margin, then the cursor stops at the top line.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUU\"/>.\n    /// </remarks>\n    /// <param name=\"steps\">The number of steps to move the cursor up.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorUp(int steps)\n    {\n        WriteCsi(steps, 'A');\n        return this;\n    }\n\n    /// <summary>\n    /// This control function moves the cursor down a specified number of lines in the same column\n    /// by emitting <c>CSI n B</c>.\n    /// The cursor stops at the bottom margin.\n    /// If the cursor is already below the bottom margin, then the cursor stops at the bottom line.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUD\"/>.\n    /// </remarks>\n    /// <param name=\"steps\">The number of steps to move the cursor down.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorDown(int steps)\n    {\n        WriteCsi(steps, 'B');\n        return this;\n    }\n\n    /// <summary>\n    /// This control function moves the cursor to the right by a specified number of columns\n    /// by emitting <c>CSI n C</c>.\n    /// The cursor stops at the right border of the page.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUF\"/>.\n    /// </remarks>\n    /// <param name=\"steps\">The number of steps to move the cursor right.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorRight(int steps)\n    {\n        WriteCsi(steps, 'C');\n        return this;\n    }\n\n    /// <summary>\n    /// This control function moves the cursor to the left by a specified number of columns\n    /// by emitting <c>CSI n D</c>.\n    /// The cursor stops at the left border of the page.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#CUB\"/>.\n    /// </remarks>\n    /// <param name=\"steps\">The number of steps to move the cursor left.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter CursorLeft(int steps)\n    {\n        WriteCsi(steps, 'D');\n        return this;\n    }\n\n    /// <summary>\n    /// Shows the cursor by emitting <c>CSI ? 25 h</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#SM\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter ShowCursor()\n    {\n        WriteCsi(25, 'h', decPrivateMode: true);\n        return this;\n    }\n\n    /// <summary>\n    /// Hides the cursor by emitting <c>CSI ? 25 l</c>.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#RM\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter HideCursor()\n    {\n        WriteCsi(25, 'l', decPrivateMode: true);\n        return this;\n    }\n\n    /// <summary>\n    /// Saves current cursor position for SCO console mode\n    /// by emitting <c>CSI s</c>\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt510-rm/SCOSC.html\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter SaveCursor()\n    {\n        WriteCsi(\"s\");\n        return this;\n    }\n\n    /// <summary>\n    /// Moves cursor to the position saved by save cursor command in SCO console mode\n    /// by emitting <c>CSI u</c>\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt510-rm/SCORC.html\"/>.\n    /// </remarks>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter RestoreCursor()\n    {\n        WriteCsi(\"u\");\n        return this;\n    }\n\n    /// <summary>\n    /// Moves the active position to the n-th character of the active line\n    /// by emitting <c>CSI n G</c>\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt510-rm/CHA.html\"/>.\n    /// </remarks>\n    /// <param name=\"position\">The horizontal position.</param>\n    public AnsiWriter CursorHorizontalAbsolute(int position)\n    {\n        WriteCsi(position, 'G');\n        return this;\n    }\n\n    /// <summary>\n    /// Enters the alternative screen buffer by emitting <c>CSI ? 1049 h</c>.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter EnterAltScreen()\n    {\n        WriteCsi(1049, 'h', decPrivateMode: true);\n        return this;\n    }\n\n    /// <summary>\n    /// Exits the alternative screen buffer by emitting <c>CSI ? 1049 l</c>.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter ExitAltScreen()\n    {\n        WriteCsi(1049, 'l', decPrivateMode: true);\n        return this;\n    }\n\n    /// <summary>\n    /// This control function erases characters on the line that has the cursor.\n    /// EL clears all character attributes from erased character positions.\n    /// EL works inside or outside the scrolling margins.\n    /// </summary>\n    /// <remarks>\n    /// See <see href=\"https://vt100.net/docs/vt100-ug/chapter3.html#EL\"/>.\n    /// </remarks>\n    /// <param name=\"mode\">\n    /// The section of the line to erase.\n    /// <list type=\"bullet|number|table\">\n    ///     <item>\n    ///         <term>0</term>\n    ///         <description>From the cursor through the end of the line.</description>\n    ///     </item>\n    ///     <item>\n    ///         <term>1</term>\n    ///         <description>From the beginning of the line through the cursor.</description>\n    ///     </item>\n    ///     <item>\n    ///         <term>2</term>\n    ///         <description>The complete line.</description>\n    ///     </item>\n    /// </list>\n    /// </param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter EraseInLine(int mode = 0)\n    {\n        WriteCsi(mode, 'K');\n        return this;\n    }\n\n    /// <summary>\n    /// This control function erases characters from part or all of the display.\n    /// When you erase complete lines, they become single-height, single-width lines,\n    /// with all visual character attributes cleared.\n    /// ED works inside or outside the scrolling margins.\n    /// </summary>\n    /// <param name=\"mode\">\n    /// The amount of the display to erase.\n    /// <list type=\"bullet|number|table\">\n    ///     <item>\n    ///         <term>0</term>\n    ///         <description>From the cursor through the end of the display.</description>\n    ///     </item>\n    ///     <item>\n    ///         <term>1</term>\n    ///         <description>From the beginning of the display through the cursor.</description>\n    ///     </item>\n    ///     <item>\n    ///         <term>2</term>\n    ///         <description>The complete display.</description>\n    ///     </item>\n    /// </list>\n    /// </param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter EraseInDisplay(int mode = 0)\n    {\n        WriteCsi(mode, 'J');\n        return this;\n    }\n\n    /// <summary>\n    /// Clears the scrollback buffer by emitting <c>CSI 3J</c>.\n    /// </summary>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public AnsiWriter ClearScrollback()\n    {\n        WriteCsi(3, 'J');\n        return this;\n    }\n\n    private bool WriteSgr(params List<byte> codes)\n    {\n        if (!Capabilities.Ansi || codes.Count == 0)\n        {\n            return false;\n        }\n\n        WriteCsi(string.Join(\";\", codes), 'm');\n        return true;\n    }\n\n    private bool WriteCsi(int value, char terminator, bool decPrivateMode = false)\n    {\n        return WriteCsi($\"{value}{terminator}\", decPrivateMode);\n    }\n\n    private bool WriteCsi(string parameters, char terminator, bool decPrivateMode = false)\n    {\n        return WriteCsi($\"{parameters}{terminator}\");\n    }\n\n    private bool WriteCsi(string parameters, bool decPrivateMode = false)\n    {\n        if (!Capabilities.Ansi)\n        {\n            return false;\n        }\n\n        Write(decPrivateMode ? $\"\\e[?{parameters}\" : $\"\\e[{parameters}\");\n        return true;\n    }\n\n    private bool WriteOsc(string parameters)\n    {\n        if (!Capabilities.Ansi)\n        {\n            return false;\n        }\n\n        Write($\"\\e]{parameters}\");\n        return true;\n    }\n}\n\nfile static class AnsiCodeBuilder\n{\n    public static IEnumerable<byte> Build(Decoration decoration)\n    {\n        if ((decoration & Decoration.Bold) != 0)\n        {\n            yield return 1;\n        }\n\n        if ((decoration & Decoration.Dim) != 0)\n        {\n            yield return 2;\n        }\n\n        if ((decoration & Decoration.Italic) != 0)\n        {\n            yield return 3;\n        }\n\n        if ((decoration & Decoration.Underline) != 0)\n        {\n            yield return 4;\n        }\n\n        if ((decoration & Decoration.SlowBlink) != 0)\n        {\n            yield return 5;\n        }\n\n        if ((decoration & Decoration.RapidBlink) != 0)\n        {\n            yield return 6;\n        }\n\n        if ((decoration & Decoration.Invert) != 0)\n        {\n            yield return 7;\n        }\n\n        if ((decoration & Decoration.Conceal) != 0)\n        {\n            yield return 8;\n        }\n\n        if ((decoration & Decoration.Strikethrough) != 0)\n        {\n            yield return 9;\n        }\n    }\n\n    public static IEnumerable<byte> Build(ColorSystem system, Color color, bool foreground)\n    {\n        if (color == Color.Default)\n        {\n            return [];\n        }\n\n        return system switch\n        {\n            ColorSystem.NoColors => [], // No colors\n            ColorSystem.TrueColor => GetTrueColor(color, foreground), // 24-bit\n            ColorSystem.EightBit => GetEightBit(color, foreground), // 8-bit\n            ColorSystem.Standard => GetFourBit(color, foreground), // 4-bit\n            ColorSystem.Legacy => GetThreeBit(color, foreground), // 3-bit\n            _ => throw new InvalidOperationException(\"Could not determine ANSI color.\"),\n        };\n    }\n\n    private static IEnumerable<byte> GetThreeBit(Color color, bool foreground)\n    {\n        var number = color.Number;\n        if (number == null || color.Number >= 8)\n        {\n            number = color.ExactOrClosest(ColorSystem.Legacy).Number;\n        }\n\n        Debug.Assert(number is >= 0 and < 8, \"Invalid range for 4-bit color\");\n\n        var mod = foreground ? 30 : 40;\n        return [(byte)(number.Value + mod)];\n    }\n\n    private static IEnumerable<byte> GetFourBit(Color color, bool foreground)\n    {\n        var number = color.Number;\n        if (number == null || color.Number >= 16)\n        {\n            number = color.ExactOrClosest(ColorSystem.Standard).Number;\n        }\n\n        Debug.Assert(number is >= 0 and < 16, \"Invalid range for 4-bit color\");\n\n        var mod = number < 8 ? (foreground ? 30 : 40) : (foreground ? 82 : 92);\n        return [(byte)(number.Value + mod)];\n    }\n\n    private static IEnumerable<byte> GetEightBit(Color color, bool foreground)\n    {\n        var number = color.Number ?? color.ExactOrClosest(ColorSystem.EightBit).Number;\n        Debug.Assert(number is >= 0, \"Invalid range for 8-bit color\");\n\n        var mod = foreground ? (byte)38 : (byte)48;\n        return [mod, 5, (byte)number];\n    }\n\n    private static IEnumerable<byte> GetTrueColor(Color color, bool foreground)\n    {\n        if (color.Number != null)\n        {\n            return GetEightBit(color, foreground);\n        }\n\n        var mod = foreground ? (byte)38 : (byte)48;\n        return [mod, 2, color.R, color.G, color.B];\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/AnsiWriterSettings.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents settings for <see cref=\"AnsiWriter\"/>.\n/// </summary>\npublic sealed class AnsiWriterSettings\n{\n    /// <summary>\n    /// Gets or sets a value indicating whether or\n    /// not ANSI escape sequences are supported.\n    /// </summary>\n    /// <remarks>Defaults to <see cref=\"AnsiSupport.Detect\"/></remarks>\n    public AnsiSupport Ansi { get; init; } = AnsiSupport.Detect;\n\n    /// <summary>\n    /// Gets or sets the color system to use.\n    /// </summary>\n    /// <remarks>Defaults to <see cref=\"ColorSystemSupport.Detect\"/></remarks>\n    public ColorSystemSupport ColorSystem { get; init; } = ColorSystemSupport.Detect;\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Color.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a color.\n/// </summary>\npublic readonly partial struct Color : IEquatable<Color>\n{\n    /// <summary>\n    /// Gets the default color.\n    /// </summary>\n    public static Color Default { get; } = new(0, 0, 0, 0, true);\n\n    /// <summary>\n    /// Gets the red component.\n    /// </summary>\n    public byte R { get; }\n\n    /// <summary>\n    /// Gets the green component.\n    /// </summary>\n    public byte G { get; }\n\n    /// <summary>\n    /// Gets the blue component.\n    /// </summary>\n    public byte B { get; }\n\n    /// <summary>\n    /// Gets the number of the color, if any.\n    /// </summary>\n    internal byte? Number { get; }\n\n    /// <summary>\n    /// Gets a value indicating whether or not this is the default color.\n    /// </summary>\n    internal bool IsDefault { get; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Color\"/> struct.\n    /// </summary>\n    /// <param name=\"red\">The red component.</param>\n    /// <param name=\"green\">The green component.</param>\n    /// <param name=\"blue\">The blue component.</param>\n    public Color(byte red, byte green, byte blue)\n    {\n        R = red;\n        G = green;\n        B = blue;\n        IsDefault = false;\n        Number = null;\n    }\n\n    /// <summary>\n    /// Blends two colors.\n    /// </summary>\n    /// <param name=\"other\">The other color.</param>\n    /// <param name=\"factor\">The blend factor.</param>\n    /// <returns>The resulting color.</returns>\n    public Color Blend(Color other, float factor)\n    {\n        // https://github.com/willmcgugan/rich/blob/f092b1d04252e6f6812021c0f415dd1d7be6a16a/rich/color.py#L494\n        return new Color(\n            (byte)(R + ((other.R - R) * factor)),\n            (byte)(G + ((other.G - G) * factor)),\n            (byte)(B + ((other.B - B) * factor)));\n    }\n\n    /// <summary>\n    /// Gets the hexadecimal representation of the color.\n    /// </summary>\n    /// <returns>The hexadecimal representation of the color.</returns>\n    public string ToHex()\n    {\n        return string.Format(\n            CultureInfo.InvariantCulture,\n            \"{0}{1}{2}\",\n            R.ToString(\"X2\", CultureInfo.InvariantCulture),\n            G.ToString(\"X2\", CultureInfo.InvariantCulture),\n            B.ToString(\"X2\", CultureInfo.InvariantCulture));\n    }\n\n    /// <summary>\n    /// Gets the exact or closest color in the specified <see cref=\"ColorSystem\"/>.\n    /// </summary>\n    /// <param name=\"system\">The color system.</param>\n    /// <returns>The exact or closest color in the specified <see cref=\"ColorSystem\"/>.</returns>\n    public Color ExactOrClosest(ColorSystem system)\n    {\n        return ColorPalette.ExactOrClosest(system, this);\n    }\n\n    /// <inheritdoc/>\n    public override int GetHashCode()\n    {\n        unchecked\n        {\n            var hash = (int)2166136261;\n            hash = (hash * 16777619) ^ R.GetHashCode();\n            hash = (hash * 16777619) ^ G.GetHashCode();\n            hash = (hash * 16777619) ^ B.GetHashCode();\n            return hash;\n        }\n    }\n\n    /// <inheritdoc/>\n    public override bool Equals(object? obj)\n    {\n        return obj is Color color && Equals(color);\n    }\n\n    /// <inheritdoc/>\n    public bool Equals(Color other)\n    {\n        return (IsDefault && other.IsDefault) ||\n               (IsDefault == other.IsDefault && R == other.R && G == other.G && B == other.B);\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Color\"/> instances are equal.\n    /// </summary>\n    /// <param name=\"left\">The first color instance to compare.</param>\n    /// <param name=\"right\">The second color instance to compare.</param>\n    /// <returns><c>true</c> if the two colors are equal, otherwise <c>false</c>.</returns>\n    public static bool operator ==(Color left, Color right)\n    {\n        return left.Equals(right);\n    }\n\n    /// <summary>\n    /// Checks if two <see cref=\"Color\"/> instances are not equal.\n    /// </summary>\n    /// <param name=\"left\">The first color instance to compare.</param>\n    /// <param name=\"right\">The second color instance to compare.</param>\n    /// <returns><c>true</c> if the two colors are not equal, otherwise <c>false</c>.</returns>\n    public static bool operator !=(Color left, Color right)\n    {\n        return !(left == right);\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"int\"/> to a <see cref=\"Color\"/>.\n    /// </summary>\n    /// <param name=\"number\">The color number to convert.</param>\n    public static implicit operator Color(int number)\n    {\n        return FromInt32(number);\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"ConsoleColor\"/> to a <see cref=\"Color\"/>.\n    /// </summary>\n    /// <param name=\"color\">The color to convert.</param>\n    public static implicit operator Color(ConsoleColor color)\n    {\n        return FromConsoleColor(color);\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"Color\"/> to a <see cref=\"ConsoleColor\"/>.\n    /// </summary>\n    /// <param name=\"color\">The console color to convert.</param>\n    public static implicit operator ConsoleColor(Color color)\n    {\n        return ToConsoleColor(color);\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"Color\"/> to a <see cref=\"ConsoleColor\"/>.\n    /// </summary>\n    /// <param name=\"color\">The color to convert.</param>\n    /// <returns>A <see cref=\"ConsoleColor\"/> representing the <see cref=\"Color\"/>.</returns>\n    public static ConsoleColor ToConsoleColor(Color color)\n    {\n        if (color.IsDefault)\n        {\n            return (ConsoleColor)(-1);\n        }\n\n        if (color.Number == null || color.Number.Value >= 16)\n        {\n            color = ColorPalette.ExactOrClosest(ColorSystem.Standard, color);\n        }\n\n        // Should not happen, but this will make things easier if we mess things up...\n        Debug.Assert(\n            color.Number >= 0 && color.Number < 16,\n            \"Color does not fall inside the standard palette range.\");\n\n        return color.Number.Value switch\n        {\n            0 => ConsoleColor.Black,\n            1 => ConsoleColor.DarkRed,\n            2 => ConsoleColor.DarkGreen,\n            3 => ConsoleColor.DarkYellow,\n            4 => ConsoleColor.DarkBlue,\n            5 => ConsoleColor.DarkMagenta,\n            6 => ConsoleColor.DarkCyan,\n            7 => ConsoleColor.Gray,\n            8 => ConsoleColor.DarkGray,\n            9 => ConsoleColor.Red,\n            10 => ConsoleColor.Green,\n            11 => ConsoleColor.Yellow,\n            12 => ConsoleColor.Blue,\n            13 => ConsoleColor.Magenta,\n            14 => ConsoleColor.Cyan,\n            15 => ConsoleColor.White,\n            _ => throw new InvalidOperationException(\"Cannot convert color to console color.\"),\n        };\n    }\n\n    /// <summary>\n    /// Converts a color number into a <see cref=\"Color\"/>.\n    /// </summary>\n    /// <param name=\"number\">The color number.</param>\n    /// <returns>The color representing the specified color number.</returns>\n    public static Color FromInt32(int number)\n    {\n        return ColorTable.GetColor(number);\n    }\n\n    /// <summary>\n    /// Creates a color from a hexadecimal string representation.\n    /// </summary>\n    /// <param name=\"hex\">The hexadecimal string representation of the color.</param>\n    /// <returns>The color created from the hexadecimal string.</returns>\n    public static Color FromHex(string hex)\n    {\n        ArgumentNullException.ThrowIfNull(hex);\n\n        if (hex.StartsWith(\"#\"))\n        {\n            hex = hex.Substring(1);\n        }\n\n        // 3 digit hex codes are expanded to 6 digits\n        // by doubling each digit, conform to CSS color codes\n        if (hex.Length == 3)\n        {\n            hex = string.Concat(hex.Select(c => new string(c, 2)));\n        }\n\n        var r = byte.Parse(hex.Substring(0, 2), NumberStyles.HexNumber);\n        var g = byte.Parse(hex.Substring(2, 2), NumberStyles.HexNumber);\n        var b = byte.Parse(hex.Substring(4, 2), NumberStyles.HexNumber);\n\n        return new Color(r, g, b);\n    }\n\n    /// <summary>\n    /// Tries to convert a hexadecimal color code to a <see cref=\"Color\"/> object.\n    /// </summary>\n    /// <param name=\"hex\">The hexadecimal color code.</param>\n    /// <param name=\"color\">When this method returns, contains the <see cref=\"Color\"/> equivalent of the hexadecimal color code, if the conversion succeeded, or <see cref=\"Color.Default\"/> if the conversion failed.</param>\n    /// <returns><c>true</c> if the conversion succeeded; otherwise, <c>false</c>.</returns>\n    public static bool TryFromHex(string hex, out Color color)\n    {\n        try\n        {\n            color = FromHex(hex);\n            return true;\n        }\n        catch\n        {\n            color = Color.Default;\n            return false;\n        }\n    }\n\n    /// <summary>\n    /// Gets a <see cref=\"Color\"/> from its name.\n    /// </summary>\n    /// <param name=\"name\">The name of the color.</param>\n    /// <returns>The requested <see cref=\"Color\"/> or <c>null</c> if not found.</returns>\n    public static Color? FromName(string name)\n    {\n        return ColorTable.GetColor(name);\n    }\n\n    /// <summary>\n    /// Converts a <see cref=\"ConsoleColor\"/> to a <see cref=\"Color\"/>.\n    /// </summary>\n    /// <param name=\"color\">The color to convert.</param>\n    /// <returns>A <see cref=\"Color\"/> representing the <see cref=\"ConsoleColor\"/>.</returns>\n    public static Color FromConsoleColor(ConsoleColor color)\n    {\n        return color switch\n        {\n            ConsoleColor.Black => Black,\n            ConsoleColor.Blue => Blue,\n            ConsoleColor.Cyan => Aqua,\n            ConsoleColor.DarkBlue => Navy,\n            ConsoleColor.DarkCyan => Teal,\n            ConsoleColor.DarkGray => Grey,\n            ConsoleColor.DarkGreen => Green,\n            ConsoleColor.DarkMagenta => Purple,\n            ConsoleColor.DarkRed => Maroon,\n            ConsoleColor.DarkYellow => Olive,\n            ConsoleColor.Gray => Silver,\n            ConsoleColor.Green => Lime,\n            ConsoleColor.Magenta => Fuchsia,\n            ConsoleColor.Red => Red,\n            ConsoleColor.White => White,\n            ConsoleColor.Yellow => Yellow,\n            _ => Default,\n        };\n    }\n\n    /// <summary>\n    /// Converts the color to a markup string.\n    /// </summary>\n    /// <returns>A <see cref=\"string\"/> representing the color as markup.</returns>\n    public string ToMarkup()\n    {\n        if (IsDefault)\n        {\n            return \"default\";\n        }\n\n        if (Number != null)\n        {\n            var name = ColorTable.GetName(Number.Value);\n            if (!string.IsNullOrWhiteSpace(name))\n            {\n                return name;\n            }\n        }\n\n        return string.Format(CultureInfo.InvariantCulture, \"#{0:X2}{1:X2}{2:X2}\", R, G, B);\n    }\n\n    /// <inheritdoc/>\n    public override string ToString()\n    {\n        if (IsDefault)\n        {\n            return \"default\";\n        }\n\n        if (Number != null)\n        {\n            var name = ColorTable.GetName(Number.Value);\n            if (!string.IsNullOrWhiteSpace(name))\n            {\n                return name;\n            }\n        }\n\n        return string.Format(CultureInfo.InvariantCulture, \"#{0:X2}{1:X2}{2:X2} (RGB={0},{1},{2})\", R, G, B);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/ColorPalette.cs",
    "content": "namespace Spectre.Console;\n\ninternal static partial class ColorPalette\n{\n    public static IReadOnlyList<Color> Legacy { get; }\n    public static IReadOnlyList<Color> Standard { get; }\n    public static IReadOnlyList<Color> EightBit { get; }\n\n    static ColorPalette()\n    {\n        Legacy = GenerateLegacyPalette();\n        Standard = GenerateStandardPalette(Legacy);\n        EightBit = GenerateEightBitPalette(Standard);\n    }\n\n    public static Color ExactOrClosest(ColorSystem system, Color color)\n    {\n        var exact = Exact(system, color);\n        return exact ?? Closest(system, color);\n    }\n\n    private static Color? Exact(ColorSystem system, Color color)\n    {\n        if (system == ColorSystem.TrueColor)\n        {\n            return color;\n        }\n\n        var palette = system switch\n        {\n            ColorSystem.Legacy => Legacy,\n            ColorSystem.Standard => Standard,\n            ColorSystem.EightBit => EightBit,\n            _ => throw new NotSupportedException(),\n        };\n\n        return palette\n            .Where(c => c.Equals(color))\n            .Cast<Color?>()\n            .FirstOrDefault();\n    }\n\n    private static Color Closest(ColorSystem system, Color color)\n    {\n        if (system == ColorSystem.TrueColor)\n        {\n            return color;\n        }\n\n        var palette = system switch\n        {\n            ColorSystem.Legacy => Legacy,\n            ColorSystem.Standard => Standard,\n            ColorSystem.EightBit => EightBit,\n            _ => throw new NotSupportedException(),\n        };\n\n        // https://stackoverflow.com/a/9085524\n        static double Distance(Color first, Color second)\n        {\n            var rmean = ((float)first.R + second.R) / 2;\n            var r = first.R - second.R;\n            var g = first.G - second.G;\n            var b = first.B - second.B;\n            return Math.Sqrt(\n                ((int)((512 + rmean) * r * r) >> 8)\n                + (4 * g * g)\n                + ((int)((767 - rmean) * b * b) >> 8));\n        }\n\n        return Enumerable.Range(0, int.MaxValue)\n            .Zip(palette, (id, other) => (Distance: Distance(other, color), Id: id, Color: other))\n            .OrderBy(x => x.Distance)\n            .FirstOrDefault().Color;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/ColorSystem.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a color system.\n/// </summary>\npublic enum ColorSystem\n{\n    /// <summary>\n    /// No colors.\n    /// </summary>\n    NoColors = 0,\n\n    /// <summary>\n    /// Legacy, 3-bit mode.\n    /// </summary>\n    Legacy = 1,\n\n    /// <summary>\n    /// Standard, 4-bit mode.\n    /// </summary>\n    Standard = 2,\n\n    /// <summary>\n    /// 8-bit mode.\n    /// </summary>\n    EightBit = 3,\n\n    /// <summary>\n    /// 24-bit mode.\n    /// </summary>\n    TrueColor = 4,\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/ColorSystemDetector.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class ColorSystemDetector\n{\n    // Adapted from https://github.com/willmcgugan/rich/blob/f0c29052c22d1e49579956a9207324d9072beed7/rich/console.py#L391\n    public static ColorSystem Detect(bool supportsAnsi)\n    {\n        // No colors?\n        if (Environment.GetEnvironmentVariables().Contains(\"NO_COLOR\"))\n        {\n            return ColorSystem.NoColors;\n        }\n\n        // Windows?\n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            if (!supportsAnsi)\n            {\n                // Figure out what we should do here.\n                // Does really all Windows terminals support\n                // eight-bit colors? Probably not...\n                return ColorSystem.EightBit;\n            }\n\n            // Windows 10.0.15063 and above support true color,\n            // and we can probably assume that the next major\n            // version of Windows will support true color as well.\n            if (GetWindowsVersionInformation(out var major, out var build))\n            {\n                if (major == 10 && build >= 15063)\n                {\n                    return ColorSystem.TrueColor;\n                }\n                else if (major > 10)\n                {\n                    return ColorSystem.TrueColor;\n                }\n            }\n        }\n        else\n        {\n            var colorTerm = Environment.GetEnvironmentVariable(\"COLORTERM\");\n            if (!string.IsNullOrWhiteSpace(colorTerm))\n            {\n                if (colorTerm.Equals(\"truecolor\", StringComparison.OrdinalIgnoreCase) ||\n                   colorTerm.Equals(\"24bit\", StringComparison.OrdinalIgnoreCase))\n                {\n                    return ColorSystem.TrueColor;\n                }\n            }\n        }\n\n        // Should we default to eight-bit colors?\n        return ColorSystem.EightBit;\n    }\n\n    private static bool GetWindowsVersionInformation(out int major, out int build)\n    {\n        major = 0;\n        build = 0;\n\n        if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            return false;\n        }\n\n#if NET6_0_OR_GREATER\n        // The reason we're not always using this, is because it will return wrong values on other runtimes than .NET 6+\n        // See https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/environment-osversion-returns-correct-version\n        var version = Environment.OSVersion.Version;\n        major = version.Major;\n        build = version.Build;\n        return true;\n#else\n        var regex = new System.Text.RegularExpressions.Regex(\"Microsoft Windows (?'major'[0-9]*).(?'minor'[0-9]*).(?'build'[0-9]*)\\\\s*$\");\n        var match = regex.Match(RuntimeInformation.OSDescription);\n        if (match.Success && int.TryParse(match.Groups[\"major\"].Value, out major))\n        {\n            if (int.TryParse(match.Groups[\"build\"].Value, out build))\n            {\n                return true;\n            }\n        }\n\n        return false;\n#endif\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/ColorSystemSupport.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Determines what color system should be used.\n/// </summary>\npublic enum ColorSystemSupport\n{\n    /// <summary>\n    /// Try to detect the color system.\n    /// </summary>\n    Detect = -1,\n\n    /// <summary>\n    /// No colors.\n    /// </summary>\n    NoColors = 0,\n\n    /// <summary>\n    /// Legacy, 3-bit mode.\n    /// </summary>\n    Legacy = 1,\n\n    /// <summary>\n    /// Standard, 4-bit mode.\n    /// </summary>\n    Standard = 2,\n\n    /// <summary>\n    /// 8-bit mode.\n    /// </summary>\n    EightBit = 3,\n\n    /// <summary>\n    /// 24-bit mode.\n    /// </summary>\n    TrueColor = 4,\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/ColorTable.cs",
    "content": "namespace Spectre.Console;\n\ninternal static partial class ColorTable\n{\n    private static readonly Dictionary<int, string> _nameLookup;\n    private static readonly Dictionary<string, int> _numberLookup;\n\n    static ColorTable()\n    {\n        _numberLookup = GenerateTable();\n        _nameLookup = new Dictionary<int, string>();\n\n        foreach (var pair in _numberLookup)\n        {\n            _nameLookup.TryAdd(pair.Value, pair.Key);\n        }\n    }\n\n    public static Color GetColor(int number)\n    {\n        if (number < 0 || number > 255)\n        {\n            throw new InvalidOperationException(\"Color number must be between 0 and 255\");\n        }\n\n        return ColorPalette.EightBit[number];\n    }\n\n    public static Color? GetColor(string name)\n    {\n        if (!_numberLookup.TryGetValue(name, out var number))\n        {\n            return null;\n        }\n\n        if (number > ColorPalette.EightBit.Count - 1)\n        {\n            return null;\n        }\n\n        return ColorPalette.EightBit[number];\n    }\n\n    public static string? GetName(int number)\n    {\n        _nameLookup.TryGetValue(number, out var name);\n        return name;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Constants.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class Constants\n{\n    public const string EmptyLink = \"https://emptylink\";\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Data/colors.json",
    "content": "[\n  {\n    \"number\": 0,\n    \"hex\": \"#000000\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 0\n    },\n    \"name\": \"Black\"\n  },\n  {\n    \"number\": 1,\n    \"hex\": \"#800000\",\n    \"rgb\": {\n      \"r\": 128,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Maroon\"\n  },\n  {\n    \"number\": 2,\n    \"hex\": \"#008000\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 128,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Green\"\n  },\n  {\n    \"number\": 3,\n    \"hex\": \"#808000\",\n    \"rgb\": {\n      \"r\": 128,\n      \"g\": 128,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Olive\"\n  },\n  {\n    \"number\": 4,\n    \"hex\": \"#000080\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 128\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Navy\"\n  },\n  {\n    \"number\": 5,\n    \"hex\": \"#800080\",\n    \"rgb\": {\n      \"r\": 128,\n      \"g\": 0,\n      \"b\": 128\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Purple\"\n  },\n  {\n    \"number\": 6,\n    \"hex\": \"#008080\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 128,\n      \"b\": 128\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 25\n    },\n    \"name\": \"Teal\"\n  },\n  {\n    \"number\": 7,\n    \"hex\": \"#c0c0c0\",\n    \"rgb\": {\n      \"r\": 192,\n      \"g\": 192,\n      \"b\": 192\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 75\n    },\n    \"name\": \"Silver\"\n  },\n  {\n    \"number\": 8,\n    \"hex\": \"#808080\",\n    \"rgb\": {\n      \"r\": 128,\n      \"g\": 128,\n      \"b\": 128\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 50\n    },\n    \"name\": \"Grey\",\n    \"aliases\": [ \"Gray\" ]\n  },\n  {\n    \"number\": 9,\n    \"hex\": \"#ff0000\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Red\"\n  },\n  {\n    \"number\": 10,\n    \"hex\": \"#00ff00\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Lime\"\n  },\n  {\n    \"number\": 11,\n    \"hex\": \"#ffff00\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Yellow\"\n  },\n  {\n    \"number\": 12,\n    \"hex\": \"#0000ff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Blue\"\n  },\n  {\n    \"number\": 13,\n    \"hex\": \"#ff00ff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Fuchsia\",\n    \"aliases\": [ \"Magenta\" ]\n  },\n  {\n    \"number\": 14,\n    \"hex\": \"#00ffff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Aqua\",\n    \"aliases\": [ \"Cyan\" ]\n  },\n  {\n    \"number\": 15,\n    \"hex\": \"#ffffff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 100\n    },\n    \"name\": \"White\"\n  },\n  {\n    \"number\": 16,\n    \"hex\": \"#000000\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 0\n    },\n    \"name\": \"Grey0\",\n    \"aliases\": [ \"Gray0\" ]\n  },\n  {\n    \"number\": 17,\n    \"hex\": \"#00005f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"NavyBlue\"\n  },\n  {\n    \"number\": 18,\n    \"hex\": \"#000087\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"DarkBlue\"\n  },\n  {\n    \"number\": 19,\n    \"hex\": \"#0000af\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Blue3\"\n  },\n  {\n    \"number\": 20,\n    \"hex\": \"#0000d7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Blue3\"\n  },\n  {\n    \"number\": 21,\n    \"hex\": \"#0000ff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Blue1\"\n  },\n  {\n    \"number\": 22,\n    \"hex\": \"#005f00\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"DarkGreen\"\n  },\n  {\n    \"number\": 23,\n    \"hex\": \"#005f5f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"DeepSkyBlue4\"\n  },\n  {\n    \"number\": 24,\n    \"hex\": \"#005f87\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 197.777777777778,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"DeepSkyBlue4\"\n  },\n  {\n    \"number\": 25,\n    \"hex\": \"#005faf\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 207.428571428571,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DeepSkyBlue4\"\n  },\n  {\n    \"number\": 26,\n    \"hex\": \"#005fd7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 213.488372093023,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DodgerBlue3\"\n  },\n  {\n    \"number\": 27,\n    \"hex\": \"#005fff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 217.647058823529,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DodgerBlue2\"\n  },\n  {\n    \"number\": 28,\n    \"hex\": \"#008700\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Green4\"\n  },\n  {\n    \"number\": 29,\n    \"hex\": \"#00875f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 162.222222222222,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"SpringGreen4\"\n  },\n  {\n    \"number\": 30,\n    \"hex\": \"#008787\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Turquoise4\"\n  },\n  {\n    \"number\": 31,\n    \"hex\": \"#0087af\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 193.714285714286,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DeepSkyBlue3\"\n  },\n  {\n    \"number\": 32,\n    \"hex\": \"#0087d7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 202.325581395349,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DeepSkyBlue3\"\n  },\n  {\n    \"number\": 33,\n    \"hex\": \"#0087ff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 208.235294117647,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DodgerBlue1\"\n  },\n  {\n    \"number\": 34,\n    \"hex\": \"#00af00\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Green3\"\n  },\n  {\n    \"number\": 35,\n    \"hex\": \"#00af5f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 152.571428571429,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"SpringGreen3\"\n  },\n  {\n    \"number\": 36,\n    \"hex\": \"#00af87\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 166.285714285714,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DarkCyan\"\n  },\n  {\n    \"number\": 37,\n    \"hex\": \"#00afaf\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"LightSeaGreen\"\n  },\n  {\n    \"number\": 38,\n    \"hex\": \"#00afd7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 191.162790697674,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DeepSkyBlue2\"\n  },\n  {\n    \"number\": 39,\n    \"hex\": \"#00afff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 198.823529411765,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DeepSkyBlue1\"\n  },\n  {\n    \"number\": 40,\n    \"hex\": \"#00d700\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Green3\"\n  },\n  {\n    \"number\": 41,\n    \"hex\": \"#00d75f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 146.511627906977,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"SpringGreen3\"\n  },\n  {\n    \"number\": 42,\n    \"hex\": \"#00d787\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 157.674418604651,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"SpringGreen2\"\n  },\n  {\n    \"number\": 43,\n    \"hex\": \"#00d7af\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 168.837209302326,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Cyan3\"\n  },\n  {\n    \"number\": 44,\n    \"hex\": \"#00d7d7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DarkTurquoise\"\n  },\n  {\n    \"number\": 45,\n    \"hex\": \"#00d7ff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 189.411764705882,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Turquoise2\"\n  },\n  {\n    \"number\": 46,\n    \"hex\": \"#00ff00\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Green1\"\n  },\n  {\n    \"number\": 47,\n    \"hex\": \"#00ff5f\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 142.352941176471,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"SpringGreen2\"\n  },\n  {\n    \"number\": 48,\n    \"hex\": \"#00ff87\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 151.764705882353,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"SpringGreen1\"\n  },\n  {\n    \"number\": 49,\n    \"hex\": \"#00ffaf\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 161.176470588235,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"MediumSpringGreen\"\n  },\n  {\n    \"number\": 50,\n    \"hex\": \"#00ffd7\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 170.588235294118,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Cyan2\"\n  },\n  {\n    \"number\": 51,\n    \"hex\": \"#00ffff\",\n    \"rgb\": {\n      \"r\": 0,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Cyan1\"\n  },\n  {\n    \"number\": 52,\n    \"hex\": \"#5f0000\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"DarkRed\"\n  },\n  {\n    \"number\": 53,\n    \"hex\": \"#5f005f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"DeepPink4\"\n  },\n  {\n    \"number\": 54,\n    \"hex\": \"#5f0087\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 282.222222222222,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Purple4\"\n  },\n  {\n    \"number\": 55,\n    \"hex\": \"#5f00af\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 272.571428571429,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Purple4\"\n  },\n  {\n    \"number\": 56,\n    \"hex\": \"#5f00d7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 266.511627906977,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Purple3\"\n  },\n  {\n    \"number\": 57,\n    \"hex\": \"#5f00ff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 262.352941176471,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"BlueViolet\"\n  },\n  {\n    \"number\": 58,\n    \"hex\": \"#5f5f00\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 18\n    },\n    \"name\": \"Orange4\"\n  },\n  {\n    \"number\": 59,\n    \"hex\": \"#5f5f5f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 37\n    },\n    \"name\": \"Grey37\",\n    \"aliases\": [ \"Gray37\" ]\n  },\n  {\n    \"number\": 60,\n    \"hex\": \"#5f5f87\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"MediumPurple4\"\n  },\n  {\n    \"number\": 61,\n    \"hex\": \"#5f5faf\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"SlateBlue3\"\n  },\n  {\n    \"number\": 62,\n    \"hex\": \"#5f5fd7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"SlateBlue3\"\n  },\n  {\n    \"number\": 63,\n    \"hex\": \"#5f5fff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"RoyalBlue1\"\n  },\n  {\n    \"number\": 64,\n    \"hex\": \"#5f8700\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 77.7777777777778,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Chartreuse4\"\n  },\n  {\n    \"number\": 65,\n    \"hex\": \"#5f875f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"DarkSeaGreen4\"\n  },\n  {\n    \"number\": 66,\n    \"hex\": \"#5f8787\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"PaleTurquoise4\"\n  },\n  {\n    \"number\": 67,\n    \"hex\": \"#5f87af\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 210,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"SteelBlue\"\n  },\n  {\n    \"number\": 68,\n    \"hex\": \"#5f87d7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 220,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"SteelBlue3\"\n  },\n  {\n    \"number\": 69,\n    \"hex\": \"#5f87ff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 225,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"CornflowerBlue\"\n  },\n  {\n    \"number\": 70,\n    \"hex\": \"#5faf00\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 87.4285714285714,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Chartreuse3\"\n  },\n  {\n    \"number\": 71,\n    \"hex\": \"#5faf5f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"DarkSeaGreen4\"\n  },\n  {\n    \"number\": 72,\n    \"hex\": \"#5faf87\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 150,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"CadetBlue\"\n  },\n  {\n    \"number\": 73,\n    \"hex\": \"#5fafaf\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"CadetBlue\"\n  },\n  {\n    \"number\": 74,\n    \"hex\": \"#5fafd7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 200,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"SkyBlue3\"\n  },\n  {\n    \"number\": 75,\n    \"hex\": \"#5fafff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 210,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SteelBlue1\"\n  },\n  {\n    \"number\": 76,\n    \"hex\": \"#5fd700\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 93.4883720930233,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Chartreuse3\"\n  },\n  {\n    \"number\": 77,\n    \"hex\": \"#5fd75f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"PaleGreen3\"\n  },\n  {\n    \"number\": 78,\n    \"hex\": \"#5fd787\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 140,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"SeaGreen3\"\n  },\n  {\n    \"number\": 79,\n    \"hex\": \"#5fd7af\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 160,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"Aquamarine3\"\n  },\n  {\n    \"number\": 80,\n    \"hex\": \"#5fd7d7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"MediumTurquoise\"\n  },\n  {\n    \"number\": 81,\n    \"hex\": \"#5fd7ff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 195,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SteelBlue1\"\n  },\n  {\n    \"number\": 82,\n    \"hex\": \"#5fff00\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 97.6470588235294,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Chartreuse2\"\n  },\n  {\n    \"number\": 83,\n    \"hex\": \"#5fff5f\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SeaGreen2\"\n  },\n  {\n    \"number\": 84,\n    \"hex\": \"#5fff87\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 135,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SeaGreen1\"\n  },\n  {\n    \"number\": 85,\n    \"hex\": \"#5fffaf\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 150,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SeaGreen1\"\n  },\n  {\n    \"number\": 86,\n    \"hex\": \"#5fffd7\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 165,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"Aquamarine1\"\n  },\n  {\n    \"number\": 87,\n    \"hex\": \"#5fffff\",\n    \"rgb\": {\n      \"r\": 95,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"DarkSlateGray2\"\n  },\n  {\n    \"number\": 88,\n    \"hex\": \"#870000\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"DarkRed\"\n  },\n  {\n    \"number\": 89,\n    \"hex\": \"#87005f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 317.777777777778,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"DeepPink4\"\n  },\n  {\n    \"number\": 90,\n    \"hex\": \"#870087\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"DarkMagenta\"\n  },\n  {\n    \"number\": 91,\n    \"hex\": \"#8700af\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 286.285714285714,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DarkMagenta\"\n  },\n  {\n    \"number\": 92,\n    \"hex\": \"#8700d7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 277.674418604651,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DarkViolet\"\n  },\n  {\n    \"number\": 93,\n    \"hex\": \"#8700ff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 271.764705882353,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Purple\"\n  },\n  {\n    \"number\": 94,\n    \"hex\": \"#875f00\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 42.2222222222222,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Orange4\"\n  },\n  {\n    \"number\": 95,\n    \"hex\": \"#875f5f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"LightPink4\"\n  },\n  {\n    \"number\": 96,\n    \"hex\": \"#875f87\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"Plum4\"\n  },\n  {\n    \"number\": 97,\n    \"hex\": \"#875faf\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 270,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"MediumPurple3\"\n  },\n  {\n    \"number\": 98,\n    \"hex\": \"#875fd7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 260,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"MediumPurple3\"\n  },\n  {\n    \"number\": 99,\n    \"hex\": \"#875fff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 255,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SlateBlue1\"\n  },\n  {\n    \"number\": 100,\n    \"hex\": \"#878700\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 26\n    },\n    \"name\": \"Yellow4\"\n  },\n  {\n    \"number\": 101,\n    \"hex\": \"#87875f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 17,\n      \"l\": 45\n    },\n    \"name\": \"Wheat4\"\n  },\n  {\n    \"number\": 102,\n    \"hex\": \"#878787\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 52\n    },\n    \"name\": \"Grey53\",\n    \"aliases\": [ \"Gray53\" ]\n  },\n  {\n    \"number\": 103,\n    \"hex\": \"#8787af\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"LightSlateGrey\"\n  },\n  {\n    \"number\": 104,\n    \"hex\": \"#8787d7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"MediumPurple\"\n  },\n  {\n    \"number\": 105,\n    \"hex\": \"#8787ff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"LightSlateBlue\"\n  },\n  {\n    \"number\": 106,\n    \"hex\": \"#87af00\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 73.7142857142857,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Yellow4\"\n  },\n  {\n    \"number\": 107,\n    \"hex\": \"#87af5f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 90,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"DarkOliveGreen3\"\n  },\n  {\n    \"number\": 108,\n    \"hex\": \"#87af87\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"DarkSeaGreen\"\n  },\n  {\n    \"number\": 109,\n    \"hex\": \"#87afaf\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"LightSkyBlue3\"\n  },\n  {\n    \"number\": 110,\n    \"hex\": \"#87afd7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 210,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"LightSkyBlue3\"\n  },\n  {\n    \"number\": 111,\n    \"hex\": \"#87afff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 220,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"SkyBlue2\"\n  },\n  {\n    \"number\": 112,\n    \"hex\": \"#87d700\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 82.3255813953488,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Chartreuse2\"\n  },\n  {\n    \"number\": 113,\n    \"hex\": \"#87d75f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 100,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"DarkOliveGreen3\"\n  },\n  {\n    \"number\": 114,\n    \"hex\": \"#87d787\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"PaleGreen3\"\n  },\n  {\n    \"number\": 115,\n    \"hex\": \"#87d7af\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 150,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"DarkSeaGreen3\"\n  },\n  {\n    \"number\": 116,\n    \"hex\": \"#87d7d7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"DarkSlateGray3\"\n  },\n  {\n    \"number\": 117,\n    \"hex\": \"#87d7ff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 200,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"SkyBlue1\"\n  },\n  {\n    \"number\": 118,\n    \"hex\": \"#87ff00\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 88.2352941176471,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Chartreuse1\"\n  },\n  {\n    \"number\": 119,\n    \"hex\": \"#87ff5f\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 105,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"LightGreen\"\n  },\n  {\n    \"number\": 120,\n    \"hex\": \"#87ff87\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"LightGreen\"\n  },\n  {\n    \"number\": 121,\n    \"hex\": \"#87ffaf\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 140,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"PaleGreen1\"\n  },\n  {\n    \"number\": 122,\n    \"hex\": \"#87ffd7\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 160,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"Aquamarine1\"\n  },\n  {\n    \"number\": 123,\n    \"hex\": \"#87ffff\",\n    \"rgb\": {\n      \"r\": 135,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"DarkSlateGray1\"\n  },\n  {\n    \"number\": 124,\n    \"hex\": \"#af0000\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Red3\"\n  },\n  {\n    \"number\": 125,\n    \"hex\": \"#af005f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 327.428571428571,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DeepPink4\"\n  },\n  {\n    \"number\": 126,\n    \"hex\": \"#af0087\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 313.714285714286,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"MediumVioletRed\"\n  },\n  {\n    \"number\": 127,\n    \"hex\": \"#af00af\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Magenta3\"\n  },\n  {\n    \"number\": 128,\n    \"hex\": \"#af00d7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 288.837209302326,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DarkViolet\"\n  },\n  {\n    \"number\": 129,\n    \"hex\": \"#af00ff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 281.176470588235,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Purple\"\n  },\n  {\n    \"number\": 130,\n    \"hex\": \"#af5f00\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 32.5714285714286,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DarkOrange3\"\n  },\n  {\n    \"number\": 131,\n    \"hex\": \"#af5f5f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"IndianRed\"\n  },\n  {\n    \"number\": 132,\n    \"hex\": \"#af5f87\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 330,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"HotPink3\"\n  },\n  {\n    \"number\": 133,\n    \"hex\": \"#af5faf\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"MediumOrchid3\"\n  },\n  {\n    \"number\": 134,\n    \"hex\": \"#af5fd7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 280,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"MediumOrchid\"\n  },\n  {\n    \"number\": 135,\n    \"hex\": \"#af5fff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 270,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"MediumPurple2\"\n  },\n  {\n    \"number\": 136,\n    \"hex\": \"#af8700\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 46.2857142857143,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"DarkGoldenrod\"\n  },\n  {\n    \"number\": 137,\n    \"hex\": \"#af875f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 30,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"LightSalmon3\"\n  },\n  {\n    \"number\": 138,\n    \"hex\": \"#af8787\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"RosyBrown\"\n  },\n  {\n    \"number\": 139,\n    \"hex\": \"#af87af\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"Grey63\",\n    \"aliases\": [ \"Gray63\" ]\n  },\n  {\n    \"number\": 140,\n    \"hex\": \"#af87d7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 270,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"MediumPurple2\"\n  },\n  {\n    \"number\": 141,\n    \"hex\": \"#af87ff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 260,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"MediumPurple1\"\n  },\n  {\n    \"number\": 142,\n    \"hex\": \"#afaf00\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 34\n    },\n    \"name\": \"Gold3\"\n  },\n  {\n    \"number\": 143,\n    \"hex\": \"#afaf5f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 33,\n      \"l\": 52\n    },\n    \"name\": \"DarkKhaki\"\n  },\n  {\n    \"number\": 144,\n    \"hex\": \"#afaf87\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 20,\n      \"l\": 60\n    },\n    \"name\": \"NavajoWhite3\"\n  },\n  {\n    \"number\": 145,\n    \"hex\": \"#afafaf\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 68\n    },\n    \"name\": \"Grey69\",\n    \"aliases\": [ \"Gray69\" ]\n  },\n  {\n    \"number\": 146,\n    \"hex\": \"#afafd7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"LightSteelBlue3\"\n  },\n  {\n    \"number\": 147,\n    \"hex\": \"#afafff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"LightSteelBlue\"\n  },\n  {\n    \"number\": 148,\n    \"hex\": \"#afd700\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 71.1627906976744,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Yellow3\"\n  },\n  {\n    \"number\": 149,\n    \"hex\": \"#afd75f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 80,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"DarkOliveGreen3\"\n  },\n  {\n    \"number\": 150,\n    \"hex\": \"#afd787\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 90,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"DarkSeaGreen3\"\n  },\n  {\n    \"number\": 151,\n    \"hex\": \"#afd7af\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"DarkSeaGreen2\"\n  },\n  {\n    \"number\": 152,\n    \"hex\": \"#afd7d7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"LightCyan3\"\n  },\n  {\n    \"number\": 153,\n    \"hex\": \"#afd7ff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 210,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"LightSkyBlue1\"\n  },\n  {\n    \"number\": 154,\n    \"hex\": \"#afff00\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 78.8235294117647,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"GreenYellow\"\n  },\n  {\n    \"number\": 155,\n    \"hex\": \"#afff5f\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 90,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"DarkOliveGreen2\"\n  },\n  {\n    \"number\": 156,\n    \"hex\": \"#afff87\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 100,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"PaleGreen1\"\n  },\n  {\n    \"number\": 157,\n    \"hex\": \"#afffaf\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"DarkSeaGreen2\"\n  },\n  {\n    \"number\": 158,\n    \"hex\": \"#afffd7\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 150,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"DarkSeaGreen1\"\n  },\n  {\n    \"number\": 159,\n    \"hex\": \"#afffff\",\n    \"rgb\": {\n      \"r\": 175,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"PaleTurquoise1\"\n  },\n  {\n    \"number\": 160,\n    \"hex\": \"#d70000\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Red3\"\n  },\n  {\n    \"number\": 161,\n    \"hex\": \"#d7005f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 333.488372093023,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DeepPink3\"\n  },\n  {\n    \"number\": 162,\n    \"hex\": \"#d70087\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 322.325581395349,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DeepPink3\"\n  },\n  {\n    \"number\": 163,\n    \"hex\": \"#d700af\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 311.162790697674,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Magenta3\"\n  },\n  {\n    \"number\": 164,\n    \"hex\": \"#d700d7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Magenta3\"\n  },\n  {\n    \"number\": 165,\n    \"hex\": \"#d700ff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 290.588235294118,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Magenta2\"\n  },\n  {\n    \"number\": 166,\n    \"hex\": \"#d75f00\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 26.5116279069767,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"DarkOrange3\"\n  },\n  {\n    \"number\": 167,\n    \"hex\": \"#d75f5f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"IndianRed\"\n  },\n  {\n    \"number\": 168,\n    \"hex\": \"#d75f87\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 340,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"HotPink3\"\n  },\n  {\n    \"number\": 169,\n    \"hex\": \"#d75faf\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 320,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"HotPink2\"\n  },\n  {\n    \"number\": 170,\n    \"hex\": \"#d75fd7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"Orchid\"\n  },\n  {\n    \"number\": 171,\n    \"hex\": \"#d75fff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 285,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"MediumOrchid1\"\n  },\n  {\n    \"number\": 172,\n    \"hex\": \"#d78700\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 37.6744186046512,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Orange3\"\n  },\n  {\n    \"number\": 173,\n    \"hex\": \"#d7875f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 20,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"LightSalmon3\"\n  },\n  {\n    \"number\": 174,\n    \"hex\": \"#d78787\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"LightPink3\"\n  },\n  {\n    \"number\": 175,\n    \"hex\": \"#d787af\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 330,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"Pink3\"\n  },\n  {\n    \"number\": 176,\n    \"hex\": \"#d787d7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"Plum3\"\n  },\n  {\n    \"number\": 177,\n    \"hex\": \"#d787ff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 280,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"Violet\"\n  },\n  {\n    \"number\": 178,\n    \"hex\": \"#d7af00\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 48.8372093023256,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Gold3\"\n  },\n  {\n    \"number\": 179,\n    \"hex\": \"#d7af5f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 40,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"LightGoldenrod3\"\n  },\n  {\n    \"number\": 180,\n    \"hex\": \"#d7af87\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 30,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"Tan\"\n  },\n  {\n    \"number\": 181,\n    \"hex\": \"#d7afaf\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"MistyRose3\"\n  },\n  {\n    \"number\": 182,\n    \"hex\": \"#d7afd7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"Thistle3\"\n  },\n  {\n    \"number\": 183,\n    \"hex\": \"#d7afff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 270,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"Plum2\"\n  },\n  {\n    \"number\": 184,\n    \"hex\": \"#d7d700\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 42\n    },\n    \"name\": \"Yellow3\"\n  },\n  {\n    \"number\": 185,\n    \"hex\": \"#d7d75f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 60,\n      \"l\": 60\n    },\n    \"name\": \"Khaki3\"\n  },\n  {\n    \"number\": 186,\n    \"hex\": \"#d7d787\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 50,\n      \"l\": 68\n    },\n    \"name\": \"LightGoldenrod2\"\n  },\n  {\n    \"number\": 187,\n    \"hex\": \"#d7d7af\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 33,\n      \"l\": 76\n    },\n    \"name\": \"LightYellow3\"\n  },\n  {\n    \"number\": 188,\n    \"hex\": \"#d7d7d7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 84\n    },\n    \"name\": \"Grey84\",\n    \"aliases\": [ \"Gray84\" ]\n  },\n  {\n    \"number\": 189,\n    \"hex\": \"#d7d7ff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 240,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"LightSteelBlue1\"\n  },\n  {\n    \"number\": 190,\n    \"hex\": \"#d7ff00\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 69.4117647058823,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Yellow2\"\n  },\n  {\n    \"number\": 191,\n    \"hex\": \"#d7ff5f\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 75,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"DarkOliveGreen1\"\n  },\n  {\n    \"number\": 192,\n    \"hex\": \"#d7ff87\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 80,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"DarkOliveGreen1\"\n  },\n  {\n    \"number\": 193,\n    \"hex\": \"#d7ffaf\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 90,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"DarkSeaGreen1\"\n  },\n  {\n    \"number\": 194,\n    \"hex\": \"#d7ffd7\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 120,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"Honeydew2\"\n  },\n  {\n    \"number\": 195,\n    \"hex\": \"#d7ffff\",\n    \"rgb\": {\n      \"r\": 215,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 180,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"LightCyan1\"\n  },\n  {\n    \"number\": 196,\n    \"hex\": \"#ff0000\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Red1\"\n  },\n  {\n    \"number\": 197,\n    \"hex\": \"#ff005f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 337.647058823529,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DeepPink2\"\n  },\n  {\n    \"number\": 198,\n    \"hex\": \"#ff0087\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 328.235294117647,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DeepPink1\"\n  },\n  {\n    \"number\": 199,\n    \"hex\": \"#ff00af\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 318.823529411765,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DeepPink1\"\n  },\n  {\n    \"number\": 200,\n    \"hex\": \"#ff00d7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 309.411764705882,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Magenta2\"\n  },\n  {\n    \"number\": 201,\n    \"hex\": \"#ff00ff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 0,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Magenta1\"\n  },\n  {\n    \"number\": 202,\n    \"hex\": \"#ff5f00\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 22.3529411764706,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"OrangeRed1\"\n  },\n  {\n    \"number\": 203,\n    \"hex\": \"#ff5f5f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"IndianRed1\"\n  },\n  {\n    \"number\": 204,\n    \"hex\": \"#ff5f87\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 345,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"IndianRed1\"\n  },\n  {\n    \"number\": 205,\n    \"hex\": \"#ff5faf\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 330,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"HotPink\"\n  },\n  {\n    \"number\": 206,\n    \"hex\": \"#ff5fd7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 315,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"HotPink\"\n  },\n  {\n    \"number\": 207,\n    \"hex\": \"#ff5fff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 95,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"MediumOrchid1\"\n  },\n  {\n    \"number\": 208,\n    \"hex\": \"#ff8700\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 31.7647058823529,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"DarkOrange\"\n  },\n  {\n    \"number\": 209,\n    \"hex\": \"#ff875f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 15,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"Salmon1\"\n  },\n  {\n    \"number\": 210,\n    \"hex\": \"#ff8787\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"LightCoral\"\n  },\n  {\n    \"number\": 211,\n    \"hex\": \"#ff87af\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 340,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"PaleVioletRed1\"\n  },\n  {\n    \"number\": 212,\n    \"hex\": \"#ff87d7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 320,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"Orchid2\"\n  },\n  {\n    \"number\": 213,\n    \"hex\": \"#ff87ff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 135,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"Orchid1\"\n  },\n  {\n    \"number\": 214,\n    \"hex\": \"#ffaf00\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 41.1764705882353,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Orange1\"\n  },\n  {\n    \"number\": 215,\n    \"hex\": \"#ffaf5f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 30,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"SandyBrown\"\n  },\n  {\n    \"number\": 216,\n    \"hex\": \"#ffaf87\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 20,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"LightSalmon1\"\n  },\n  {\n    \"number\": 217,\n    \"hex\": \"#ffafaf\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"LightPink1\"\n  },\n  {\n    \"number\": 218,\n    \"hex\": \"#ffafd7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 330,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"Pink1\"\n  },\n  {\n    \"number\": 219,\n    \"hex\": \"#ffafff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 175,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"Plum1\"\n  },\n  {\n    \"number\": 220,\n    \"hex\": \"#ffd700\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 50.5882352941176,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Gold1\"\n  },\n  {\n    \"number\": 221,\n    \"hex\": \"#ffd75f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 45,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"LightGoldenrod2\"\n  },\n  {\n    \"number\": 222,\n    \"hex\": \"#ffd787\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 40,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"LightGoldenrod2\"\n  },\n  {\n    \"number\": 223,\n    \"hex\": \"#ffd7af\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 30,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"NavajoWhite1\"\n  },\n  {\n    \"number\": 224,\n    \"hex\": \"#ffd7d7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"MistyRose1\"\n  },\n  {\n    \"number\": 225,\n    \"hex\": \"#ffd7ff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 215,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 300,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"Thistle1\"\n  },\n  {\n    \"number\": 226,\n    \"hex\": \"#ffff00\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 0\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 50\n    },\n    \"name\": \"Yellow1\"\n  },\n  {\n    \"number\": 227,\n    \"hex\": \"#ffff5f\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 95\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 68\n    },\n    \"name\": \"LightGoldenrod1\"\n  },\n  {\n    \"number\": 228,\n    \"hex\": \"#ffff87\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 135\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 76\n    },\n    \"name\": \"Khaki1\"\n  },\n  {\n    \"number\": 229,\n    \"hex\": \"#ffffaf\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 175\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 84\n    },\n    \"name\": \"Wheat1\"\n  },\n  {\n    \"number\": 230,\n    \"hex\": \"#ffffd7\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 215\n    },\n    \"hsl\": {\n      \"h\": 60,\n      \"s\": 100,\n      \"l\": 92\n    },\n    \"name\": \"Cornsilk1\"\n  },\n  {\n    \"number\": 231,\n    \"hex\": \"#ffffff\",\n    \"rgb\": {\n      \"r\": 255,\n      \"g\": 255,\n      \"b\": 255\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 100\n    },\n    \"name\": \"Grey100\",\n    \"aliases\": [ \"Gray100\" ]\n  },\n  {\n    \"number\": 232,\n    \"hex\": \"#080808\",\n    \"rgb\": {\n      \"r\": 8,\n      \"g\": 8,\n      \"b\": 8\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 3\n    },\n    \"name\": \"Grey3\",\n    \"aliases\": [ \"Gray3\" ]\n  },\n  {\n    \"number\": 233,\n    \"hex\": \"#121212\",\n    \"rgb\": {\n      \"r\": 18,\n      \"g\": 18,\n      \"b\": 18\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 7\n    },\n    \"name\": \"Grey7\",\n    \"aliases\": [ \"Gray7\" ]\n  },\n  {\n    \"number\": 234,\n    \"hex\": \"#1c1c1c\",\n    \"rgb\": {\n      \"r\": 28,\n      \"g\": 28,\n      \"b\": 28\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 10\n    },\n    \"name\": \"Grey11\",\n    \"aliases\": [ \"Gray11\" ]\n  },\n  {\n    \"number\": 235,\n    \"hex\": \"#262626\",\n    \"rgb\": {\n      \"r\": 38,\n      \"g\": 38,\n      \"b\": 38\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 14\n    },\n    \"name\": \"Grey15\",\n    \"aliases\": [ \"Gray15\" ]\n  },\n  {\n    \"number\": 236,\n    \"hex\": \"#303030\",\n    \"rgb\": {\n      \"r\": 48,\n      \"g\": 48,\n      \"b\": 48\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 18\n    },\n    \"name\": \"Grey19\",\n    \"aliases\": [ \"Gray19\" ]\n  },\n  {\n    \"number\": 237,\n    \"hex\": \"#3a3a3a\",\n    \"rgb\": {\n      \"r\": 58,\n      \"g\": 58,\n      \"b\": 58\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 22\n    },\n    \"name\": \"Grey23\",\n    \"aliases\": [ \"Gray23\" ]\n  },\n  {\n    \"number\": 238,\n    \"hex\": \"#444444\",\n    \"rgb\": {\n      \"r\": 68,\n      \"g\": 68,\n      \"b\": 68\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 26\n    },\n    \"name\": \"Grey27\",\n    \"aliases\": [ \"Gray27\" ]\n  },\n  {\n    \"number\": 239,\n    \"hex\": \"#4e4e4e\",\n    \"rgb\": {\n      \"r\": 78,\n      \"g\": 78,\n      \"b\": 78\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 30\n    },\n    \"name\": \"Grey30\",\n    \"aliases\": [ \"Gray30\" ]\n  },\n  {\n    \"number\": 240,\n    \"hex\": \"#585858\",\n    \"rgb\": {\n      \"r\": 88,\n      \"g\": 88,\n      \"b\": 88\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 34\n    },\n    \"name\": \"Grey35\",\n    \"aliases\": [ \"Gray35\" ]\n  },\n  {\n    \"number\": 241,\n    \"hex\": \"#626262\",\n    \"rgb\": {\n      \"r\": 98,\n      \"g\": 98,\n      \"b\": 98\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 37\n    },\n    \"name\": \"Grey39\",\n    \"aliases\": [ \"Gray39\" ]\n  },\n  {\n    \"number\": 242,\n    \"hex\": \"#6c6c6c\",\n    \"rgb\": {\n      \"r\": 108,\n      \"g\": 108,\n      \"b\": 108\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 40\n    },\n    \"name\": \"Grey42\",\n    \"aliases\": [ \"Gray42\" ]\n  },\n  {\n    \"number\": 243,\n    \"hex\": \"#767676\",\n    \"rgb\": {\n      \"r\": 118,\n      \"g\": 118,\n      \"b\": 118\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 46\n    },\n    \"name\": \"Grey46\",\n    \"aliases\": [ \"Gray46\" ]\n  },\n  {\n    \"number\": 244,\n    \"hex\": \"#808080\",\n    \"rgb\": {\n      \"r\": 128,\n      \"g\": 128,\n      \"b\": 128\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 50\n    },\n    \"name\": \"Grey50\",\n    \"aliases\": [ \"Gray50\" ]\n  },\n  {\n    \"number\": 245,\n    \"hex\": \"#8a8a8a\",\n    \"rgb\": {\n      \"r\": 138,\n      \"g\": 138,\n      \"b\": 138\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 54\n    },\n    \"name\": \"Grey54\",\n    \"aliases\": [ \"Gray54\" ]\n  },\n  {\n    \"number\": 246,\n    \"hex\": \"#949494\",\n    \"rgb\": {\n      \"r\": 148,\n      \"g\": 148,\n      \"b\": 148\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 58\n    },\n    \"name\": \"Grey58\",\n    \"aliases\": [ \"Gray58\" ]\n  },\n  {\n    \"number\": 247,\n    \"hex\": \"#9e9e9e\",\n    \"rgb\": {\n      \"r\": 158,\n      \"g\": 158,\n      \"b\": 158\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 61\n    },\n    \"name\": \"Grey62\",\n    \"aliases\": [ \"Gray62\" ]\n  },\n  {\n    \"number\": 248,\n    \"hex\": \"#a8a8a8\",\n    \"rgb\": {\n      \"r\": 168,\n      \"g\": 168,\n      \"b\": 168\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 65\n    },\n    \"name\": \"Grey66\",\n    \"aliases\": [ \"Gray66\" ]\n  },\n  {\n    \"number\": 249,\n    \"hex\": \"#b2b2b2\",\n    \"rgb\": {\n      \"r\": 178,\n      \"g\": 178,\n      \"b\": 178\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 69\n    },\n    \"name\": \"Grey70\",\n    \"aliases\": [ \"Gray70\" ]\n  },\n  {\n    \"number\": 250,\n    \"hex\": \"#bcbcbc\",\n    \"rgb\": {\n      \"r\": 188,\n      \"g\": 188,\n      \"b\": 188\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 73\n    },\n    \"name\": \"Grey74\",\n    \"aliases\": [ \"Gray74\" ]\n  },\n  {\n    \"number\": 251,\n    \"hex\": \"#c6c6c6\",\n    \"rgb\": {\n      \"r\": 198,\n      \"g\": 198,\n      \"b\": 198\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 77\n    },\n    \"name\": \"Grey78\",\n    \"aliases\": [ \"Gray78\" ]\n  },\n  {\n    \"number\": 252,\n    \"hex\": \"#d0d0d0\",\n    \"rgb\": {\n      \"r\": 208,\n      \"g\": 208,\n      \"b\": 208\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 81\n    },\n    \"name\": \"Grey82\",\n    \"aliases\": [ \"Gray82\" ]\n  },\n  {\n    \"number\": 253,\n    \"hex\": \"#dadada\",\n    \"rgb\": {\n      \"r\": 218,\n      \"g\": 218,\n      \"b\": 218\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 85\n    },\n    \"name\": \"Grey85\",\n    \"aliases\": [ \"Gray85\" ]\n  },\n  {\n    \"number\": 254,\n    \"hex\": \"#e4e4e4\",\n    \"rgb\": {\n      \"r\": 228,\n      \"g\": 228,\n      \"b\": 228\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 89\n    },\n    \"name\": \"Grey89\",\n    \"aliases\": [ \"Gray89\" ]\n  },\n  {\n    \"number\": 255,\n    \"hex\": \"#eeeeee\",\n    \"rgb\": {\n      \"r\": 238,\n      \"g\": 238,\n      \"b\": 238\n    },\n    \"hsl\": {\n      \"h\": 0,\n      \"s\": 0,\n      \"l\": 93\n    },\n    \"name\": \"Grey93\",\n    \"aliases\": [ \"Gray93\" ]\n  }\n]"
  },
  {
    "path": "src/Spectre.Console.Ansi/Decoration.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents text decoration.\n/// </summary>\n/// <remarks>\n/// Support for text decorations is up to the terminal.\n/// </remarks>\n[Flags]\npublic enum Decoration\n{\n    /// <summary>\n    /// No text decoration.\n    /// </summary>\n    None = 0,\n\n    /// <summary>\n    /// Bold text.\n    /// Not supported in every environment.\n    /// </summary>\n    Bold = 1 << 0,\n\n    /// <summary>\n    /// Dim or faint text.\n    /// Not supported in every environment.\n    /// </summary>\n    Dim = 1 << 1,\n\n    /// <summary>\n    /// Italic text.\n    /// Not supported in every environment.\n    /// </summary>\n    Italic = 1 << 2,\n\n    /// <summary>\n    /// Underlined text.\n    /// Not supported in every environment.\n    /// </summary>\n    Underline = 1 << 3,\n\n    /// <summary>\n    /// Swaps the foreground and background colors.\n    /// Not supported in every environment.\n    /// </summary>\n    Invert = 1 << 4,\n\n    /// <summary>\n    /// Hides the text.\n    /// Not supported in every environment.\n    /// </summary>\n    Conceal = 1 << 5,\n\n    /// <summary>\n    /// Makes text blink.\n    /// Normally less than 150 blinks per minute.\n    /// Not supported in every environment.\n    /// </summary>\n    SlowBlink = 1 << 6,\n\n    /// <summary>\n    /// Makes text blink.\n    /// Normally more than 150 blinks per minute.\n    /// Not supported in every environment.\n    /// </summary>\n    RapidBlink = 1 << 7,\n\n    /// <summary>\n    /// Shows text with a horizontal line through the center.\n    /// Not supported in every environment.\n    /// </summary>\n    Strikethrough = 1 << 8,\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/DecorationTable.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class DecorationTable\n{\n    private static readonly Dictionary<string, Decoration?> _lookup;\n    private static readonly Dictionary<Decoration, string> _reverseLookup;\n\n    static DecorationTable()\n    {\n        _lookup = new Dictionary<string, Decoration?>(StringComparer.OrdinalIgnoreCase)\n            {\n                { \"none\", Decoration.None },\n                { \"bold\", Decoration.Bold },\n                { \"b\", Decoration.Bold },\n                { \"dim\", Decoration.Dim },\n                { \"italic\", Decoration.Italic },\n                { \"i\", Decoration.Italic },\n                { \"underline\", Decoration.Underline },\n                { \"u\", Decoration.Underline },\n                { \"invert\", Decoration.Invert },\n                { \"reverse\", Decoration.Invert },\n                { \"conceal\", Decoration.Conceal },\n                { \"blink\", Decoration.SlowBlink },\n                { \"slowblink\", Decoration.SlowBlink },\n                { \"rapidblink\", Decoration.RapidBlink },\n                { \"strike\", Decoration.Strikethrough },\n                { \"strikethrough\", Decoration.Strikethrough },\n                { \"s\", Decoration.Strikethrough },\n            };\n\n        _reverseLookup = new Dictionary<Decoration, string>();\n        foreach (var (name, decoration) in _lookup)\n        {\n            // Cannot happen, but the compiler thinks so...\n            if (decoration == null)\n            {\n                continue;\n            }\n\n            _reverseLookup.TryAdd(decoration.Value, name);\n        }\n    }\n\n    public static Decoration? GetDecoration(string name)\n    {\n        _lookup.TryGetValue(name, out var result);\n        return result;\n    }\n\n    public static List<string> GetMarkupNames(Decoration decoration)\n    {\n        var result = new List<string>();\n\n        EnumUtils.GetValues<Decoration>()\n            .Where(flag => (decoration & flag) != 0)\n            .ForEach(flag =>\n            {\n                if (flag != Decoration.None && _reverseLookup.TryGetValue(flag, out var name))\n                {\n                    result.Add(name);\n                }\n            });\n\n        return result;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.AssemblyInfo.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable RS0016\nusing System.Security;\n#if NET9_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n\n[assembly: TypeForwardedTo(typeof(System.Threading.Lock))]\n#endif\n\n#if !SOURCE_GENERATOR\n[assembly: SecurityTransparent]\n#endif\n#pragma warning restore RS0016\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.Lock.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if (NETSTANDARD2_1_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER) && !NET9_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n/// <summary>\n/// A backport of .NET 9.0+'s System.Threading.Lock. Provides a way to get mutual exclusion in regions of code between different threads.\n/// A lock may be held by one thread at a time.\n/// </summary>\n/// <remarks>\n/// Threads that cannot immediately enter the lock may wait for the lock to be exited or until a specified timeout. A thread\n/// that holds a lock may enter the lock repeatedly without exiting it, such as recursively, in which case the thread should\n/// eventually exit the lock the same number of times to fully exit the lock and allow other threads to enter the lock.\n/// </remarks>\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nsealed class Lock\n{\n#pragma warning disable CS9216 // A value of type 'System.Threading.Lock' converted to a different type will use likely unintended monitor-based locking in 'lock' statement.\n    /// <summary>\n    /// Determines whether the current thread holds this lock.\n    /// </summary>\n    /// <returns>\n    /// true if the current thread holds this lock; otherwise, false.\n    /// </returns>\n#pragma warning disable SA1623 // Property summary documentation should match accessors\n    public bool IsHeldByCurrentThread => Monitor.IsEntered(this);\n#pragma warning restore SA1623 // Property summary documentation should match accessors\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Enter(object)\"/>\n    /// </summary>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Enter() => Monitor.Enter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </returns>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter() => Monitor.TryEnter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </returns>\n    /// <param name=\"timeout\">A <see cref=\"TimeSpan\" /> representing the amount of time to wait for the lock.\n    /// A value of -1 millisecond specifies an infinite wait.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">The value of timeout in milliseconds is negative and is not equal to <see cref=\"Timeout.Infinite\"/>\n    /// (-1 millisecond), or is greater than <see cref=\"int.MaxValue\"/>.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter(TimeSpan timeout) => Monitor.TryEnter(this, timeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </returns>\n    /// <param name=\"millisecondsTimeout\">The number of milliseconds to wait for the lock.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">millisecondsTimeout is negative, and not equal to <see cref=\"Timeout.Infinite\"/>.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public bool TryEnter(int millisecondsTimeout) => Monitor.TryEnter(this, millisecondsTimeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Exit(object)\"/>\n    /// </summary>\n    /// <exception cref=\"SynchronizationLockException\">The current thread does not own the lock for the specified object.</exception>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public void Exit() => Monitor.Exit(this);\n#pragma warning restore CS9216 // A value of type 'System.Threading.Lock' converted to a different type will use likely unintended monitor-based locking in 'lock' statement.\n\n    /// <summary>\n    /// Enters the lock and returns a <see cref=\"Scope\"/> that may be disposed to exit the lock. Once the method returns,\n    /// the calling thread would be the only thread that holds the lock. This method is intended to be used along with a\n    /// language construct that would automatically dispose the <see cref=\"Scope\"/>, such as with the C# using statement.\n    /// </summary>\n    /// <returns>\n    /// A <see cref=\"Scope\"/> that may be disposed to exit the lock.\n    /// </returns>\n    /// <remarks>\n    /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is\n    /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock, such as by\n    /// disposing the returned <see cref=\"Scope\"/>, as many times as it had entered the lock to fully exit the lock and\n    /// allow other threads to enter the lock.\n    /// </remarks>\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n    public Scope EnterScope()\n    {\n        this.Enter();\n        return new Scope(this);\n    }\n\n    /// <summary>\n    /// A disposable structure that is returned by <see cref=\"EnterScope()\"/>, which when disposed, exits the lock.\n    /// </summary>\n    public ref struct Scope(Lock @lock)\n    {\n        /// <summary>\n        /// Exits the lock.\n        /// </summary>\n        /// <remarks>\n        /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The\n        /// calling thread should ensure that each enter is matched with an exit.\n        /// </remarks>\n        /// <exception cref=\"SynchronizationLockException\">\n        /// The calling thread does not hold the lock.\n        /// </exception>\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public readonly void Dispose() => @lock.Exit();\n    }\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n#pragma warning restore SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.LockFactory.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n#endif\n#if NET9_0_OR_GREATER\nusing FrameworkNamespace = System.Threading;\n#endif\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace Backport.System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n#if NET9_0_OR_GREATER\n/// <summary>\n/// Represents a factory class for backporting .NET 9.0's System.Threading.Lock to prior framework versions.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use <see cref=\"FrameworkNamespace.Lock\"/>.\n/// </summary>\npublic static class LockFactory\n{\n/// <summary>\n/// Creates a new instance of <see cref=\"FrameworkNamespace.Lock\"/>. On frameworks prior to .NET 9.0, a different backported class is returned.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use <see cref=\"FrameworkNamespace.Lock\"/>.\n/// </summary>\n/// <returns>An instance of <see cref=\"FrameworkNamespace.Lock\"/>.</returns>\n[MethodImpl(MethodImplOptions.AggressiveInlining)]\npublic static FrameworkNamespace.Lock Create() => new();\n}\n#else\n/// <summary>\n/// Represents a factory class for backporting .NET 9.0's System.Threading.Lock to prior framework versions.\n/// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use System.Threading.Lock.\n/// </summary>\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nstatic class LockFactory\n{\n    /// <summary>\n    /// Creates a new instance of <see cref=\"Lock\"/>. On .NET 9.0 or later, an instance of System.Threading.Lock is returned.\n    /// If your project does not target anything in the .NET Framework (including .NET Standard 2.0), you do not need to use this; simply use System.Threading.Lock.\n    /// </summary>\n    /// <returns>An instance of <see cref=\"Lock\"/>.</returns>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public static Lock Create() => new();\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Backport.System.Threading.Lock.SourceGenerator/Backport.System.Threading.Lock.SourceGenerator.Generator/Backport.System.Threading.Lock.SourceGenerator.ThreadAbortableLock.cs",
    "content": "﻿// Copyright (c) All contributors. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n#define SOURCE_GENERATOR\n#pragma warning disable SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if !NET9_0_OR_GREATER\nusing System;\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\nusing System.Runtime.CompilerServices;\n#endif\nusing System.Threading;\n\n#pragma warning disable IDE0130 // Namespace does not match folder structure\nnamespace Backport.System.Threading;\n#pragma warning restore IDE0130 // Namespace does not match folder structure\n\n/// <summary>\n/// A backport of .NET 9.0+'s System.Threading.Lock. Provides a way to get mutual exclusion in regions of code between different threads.\n/// A lock may be held by one thread at a time. Do not try and create an instance of this class; use <see cref=\"LockFactory.Create()\"/>.\n/// </summary>\n/// <remarks>\n/// Threads that cannot immediately enter the lock may wait for the lock to be exited or until a specified timeout. A thread\n/// that holds a lock may enter the lock repeatedly without exiting it, such as recursively, in which case the thread should\n/// eventually exit the lock the same number of times to fully exit the lock and allow other threads to enter the lock.\n/// </remarks>\n#pragma warning disable SA1649 // SA1649FileNameMustMatchTypeName\n#if SOURCE_GENERATOR\ninternal\n#else\npublic\n#endif\nsealed class Lock\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n{\n#pragma warning disable SA1642 // ConstructorSummaryDocumentationMustBeginWithStandardText\n    /// <summary>\n    /// Use <see cref=\"LockFactory.Create()\"/> instead.\n    /// </summary>\n#pragma warning restore SA1642 // ConstructorSummaryDocumentationMustBeginWithStandardText\n    internal Lock()\n    {\n    }\n\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    /// <summary>\n    /// Determines whether the current thread holds this lock.\n    /// </summary>\n    /// <returns>\n    /// true if the current thread holds this lock; otherwise, false.\n    /// </returns>\n    /// <exception cref=\"ArgumentNullException\"><inheritdoc cref=\"ArgumentNullException\"/></exception>\n#pragma warning disable SA1623 // Property summary documentation should match accessors\n    public bool IsHeldByCurrentThread => Monitor.IsEntered(this);\n#pragma warning restore SA1623 // Property summary documentation should match accessors\n#endif\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Enter(object)\"/>\n    /// </summary>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public void Enter() => Monitor.Enter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object)\"/>\n    /// </returns>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter() => Monitor.TryEnter(this);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, TimeSpan)\"/>\n    /// </returns>\n    /// <param name=\"timeout\">A <see cref=\"TimeSpan\" /> representing the amount of time to wait for the lock.\n    /// A value of -1 millisecond specifies an infinite wait.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">The value of timeout in milliseconds is negative and is not equal to <see cref=\"Timeout.Infinite\"/>\n    /// (-1 millisecond), or is greater than <see cref=\"int.MaxValue\"/>.</exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter(TimeSpan timeout) => Monitor.TryEnter(this, timeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </summary>\n    /// <returns>\n    /// <inheritdoc cref=\"Monitor.TryEnter(object, int)\"/>\n    /// </returns>\n    /// <param name=\"millisecondsTimeout\">The number of milliseconds to wait for the lock.</param>\n    /// <exception cref=\"ArgumentOutOfRangeException\">millisecondsTimeout is negative, and not equal to <see cref=\"Timeout.Infinite\"/>.</exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public bool TryEnter(int millisecondsTimeout) => Monitor.TryEnter(this, millisecondsTimeout);\n\n    /// <summary>\n    /// <inheritdoc cref=\"Monitor.Exit(object)\"/>\n    /// </summary>\n    /// <exception cref=\"SynchronizationLockException\"><inheritdoc cref=\"Monitor.Exit(object)\"/></exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n    public void Exit() => Monitor.Exit(this);\n\n    /// <summary>\n    /// Enters the lock and returns a <see cref=\"Scope\"/> that may be disposed to exit the lock. Once the method returns,\n    /// the calling thread would be the only thread that holds the lock. This method is intended to be used along with a\n    /// language construct that would automatically dispose the <see cref=\"Scope\"/>, such as with the C# using statement.\n    /// </summary>\n    /// <returns>\n    /// A <see cref=\"Scope\"/> that may be disposed to exit the lock.\n    /// </returns>\n    /// <remarks>\n    /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is\n    /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock, such as by\n    /// disposing the returned <see cref=\"Scope\"/>, as many times as it had entered the lock to fully exit the lock and\n    /// allow other threads to enter the lock.\n    /// </remarks>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n    [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n#if (NET40_OR_GREATER || NETSTANDARD2_0_OR_GREATER) && !NET5_0_OR_GREATER\n    [Obsolete(\"This method is a best-effort at hardening against thread aborts, but can theoretically retain lock on pre-.NET 5.0. Use with caution.\")]\n    public Scope EnterScope()\n    {\n        bool lockTaken = false;\n        try\n        {\n            Monitor.Enter(this, ref lockTaken);\n            return new Scope(this);\n        }\n        catch (ThreadAbortException)\n        {\n            if (lockTaken)\n            {\n                Monitor.Exit(this);\n            }\n\n            throw;\n        }\n    }\n#else\n    public Scope EnterScope()\n    {\n        Monitor.Enter(this);\n        return new Scope(this);\n    }\n#endif\n\n    /// <summary>\n    /// A disposable structure that is returned by <see cref=\"EnterScope()\"/>, which when disposed, exits the lock.\n    /// </summary>\n    public ref struct Scope(Lock @lock)\n    {\n        /// <summary>\n        /// Exits the lock.\n        /// </summary>\n        /// <remarks>\n        /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The\n        /// calling thread should ensure that each enter is matched with an exit.\n        /// </remarks>\n        /// <exception cref=\"SynchronizationLockException\">\n        /// The calling thread does not hold the lock.\n        /// </exception>\n#if NET45_OR_GREATER || NETSTANDARD1_0_OR_GREATER || NETCOREAPP1_0_OR_GREATER || NET5_0_OR_GREATER\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n#endif\n        public readonly void Dispose() => @lock.Exit();\n    }\n}\n#endif\n#pragma warning restore SA1649 // SA1649FileNameMustMatchTypeName\n#pragma warning restore SA1625 // ElementDocumentationMustNotBeCopiedAndPasted\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/Color.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Spectre.Console\n{\n    /// <summary>\n    /// Represents a color.\n    /// </summary>\n    public partial struct Color\n    {\n        internal Color(byte number, byte red, byte green, byte blue, bool isDefault = false)\n            : this(red, green, blue)\n        {\n            Number = number;\n            IsDefault = isDefault;\n        }\n        \n        /// <summary>\n        /// Gets the color \"Black\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Black { get; } = new Color(0, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Maroon\" (RGB 128,0,0).\n        /// </summary>\n        public static Color Maroon { get; } = new Color(1, 128, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Green\" (RGB 0,128,0).\n        /// </summary>\n        public static Color Green { get; } = new Color(2, 0, 128, 0);\n        \n        /// <summary>\n        /// Gets the color \"Olive\" (RGB 128,128,0).\n        /// </summary>\n        public static Color Olive { get; } = new Color(3, 128, 128, 0);\n        \n        /// <summary>\n        /// Gets the color \"Navy\" (RGB 0,0,128).\n        /// </summary>\n        public static Color Navy { get; } = new Color(4, 0, 0, 128);\n        \n        /// <summary>\n        /// Gets the color \"Purple\" (RGB 128,0,128).\n        /// </summary>\n        public static Color Purple { get; } = new Color(5, 128, 0, 128);\n        \n        /// <summary>\n        /// Gets the color \"Teal\" (RGB 0,128,128).\n        /// </summary>\n        public static Color Teal { get; } = new Color(6, 0, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Silver\" (RGB 192,192,192).\n        /// </summary>\n        public static Color Silver { get; } = new Color(7, 192, 192, 192);\n        \n        /// <summary>\n        /// Gets the color \"Grey\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey { get; } = new Color(8, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Gray\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray { get; } = new Color(8, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Red\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red { get; } = new Color(9, 255, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Lime\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Lime { get; } = new Color(10, 0, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"Yellow\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow { get; } = new Color(11, 255, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"Blue\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue { get; } = new Color(12, 0, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Fuchsia\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Fuchsia { get; } = new Color(13, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Magenta\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta { get; } = new Color(13, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Aqua\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Aqua { get; } = new Color(14, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Cyan\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan { get; } = new Color(14, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"White\" (RGB 255,255,255).\n        /// </summary>\n        public static Color White { get; } = new Color(15, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Grey0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Grey0 { get; } = new Color(16, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"Gray0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Gray0 { get; } = new Color(16, 0, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"NavyBlue\" (RGB 0,0,95).\n        /// </summary>\n        public static Color NavyBlue { get; } = new Color(17, 0, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkBlue\" (RGB 0,0,135).\n        /// </summary>\n        public static Color DarkBlue { get; } = new Color(18, 0, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Blue3\" (RGB 0,0,175).\n        /// </summary>\n        public static Color Blue3 { get; } = new Color(19, 0, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Blue3_1\" (RGB 0,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Blue3_1 { get; } = new Color(20, 0, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Blue1\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue1 { get; } = new Color(21, 0, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkGreen\" (RGB 0,95,0).\n        /// </summary>\n        public static Color DarkGreen { get; } = new Color(22, 0, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4\" (RGB 0,95,95).\n        /// </summary>\n        public static Color DeepSkyBlue4 { get; } = new Color(23, 0, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_1\" (RGB 0,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_1 { get; } = new Color(24, 0, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_2\" (RGB 0,95,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_2 { get; } = new Color(25, 0, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue3\" (RGB 0,95,215).\n        /// </summary>\n        public static Color DodgerBlue3 { get; } = new Color(26, 0, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue2\" (RGB 0,95,255).\n        /// </summary>\n        public static Color DodgerBlue2 { get; } = new Color(27, 0, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green4\" (RGB 0,135,0).\n        /// </summary>\n        public static Color Green4 { get; } = new Color(28, 0, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen4\" (RGB 0,135,95).\n        /// </summary>\n        public static Color SpringGreen4 { get; } = new Color(29, 0, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"Turquoise4\" (RGB 0,135,135).\n        /// </summary>\n        public static Color Turquoise4 { get; } = new Color(30, 0, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3\" (RGB 0,135,175).\n        /// </summary>\n        public static Color DeepSkyBlue3 { get; } = new Color(31, 0, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3_1\" (RGB 0,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue3_1 { get; } = new Color(32, 0, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"DodgerBlue1\" (RGB 0,135,255).\n        /// </summary>\n        public static Color DodgerBlue1 { get; } = new Color(33, 0, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green3\" (RGB 0,175,0).\n        /// </summary>\n        public static Color Green3 { get; } = new Color(34, 0, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen3\" (RGB 0,175,95).\n        /// </summary>\n        public static Color SpringGreen3 { get; } = new Color(35, 0, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkCyan\" (RGB 0,175,135).\n        /// </summary>\n        public static Color DarkCyan { get; } = new Color(36, 0, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSeaGreen\" (RGB 0,175,175).\n        /// </summary>\n        public static Color LightSeaGreen { get; } = new Color(37, 0, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue2\" (RGB 0,175,215).\n        /// </summary>\n        public static Color DeepSkyBlue2 { get; } = new Color(38, 0, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"DeepSkyBlue1\" (RGB 0,175,255).\n        /// </summary>\n        public static Color DeepSkyBlue1 { get; } = new Color(39, 0, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green3_1\" (RGB 0,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Green3_1 { get; } = new Color(40, 0, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen3_1\" (RGB 0,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen3_1 { get; } = new Color(41, 0, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen2\" (RGB 0,215,135).\n        /// </summary>\n        public static Color SpringGreen2 { get; } = new Color(42, 0, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"Cyan3\" (RGB 0,215,175).\n        /// </summary>\n        public static Color Cyan3 { get; } = new Color(43, 0, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkTurquoise\" (RGB 0,215,215).\n        /// </summary>\n        public static Color DarkTurquoise { get; } = new Color(44, 0, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Turquoise2\" (RGB 0,215,255).\n        /// </summary>\n        public static Color Turquoise2 { get; } = new Color(45, 0, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Green1\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Green1 { get; } = new Color(46, 0, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen2_1\" (RGB 0,255,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen2_1 { get; } = new Color(47, 0, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"SpringGreen1\" (RGB 0,255,135).\n        /// </summary>\n        public static Color SpringGreen1 { get; } = new Color(48, 0, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumSpringGreen\" (RGB 0,255,175).\n        /// </summary>\n        public static Color MediumSpringGreen { get; } = new Color(49, 0, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Cyan2\" (RGB 0,255,215).\n        /// </summary>\n        public static Color Cyan2 { get; } = new Color(50, 0, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"Cyan1\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan1 { get; } = new Color(51, 0, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkRed\" (RGB 95,0,0).\n        /// </summary>\n        public static Color DarkRed { get; } = new Color(52, 95, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4\" (RGB 95,0,95).\n        /// </summary>\n        public static Color DeepPink4 { get; } = new Color(53, 95, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"Purple4\" (RGB 95,0,135).\n        /// </summary>\n        public static Color Purple4 { get; } = new Color(54, 95, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Purple4_1\" (RGB 95,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple4_1 { get; } = new Color(55, 95, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Purple3\" (RGB 95,0,215).\n        /// </summary>\n        public static Color Purple3 { get; } = new Color(56, 95, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"BlueViolet\" (RGB 95,0,255).\n        /// </summary>\n        public static Color BlueViolet { get; } = new Color(57, 95, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange4\" (RGB 95,95,0).\n        /// </summary>\n        public static Color Orange4 { get; } = new Color(58, 95, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"Grey37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Grey37 { get; } = new Color(59, 95, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"Gray37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Gray37 { get; } = new Color(59, 95, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple4\" (RGB 95,95,135).\n        /// </summary>\n        public static Color MediumPurple4 { get; } = new Color(60, 95, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue3\" (RGB 95,95,175).\n        /// </summary>\n        public static Color SlateBlue3 { get; } = new Color(61, 95, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue3_1\" (RGB 95,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SlateBlue3_1 { get; } = new Color(62, 95, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"RoyalBlue1\" (RGB 95,95,255).\n        /// </summary>\n        public static Color RoyalBlue1 { get; } = new Color(63, 95, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse4\" (RGB 95,135,0).\n        /// </summary>\n        public static Color Chartreuse4 { get; } = new Color(64, 95, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4\" (RGB 95,135,95).\n        /// </summary>\n        public static Color DarkSeaGreen4 { get; } = new Color(65, 95, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleTurquoise4\" (RGB 95,135,135).\n        /// </summary>\n        public static Color PaleTurquoise4 { get; } = new Color(66, 95, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue\" (RGB 95,135,175).\n        /// </summary>\n        public static Color SteelBlue { get; } = new Color(67, 95, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue3\" (RGB 95,135,215).\n        /// </summary>\n        public static Color SteelBlue3 { get; } = new Color(68, 95, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"CornflowerBlue\" (RGB 95,135,255).\n        /// </summary>\n        public static Color CornflowerBlue { get; } = new Color(69, 95, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse3\" (RGB 95,175,0).\n        /// </summary>\n        public static Color Chartreuse3 { get; } = new Color(70, 95, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4_1\" (RGB 95,175,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen4_1 { get; } = new Color(71, 95, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"CadetBlue\" (RGB 95,175,135).\n        /// </summary>\n        public static Color CadetBlue { get; } = new Color(72, 95, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"CadetBlue_1\" (RGB 95,175,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color CadetBlue_1 { get; } = new Color(73, 95, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue3\" (RGB 95,175,215).\n        /// </summary>\n        public static Color SkyBlue3 { get; } = new Color(74, 95, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue1\" (RGB 95,175,255).\n        /// </summary>\n        public static Color SteelBlue1 { get; } = new Color(75, 95, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse3_1\" (RGB 95,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse3_1 { get; } = new Color(76, 95, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen3\" (RGB 95,215,95).\n        /// </summary>\n        public static Color PaleGreen3 { get; } = new Color(77, 95, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen3\" (RGB 95,215,135).\n        /// </summary>\n        public static Color SeaGreen3 { get; } = new Color(78, 95, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine3\" (RGB 95,215,175).\n        /// </summary>\n        public static Color Aquamarine3 { get; } = new Color(79, 95, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumTurquoise\" (RGB 95,215,215).\n        /// </summary>\n        public static Color MediumTurquoise { get; } = new Color(80, 95, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"SteelBlue1_1\" (RGB 95,215,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SteelBlue1_1 { get; } = new Color(81, 95, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse2\" (RGB 95,255,0).\n        /// </summary>\n        public static Color Chartreuse2 { get; } = new Color(82, 95, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen2\" (RGB 95,255,95).\n        /// </summary>\n        public static Color SeaGreen2 { get; } = new Color(83, 95, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen1\" (RGB 95,255,135).\n        /// </summary>\n        public static Color SeaGreen1 { get; } = new Color(84, 95, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"SeaGreen1_1\" (RGB 95,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SeaGreen1_1 { get; } = new Color(85, 95, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine1\" (RGB 95,255,215).\n        /// </summary>\n        public static Color Aquamarine1 { get; } = new Color(86, 95, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray2\" (RGB 95,255,255).\n        /// </summary>\n        public static Color DarkSlateGray2 { get; } = new Color(87, 95, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkRed_1\" (RGB 135,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkRed_1 { get; } = new Color(88, 135, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4_1\" (RGB 135,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_1 { get; } = new Color(89, 135, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkMagenta\" (RGB 135,0,135).\n        /// </summary>\n        public static Color DarkMagenta { get; } = new Color(90, 135, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkMagenta_1\" (RGB 135,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkMagenta_1 { get; } = new Color(91, 135, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkViolet\" (RGB 135,0,215).\n        /// </summary>\n        public static Color DarkViolet { get; } = new Color(92, 135, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Purple_1\" (RGB 135,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_1 { get; } = new Color(93, 135, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange4_1\" (RGB 135,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Orange4_1 { get; } = new Color(94, 135, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightPink4\" (RGB 135,95,95).\n        /// </summary>\n        public static Color LightPink4 { get; } = new Color(95, 135, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"Plum4\" (RGB 135,95,135).\n        /// </summary>\n        public static Color Plum4 { get; } = new Color(96, 135, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple3\" (RGB 135,95,175).\n        /// </summary>\n        public static Color MediumPurple3 { get; } = new Color(97, 135, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple3_1\" (RGB 135,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple3_1 { get; } = new Color(98, 135, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"SlateBlue1\" (RGB 135,95,255).\n        /// </summary>\n        public static Color SlateBlue1 { get; } = new Color(99, 135, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow4\" (RGB 135,135,0).\n        /// </summary>\n        public static Color Yellow4 { get; } = new Color(100, 135, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"Wheat4\" (RGB 135,135,95).\n        /// </summary>\n        public static Color Wheat4 { get; } = new Color(101, 135, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"Grey53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Grey53 { get; } = new Color(102, 135, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Gray53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Gray53 { get; } = new Color(102, 135, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSlateGrey\" (RGB 135,135,175).\n        /// </summary>\n        public static Color LightSlateGrey { get; } = new Color(103, 135, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple\" (RGB 135,135,215).\n        /// </summary>\n        public static Color MediumPurple { get; } = new Color(104, 135, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSlateBlue\" (RGB 135,135,255).\n        /// </summary>\n        public static Color LightSlateBlue { get; } = new Color(105, 135, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow4_1\" (RGB 135,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow4_1 { get; } = new Color(106, 135, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3\" (RGB 135,175,95).\n        /// </summary>\n        public static Color DarkOliveGreen3 { get; } = new Color(107, 135, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen\" (RGB 135,175,135).\n        /// </summary>\n        public static Color DarkSeaGreen { get; } = new Color(108, 135, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue3\" (RGB 135,175,175).\n        /// </summary>\n        public static Color LightSkyBlue3 { get; } = new Color(109, 135, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue3_1\" (RGB 135,175,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSkyBlue3_1 { get; } = new Color(110, 135, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue2\" (RGB 135,175,255).\n        /// </summary>\n        public static Color SkyBlue2 { get; } = new Color(111, 135, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse2_1\" (RGB 135,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse2_1 { get; } = new Color(112, 135, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_1\" (RGB 135,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_1 { get; } = new Color(113, 135, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen3_1\" (RGB 135,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen3_1 { get; } = new Color(114, 135, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3\" (RGB 135,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen3 { get; } = new Color(115, 135, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray3\" (RGB 135,215,215).\n        /// </summary>\n        public static Color DarkSlateGray3 { get; } = new Color(116, 135, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"SkyBlue1\" (RGB 135,215,255).\n        /// </summary>\n        public static Color SkyBlue1 { get; } = new Color(117, 135, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Chartreuse1\" (RGB 135,255,0).\n        /// </summary>\n        public static Color Chartreuse1 { get; } = new Color(118, 135, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGreen\" (RGB 135,255,95).\n        /// </summary>\n        public static Color LightGreen { get; } = new Color(119, 135, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGreen_1\" (RGB 135,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGreen_1 { get; } = new Color(120, 135, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen1\" (RGB 135,255,175).\n        /// </summary>\n        public static Color PaleGreen1 { get; } = new Color(121, 135, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Aquamarine1_1\" (RGB 135,255,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Aquamarine1_1 { get; } = new Color(122, 135, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"DarkSlateGray1\" (RGB 135,255,255).\n        /// </summary>\n        public static Color DarkSlateGray1 { get; } = new Color(123, 135, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red3\" (RGB 175,0,0).\n        /// </summary>\n        public static Color Red3 { get; } = new Color(124, 175, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink4_2\" (RGB 175,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_2 { get; } = new Color(125, 175, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"MediumVioletRed\" (RGB 175,0,135).\n        /// </summary>\n        public static Color MediumVioletRed { get; } = new Color(126, 175, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3\" (RGB 175,0,175).\n        /// </summary>\n        public static Color Magenta3 { get; } = new Color(127, 175, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkViolet_1\" (RGB 175,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkViolet_1 { get; } = new Color(128, 175, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Purple_2\" (RGB 175,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_2 { get; } = new Color(129, 175, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange3\" (RGB 175,95,0).\n        /// </summary>\n        public static Color DarkOrange3 { get; } = new Color(130, 175, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed\" (RGB 175,95,95).\n        /// </summary>\n        public static Color IndianRed { get; } = new Color(131, 175, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"HotPink3\" (RGB 175,95,135).\n        /// </summary>\n        public static Color HotPink3 { get; } = new Color(132, 175, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid3\" (RGB 175,95,175).\n        /// </summary>\n        public static Color MediumOrchid3 { get; } = new Color(133, 175, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid\" (RGB 175,95,215).\n        /// </summary>\n        public static Color MediumOrchid { get; } = new Color(134, 175, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple2\" (RGB 175,95,255).\n        /// </summary>\n        public static Color MediumPurple2 { get; } = new Color(135, 175, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkGoldenrod\" (RGB 175,135,0).\n        /// </summary>\n        public static Color DarkGoldenrod { get; } = new Color(136, 175, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon3\" (RGB 175,135,95).\n        /// </summary>\n        public static Color LightSalmon3 { get; } = new Color(137, 175, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"RosyBrown\" (RGB 175,135,135).\n        /// </summary>\n        public static Color RosyBrown { get; } = new Color(138, 175, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Grey63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Grey63 { get; } = new Color(139, 175, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Gray63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Gray63 { get; } = new Color(139, 175, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple2_1\" (RGB 175,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple2_1 { get; } = new Color(140, 175, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumPurple1\" (RGB 175,135,255).\n        /// </summary>\n        public static Color MediumPurple1 { get; } = new Color(141, 175, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold3\" (RGB 175,175,0).\n        /// </summary>\n        public static Color Gold3 { get; } = new Color(142, 175, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkKhaki\" (RGB 175,175,95).\n        /// </summary>\n        public static Color DarkKhaki { get; } = new Color(143, 175, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"NavajoWhite3\" (RGB 175,175,135).\n        /// </summary>\n        public static Color NavajoWhite3 { get; } = new Color(144, 175, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"Grey69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Grey69 { get; } = new Color(145, 175, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Gray69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Gray69 { get; } = new Color(145, 175, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue3\" (RGB 175,175,215).\n        /// </summary>\n        public static Color LightSteelBlue3 { get; } = new Color(146, 175, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue\" (RGB 175,175,255).\n        /// </summary>\n        public static Color LightSteelBlue { get; } = new Color(147, 175, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow3\" (RGB 175,215,0).\n        /// </summary>\n        public static Color Yellow3 { get; } = new Color(148, 175, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_2\" (RGB 175,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_2 { get; } = new Color(149, 175, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3_1\" (RGB 175,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen3_1 { get; } = new Color(150, 175, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2\" (RGB 175,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen2 { get; } = new Color(151, 175, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"LightCyan3\" (RGB 175,215,215).\n        /// </summary>\n        public static Color LightCyan3 { get; } = new Color(152, 175, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSkyBlue1\" (RGB 175,215,255).\n        /// </summary>\n        public static Color LightSkyBlue1 { get; } = new Color(153, 175, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"GreenYellow\" (RGB 175,255,0).\n        /// </summary>\n        public static Color GreenYellow { get; } = new Color(154, 175, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen2\" (RGB 175,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen2 { get; } = new Color(155, 175, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"PaleGreen1_1\" (RGB 175,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen1_1 { get; } = new Color(156, 175, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2_1\" (RGB 175,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen2_1 { get; } = new Color(157, 175, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1\" (RGB 175,255,215).\n        /// </summary>\n        public static Color DarkSeaGreen1 { get; } = new Color(158, 175, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"PaleTurquoise1\" (RGB 175,255,255).\n        /// </summary>\n        public static Color PaleTurquoise1 { get; } = new Color(159, 175, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red3_1\" (RGB 215,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Red3_1 { get; } = new Color(160, 215, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink3\" (RGB 215,0,95).\n        /// </summary>\n        public static Color DeepPink3 { get; } = new Color(161, 215, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink3_1\" (RGB 215,0,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink3_1 { get; } = new Color(162, 215, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3_1\" (RGB 215,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_1 { get; } = new Color(163, 215, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Magenta3_2\" (RGB 215,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_2 { get; } = new Color(164, 215, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Magenta2\" (RGB 215,0,255).\n        /// </summary>\n        public static Color Magenta2 { get; } = new Color(165, 215, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange3_1\" (RGB 215,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOrange3_1 { get; } = new Color(166, 215, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed_1\" (RGB 215,95,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed_1 { get; } = new Color(167, 215, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"HotPink3_1\" (RGB 215,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink3_1 { get; } = new Color(168, 215, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"HotPink2\" (RGB 215,95,175).\n        /// </summary>\n        public static Color HotPink2 { get; } = new Color(169, 215, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"Orchid\" (RGB 215,95,215).\n        /// </summary>\n        public static Color Orchid { get; } = new Color(170, 215, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid1\" (RGB 215,95,255).\n        /// </summary>\n        public static Color MediumOrchid1 { get; } = new Color(171, 215, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange3\" (RGB 215,135,0).\n        /// </summary>\n        public static Color Orange3 { get; } = new Color(172, 215, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon3_1\" (RGB 215,135,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSalmon3_1 { get; } = new Color(173, 215, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightPink3\" (RGB 215,135,135).\n        /// </summary>\n        public static Color LightPink3 { get; } = new Color(174, 215, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"Pink3\" (RGB 215,135,175).\n        /// </summary>\n        public static Color Pink3 { get; } = new Color(175, 215, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Plum3\" (RGB 215,135,215).\n        /// </summary>\n        public static Color Plum3 { get; } = new Color(176, 215, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"Violet\" (RGB 215,135,255).\n        /// </summary>\n        public static Color Violet { get; } = new Color(177, 215, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold3_1\" (RGB 215,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Gold3_1 { get; } = new Color(178, 215, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod3\" (RGB 215,175,95).\n        /// </summary>\n        public static Color LightGoldenrod3 { get; } = new Color(179, 215, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"Tan\" (RGB 215,175,135).\n        /// </summary>\n        public static Color Tan { get; } = new Color(180, 215, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"MistyRose3\" (RGB 215,175,175).\n        /// </summary>\n        public static Color MistyRose3 { get; } = new Color(181, 215, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Thistle3\" (RGB 215,175,215).\n        /// </summary>\n        public static Color Thistle3 { get; } = new Color(182, 215, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"Plum2\" (RGB 215,175,255).\n        /// </summary>\n        public static Color Plum2 { get; } = new Color(183, 215, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow3_1\" (RGB 215,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow3_1 { get; } = new Color(184, 215, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"Khaki3\" (RGB 215,215,95).\n        /// </summary>\n        public static Color Khaki3 { get; } = new Color(185, 215, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2\" (RGB 215,215,135).\n        /// </summary>\n        public static Color LightGoldenrod2 { get; } = new Color(186, 215, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightYellow3\" (RGB 215,215,175).\n        /// </summary>\n        public static Color LightYellow3 { get; } = new Color(187, 215, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"Grey84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Grey84 { get; } = new Color(188, 215, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Gray84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Gray84 { get; } = new Color(188, 215, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightSteelBlue1\" (RGB 215,215,255).\n        /// </summary>\n        public static Color LightSteelBlue1 { get; } = new Color(189, 215, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow2\" (RGB 215,255,0).\n        /// </summary>\n        public static Color Yellow2 { get; } = new Color(190, 215, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1\" (RGB 215,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen1 { get; } = new Color(191, 215, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1_1\" (RGB 215,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen1_1 { get; } = new Color(192, 215, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1_1\" (RGB 215,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen1_1 { get; } = new Color(193, 215, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Honeydew2\" (RGB 215,255,215).\n        /// </summary>\n        public static Color Honeydew2 { get; } = new Color(194, 215, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"LightCyan1\" (RGB 215,255,255).\n        /// </summary>\n        public static Color LightCyan1 { get; } = new Color(195, 215, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Red1\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red1 { get; } = new Color(196, 255, 0, 0);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink2\" (RGB 255,0,95).\n        /// </summary>\n        public static Color DeepPink2 { get; } = new Color(197, 255, 0, 95);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink1\" (RGB 255,0,135).\n        /// </summary>\n        public static Color DeepPink1 { get; } = new Color(198, 255, 0, 135);\n        \n        /// <summary>\n        /// Gets the color \"DeepPink1_1\" (RGB 255,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink1_1 { get; } = new Color(199, 255, 0, 175);\n        \n        /// <summary>\n        /// Gets the color \"Magenta2_1\" (RGB 255,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta2_1 { get; } = new Color(200, 255, 0, 215);\n        \n        /// <summary>\n        /// Gets the color \"Magenta1\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta1 { get; } = new Color(201, 255, 0, 255);\n        \n        /// <summary>\n        /// Gets the color \"OrangeRed1\" (RGB 255,95,0).\n        /// </summary>\n        public static Color OrangeRed1 { get; } = new Color(202, 255, 95, 0);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed1\" (RGB 255,95,95).\n        /// </summary>\n        public static Color IndianRed1 { get; } = new Color(203, 255, 95, 95);\n        \n        /// <summary>\n        /// Gets the color \"IndianRed1_1\" (RGB 255,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed1_1 { get; } = new Color(204, 255, 95, 135);\n        \n        /// <summary>\n        /// Gets the color \"HotPink\" (RGB 255,95,175).\n        /// </summary>\n        public static Color HotPink { get; } = new Color(205, 255, 95, 175);\n        \n        /// <summary>\n        /// Gets the color \"HotPink_1\" (RGB 255,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink_1 { get; } = new Color(206, 255, 95, 215);\n        \n        /// <summary>\n        /// Gets the color \"MediumOrchid1_1\" (RGB 255,95,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumOrchid1_1 { get; } = new Color(207, 255, 95, 255);\n        \n        /// <summary>\n        /// Gets the color \"DarkOrange\" (RGB 255,135,0).\n        /// </summary>\n        public static Color DarkOrange { get; } = new Color(208, 255, 135, 0);\n        \n        /// <summary>\n        /// Gets the color \"Salmon1\" (RGB 255,135,95).\n        /// </summary>\n        public static Color Salmon1 { get; } = new Color(209, 255, 135, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightCoral\" (RGB 255,135,135).\n        /// </summary>\n        public static Color LightCoral { get; } = new Color(210, 255, 135, 135);\n        \n        /// <summary>\n        /// Gets the color \"PaleVioletRed1\" (RGB 255,135,175).\n        /// </summary>\n        public static Color PaleVioletRed1 { get; } = new Color(211, 255, 135, 175);\n        \n        /// <summary>\n        /// Gets the color \"Orchid2\" (RGB 255,135,215).\n        /// </summary>\n        public static Color Orchid2 { get; } = new Color(212, 255, 135, 215);\n        \n        /// <summary>\n        /// Gets the color \"Orchid1\" (RGB 255,135,255).\n        /// </summary>\n        public static Color Orchid1 { get; } = new Color(213, 255, 135, 255);\n        \n        /// <summary>\n        /// Gets the color \"Orange1\" (RGB 255,175,0).\n        /// </summary>\n        public static Color Orange1 { get; } = new Color(214, 255, 175, 0);\n        \n        /// <summary>\n        /// Gets the color \"SandyBrown\" (RGB 255,175,95).\n        /// </summary>\n        public static Color SandyBrown { get; } = new Color(215, 255, 175, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightSalmon1\" (RGB 255,175,135).\n        /// </summary>\n        public static Color LightSalmon1 { get; } = new Color(216, 255, 175, 135);\n        \n        /// <summary>\n        /// Gets the color \"LightPink1\" (RGB 255,175,175).\n        /// </summary>\n        public static Color LightPink1 { get; } = new Color(217, 255, 175, 175);\n        \n        /// <summary>\n        /// Gets the color \"Pink1\" (RGB 255,175,215).\n        /// </summary>\n        public static Color Pink1 { get; } = new Color(218, 255, 175, 215);\n        \n        /// <summary>\n        /// Gets the color \"Plum1\" (RGB 255,175,255).\n        /// </summary>\n        public static Color Plum1 { get; } = new Color(219, 255, 175, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gold1\" (RGB 255,215,0).\n        /// </summary>\n        public static Color Gold1 { get; } = new Color(220, 255, 215, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_1\" (RGB 255,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_1 { get; } = new Color(221, 255, 215, 95);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_2\" (RGB 255,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_2 { get; } = new Color(222, 255, 215, 135);\n        \n        /// <summary>\n        /// Gets the color \"NavajoWhite1\" (RGB 255,215,175).\n        /// </summary>\n        public static Color NavajoWhite1 { get; } = new Color(223, 255, 215, 175);\n        \n        /// <summary>\n        /// Gets the color \"MistyRose1\" (RGB 255,215,215).\n        /// </summary>\n        public static Color MistyRose1 { get; } = new Color(224, 255, 215, 215);\n        \n        /// <summary>\n        /// Gets the color \"Thistle1\" (RGB 255,215,255).\n        /// </summary>\n        public static Color Thistle1 { get; } = new Color(225, 255, 215, 255);\n        \n        /// <summary>\n        /// Gets the color \"Yellow1\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow1 { get; } = new Color(226, 255, 255, 0);\n        \n        /// <summary>\n        /// Gets the color \"LightGoldenrod1\" (RGB 255,255,95).\n        /// </summary>\n        public static Color LightGoldenrod1 { get; } = new Color(227, 255, 255, 95);\n        \n        /// <summary>\n        /// Gets the color \"Khaki1\" (RGB 255,255,135).\n        /// </summary>\n        public static Color Khaki1 { get; } = new Color(228, 255, 255, 135);\n        \n        /// <summary>\n        /// Gets the color \"Wheat1\" (RGB 255,255,175).\n        /// </summary>\n        public static Color Wheat1 { get; } = new Color(229, 255, 255, 175);\n        \n        /// <summary>\n        /// Gets the color \"Cornsilk1\" (RGB 255,255,215).\n        /// </summary>\n        public static Color Cornsilk1 { get; } = new Color(230, 255, 255, 215);\n        \n        /// <summary>\n        /// Gets the color \"Grey100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Grey100 { get; } = new Color(231, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Gray100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Gray100 { get; } = new Color(231, 255, 255, 255);\n        \n        /// <summary>\n        /// Gets the color \"Grey3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Grey3 { get; } = new Color(232, 8, 8, 8);\n        \n        /// <summary>\n        /// Gets the color \"Gray3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Gray3 { get; } = new Color(232, 8, 8, 8);\n        \n        /// <summary>\n        /// Gets the color \"Grey7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Grey7 { get; } = new Color(233, 18, 18, 18);\n        \n        /// <summary>\n        /// Gets the color \"Gray7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Gray7 { get; } = new Color(233, 18, 18, 18);\n        \n        /// <summary>\n        /// Gets the color \"Grey11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Grey11 { get; } = new Color(234, 28, 28, 28);\n        \n        /// <summary>\n        /// Gets the color \"Gray11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Gray11 { get; } = new Color(234, 28, 28, 28);\n        \n        /// <summary>\n        /// Gets the color \"Grey15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Grey15 { get; } = new Color(235, 38, 38, 38);\n        \n        /// <summary>\n        /// Gets the color \"Gray15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Gray15 { get; } = new Color(235, 38, 38, 38);\n        \n        /// <summary>\n        /// Gets the color \"Grey19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Grey19 { get; } = new Color(236, 48, 48, 48);\n        \n        /// <summary>\n        /// Gets the color \"Gray19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Gray19 { get; } = new Color(236, 48, 48, 48);\n        \n        /// <summary>\n        /// Gets the color \"Grey23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Grey23 { get; } = new Color(237, 58, 58, 58);\n        \n        /// <summary>\n        /// Gets the color \"Gray23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Gray23 { get; } = new Color(237, 58, 58, 58);\n        \n        /// <summary>\n        /// Gets the color \"Grey27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Grey27 { get; } = new Color(238, 68, 68, 68);\n        \n        /// <summary>\n        /// Gets the color \"Gray27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Gray27 { get; } = new Color(238, 68, 68, 68);\n        \n        /// <summary>\n        /// Gets the color \"Grey30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Grey30 { get; } = new Color(239, 78, 78, 78);\n        \n        /// <summary>\n        /// Gets the color \"Gray30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Gray30 { get; } = new Color(239, 78, 78, 78);\n        \n        /// <summary>\n        /// Gets the color \"Grey35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Grey35 { get; } = new Color(240, 88, 88, 88);\n        \n        /// <summary>\n        /// Gets the color \"Gray35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Gray35 { get; } = new Color(240, 88, 88, 88);\n        \n        /// <summary>\n        /// Gets the color \"Grey39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Grey39 { get; } = new Color(241, 98, 98, 98);\n        \n        /// <summary>\n        /// Gets the color \"Gray39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Gray39 { get; } = new Color(241, 98, 98, 98);\n        \n        /// <summary>\n        /// Gets the color \"Grey42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Grey42 { get; } = new Color(242, 108, 108, 108);\n        \n        /// <summary>\n        /// Gets the color \"Gray42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Gray42 { get; } = new Color(242, 108, 108, 108);\n        \n        /// <summary>\n        /// Gets the color \"Grey46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Grey46 { get; } = new Color(243, 118, 118, 118);\n        \n        /// <summary>\n        /// Gets the color \"Gray46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Gray46 { get; } = new Color(243, 118, 118, 118);\n        \n        /// <summary>\n        /// Gets the color \"Grey50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey50 { get; } = new Color(244, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Gray50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray50 { get; } = new Color(244, 128, 128, 128);\n        \n        /// <summary>\n        /// Gets the color \"Grey54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Grey54 { get; } = new Color(245, 138, 138, 138);\n        \n        /// <summary>\n        /// Gets the color \"Gray54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Gray54 { get; } = new Color(245, 138, 138, 138);\n        \n        /// <summary>\n        /// Gets the color \"Grey58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Grey58 { get; } = new Color(246, 148, 148, 148);\n        \n        /// <summary>\n        /// Gets the color \"Gray58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Gray58 { get; } = new Color(246, 148, 148, 148);\n        \n        /// <summary>\n        /// Gets the color \"Grey62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Grey62 { get; } = new Color(247, 158, 158, 158);\n        \n        /// <summary>\n        /// Gets the color \"Gray62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Gray62 { get; } = new Color(247, 158, 158, 158);\n        \n        /// <summary>\n        /// Gets the color \"Grey66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Grey66 { get; } = new Color(248, 168, 168, 168);\n        \n        /// <summary>\n        /// Gets the color \"Gray66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Gray66 { get; } = new Color(248, 168, 168, 168);\n        \n        /// <summary>\n        /// Gets the color \"Grey70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Grey70 { get; } = new Color(249, 178, 178, 178);\n        \n        /// <summary>\n        /// Gets the color \"Gray70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Gray70 { get; } = new Color(249, 178, 178, 178);\n        \n        /// <summary>\n        /// Gets the color \"Grey74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Grey74 { get; } = new Color(250, 188, 188, 188);\n        \n        /// <summary>\n        /// Gets the color \"Gray74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Gray74 { get; } = new Color(250, 188, 188, 188);\n        \n        /// <summary>\n        /// Gets the color \"Grey78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Grey78 { get; } = new Color(251, 198, 198, 198);\n        \n        /// <summary>\n        /// Gets the color \"Gray78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Gray78 { get; } = new Color(251, 198, 198, 198);\n        \n        /// <summary>\n        /// Gets the color \"Grey82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Grey82 { get; } = new Color(252, 208, 208, 208);\n        \n        /// <summary>\n        /// Gets the color \"Gray82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Gray82 { get; } = new Color(252, 208, 208, 208);\n        \n        /// <summary>\n        /// Gets the color \"Grey85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Grey85 { get; } = new Color(253, 218, 218, 218);\n        \n        /// <summary>\n        /// Gets the color \"Gray85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Gray85 { get; } = new Color(253, 218, 218, 218);\n        \n        /// <summary>\n        /// Gets the color \"Grey89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Grey89 { get; } = new Color(254, 228, 228, 228);\n        \n        /// <summary>\n        /// Gets the color \"Gray89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Gray89 { get; } = new Color(254, 228, 228, 228);\n        \n        /// <summary>\n        /// Gets the color \"Grey93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Grey93 { get; } = new Color(255, 238, 238, 238);\n        \n        /// <summary>\n        /// Gets the color \"Gray93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Gray93 { get; } = new Color(255, 238, 238, 238);\n        \n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/ColorPalette.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    internal static partial class ColorPalette\n    {\n        private static List<Color> GenerateLegacyPalette()\n        {\n            return new List<Color>\n            {\n                Color.Black,\n                Color.Maroon,\n                Color.Green,\n                Color.Olive,\n                Color.Navy,\n                Color.Purple,\n                Color.Teal,\n                Color.Silver,\n            };\n        }\n        \n        private static List<Color> GenerateStandardPalette(IReadOnlyList<Color> legacy)\n        {\n            return new List<Color>(legacy)\n            {\n                Color.Grey,\n                Color.Red,\n                Color.Lime,\n                Color.Yellow,\n                Color.Blue,\n                Color.Fuchsia,\n                Color.Aqua,\n                Color.White,\n            };\n        }\n        \n        private static List<Color> GenerateEightBitPalette(IReadOnlyList<Color> standard)\n        {\n            return new List<Color>(standard)\n            {\n                Color.Grey0,\n                Color.NavyBlue,\n                Color.DarkBlue,\n                Color.Blue3,\n                Color.Blue3_1,\n                Color.Blue1,\n                Color.DarkGreen,\n                Color.DeepSkyBlue4,\n                Color.DeepSkyBlue4_1,\n                Color.DeepSkyBlue4_2,\n                Color.DodgerBlue3,\n                Color.DodgerBlue2,\n                Color.Green4,\n                Color.SpringGreen4,\n                Color.Turquoise4,\n                Color.DeepSkyBlue3,\n                Color.DeepSkyBlue3_1,\n                Color.DodgerBlue1,\n                Color.Green3,\n                Color.SpringGreen3,\n                Color.DarkCyan,\n                Color.LightSeaGreen,\n                Color.DeepSkyBlue2,\n                Color.DeepSkyBlue1,\n                Color.Green3_1,\n                Color.SpringGreen3_1,\n                Color.SpringGreen2,\n                Color.Cyan3,\n                Color.DarkTurquoise,\n                Color.Turquoise2,\n                Color.Green1,\n                Color.SpringGreen2_1,\n                Color.SpringGreen1,\n                Color.MediumSpringGreen,\n                Color.Cyan2,\n                Color.Cyan1,\n                Color.DarkRed,\n                Color.DeepPink4,\n                Color.Purple4,\n                Color.Purple4_1,\n                Color.Purple3,\n                Color.BlueViolet,\n                Color.Orange4,\n                Color.Grey37,\n                Color.MediumPurple4,\n                Color.SlateBlue3,\n                Color.SlateBlue3_1,\n                Color.RoyalBlue1,\n                Color.Chartreuse4,\n                Color.DarkSeaGreen4,\n                Color.PaleTurquoise4,\n                Color.SteelBlue,\n                Color.SteelBlue3,\n                Color.CornflowerBlue,\n                Color.Chartreuse3,\n                Color.DarkSeaGreen4_1,\n                Color.CadetBlue,\n                Color.CadetBlue_1,\n                Color.SkyBlue3,\n                Color.SteelBlue1,\n                Color.Chartreuse3_1,\n                Color.PaleGreen3,\n                Color.SeaGreen3,\n                Color.Aquamarine3,\n                Color.MediumTurquoise,\n                Color.SteelBlue1_1,\n                Color.Chartreuse2,\n                Color.SeaGreen2,\n                Color.SeaGreen1,\n                Color.SeaGreen1_1,\n                Color.Aquamarine1,\n                Color.DarkSlateGray2,\n                Color.DarkRed_1,\n                Color.DeepPink4_1,\n                Color.DarkMagenta,\n                Color.DarkMagenta_1,\n                Color.DarkViolet,\n                Color.Purple_1,\n                Color.Orange4_1,\n                Color.LightPink4,\n                Color.Plum4,\n                Color.MediumPurple3,\n                Color.MediumPurple3_1,\n                Color.SlateBlue1,\n                Color.Yellow4,\n                Color.Wheat4,\n                Color.Grey53,\n                Color.LightSlateGrey,\n                Color.MediumPurple,\n                Color.LightSlateBlue,\n                Color.Yellow4_1,\n                Color.DarkOliveGreen3,\n                Color.DarkSeaGreen,\n                Color.LightSkyBlue3,\n                Color.LightSkyBlue3_1,\n                Color.SkyBlue2,\n                Color.Chartreuse2_1,\n                Color.DarkOliveGreen3_1,\n                Color.PaleGreen3_1,\n                Color.DarkSeaGreen3,\n                Color.DarkSlateGray3,\n                Color.SkyBlue1,\n                Color.Chartreuse1,\n                Color.LightGreen,\n                Color.LightGreen_1,\n                Color.PaleGreen1,\n                Color.Aquamarine1_1,\n                Color.DarkSlateGray1,\n                Color.Red3,\n                Color.DeepPink4_2,\n                Color.MediumVioletRed,\n                Color.Magenta3,\n                Color.DarkViolet_1,\n                Color.Purple_2,\n                Color.DarkOrange3,\n                Color.IndianRed,\n                Color.HotPink3,\n                Color.MediumOrchid3,\n                Color.MediumOrchid,\n                Color.MediumPurple2,\n                Color.DarkGoldenrod,\n                Color.LightSalmon3,\n                Color.RosyBrown,\n                Color.Grey63,\n                Color.MediumPurple2_1,\n                Color.MediumPurple1,\n                Color.Gold3,\n                Color.DarkKhaki,\n                Color.NavajoWhite3,\n                Color.Grey69,\n                Color.LightSteelBlue3,\n                Color.LightSteelBlue,\n                Color.Yellow3,\n                Color.DarkOliveGreen3_2,\n                Color.DarkSeaGreen3_1,\n                Color.DarkSeaGreen2,\n                Color.LightCyan3,\n                Color.LightSkyBlue1,\n                Color.GreenYellow,\n                Color.DarkOliveGreen2,\n                Color.PaleGreen1_1,\n                Color.DarkSeaGreen2_1,\n                Color.DarkSeaGreen1,\n                Color.PaleTurquoise1,\n                Color.Red3_1,\n                Color.DeepPink3,\n                Color.DeepPink3_1,\n                Color.Magenta3_1,\n                Color.Magenta3_2,\n                Color.Magenta2,\n                Color.DarkOrange3_1,\n                Color.IndianRed_1,\n                Color.HotPink3_1,\n                Color.HotPink2,\n                Color.Orchid,\n                Color.MediumOrchid1,\n                Color.Orange3,\n                Color.LightSalmon3_1,\n                Color.LightPink3,\n                Color.Pink3,\n                Color.Plum3,\n                Color.Violet,\n                Color.Gold3_1,\n                Color.LightGoldenrod3,\n                Color.Tan,\n                Color.MistyRose3,\n                Color.Thistle3,\n                Color.Plum2,\n                Color.Yellow3_1,\n                Color.Khaki3,\n                Color.LightGoldenrod2,\n                Color.LightYellow3,\n                Color.Grey84,\n                Color.LightSteelBlue1,\n                Color.Yellow2,\n                Color.DarkOliveGreen1,\n                Color.DarkOliveGreen1_1,\n                Color.DarkSeaGreen1_1,\n                Color.Honeydew2,\n                Color.LightCyan1,\n                Color.Red1,\n                Color.DeepPink2,\n                Color.DeepPink1,\n                Color.DeepPink1_1,\n                Color.Magenta2_1,\n                Color.Magenta1,\n                Color.OrangeRed1,\n                Color.IndianRed1,\n                Color.IndianRed1_1,\n                Color.HotPink,\n                Color.HotPink_1,\n                Color.MediumOrchid1_1,\n                Color.DarkOrange,\n                Color.Salmon1,\n                Color.LightCoral,\n                Color.PaleVioletRed1,\n                Color.Orchid2,\n                Color.Orchid1,\n                Color.Orange1,\n                Color.SandyBrown,\n                Color.LightSalmon1,\n                Color.LightPink1,\n                Color.Pink1,\n                Color.Plum1,\n                Color.Gold1,\n                Color.LightGoldenrod2_1,\n                Color.LightGoldenrod2_2,\n                Color.NavajoWhite1,\n                Color.MistyRose1,\n                Color.Thistle1,\n                Color.Yellow1,\n                Color.LightGoldenrod1,\n                Color.Khaki1,\n                Color.Wheat1,\n                Color.Cornsilk1,\n                Color.Grey100,\n                Color.Grey3,\n                Color.Grey7,\n                Color.Grey11,\n                Color.Grey15,\n                Color.Grey19,\n                Color.Grey23,\n                Color.Grey27,\n                Color.Grey30,\n                Color.Grey35,\n                Color.Grey39,\n                Color.Grey42,\n                Color.Grey46,\n                Color.Grey50,\n                Color.Grey54,\n                Color.Grey58,\n                Color.Grey62,\n                Color.Grey66,\n                Color.Grey70,\n                Color.Grey74,\n                Color.Grey78,\n                Color.Grey82,\n                Color.Grey85,\n                Color.Grey89,\n                Color.Grey93,\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Generated/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.Colors.ColorGenerator/ColorTable.Generated.g.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console\n{\n    internal static partial class ColorTable\n    {\n        private static Dictionary<string, int> GenerateTable()\n        {\n            return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)\n            {\n                { \"black\", 0 },\n                { \"maroon\", 1 },\n                { \"green\", 2 },\n                { \"olive\", 3 },\n                { \"navy\", 4 },\n                { \"purple\", 5 },\n                { \"teal\", 6 },\n                { \"silver\", 7 },\n                { \"grey\", 8 },\n                { \"gray\", 8 },\n                { \"red\", 9 },\n                { \"lime\", 10 },\n                { \"yellow\", 11 },\n                { \"blue\", 12 },\n                { \"fuchsia\", 13 },\n                { \"magenta\", 13 },\n                { \"aqua\", 14 },\n                { \"cyan\", 14 },\n                { \"white\", 15 },\n                { \"grey0\", 16 },\n                { \"gray0\", 16 },\n                { \"navyblue\", 17 },\n                { \"darkblue\", 18 },\n                { \"blue3\", 19 },\n                { \"blue3_1\", 20 },\n                { \"blue1\", 21 },\n                { \"darkgreen\", 22 },\n                { \"deepskyblue4\", 23 },\n                { \"deepskyblue4_1\", 24 },\n                { \"deepskyblue4_2\", 25 },\n                { \"dodgerblue3\", 26 },\n                { \"dodgerblue2\", 27 },\n                { \"green4\", 28 },\n                { \"springgreen4\", 29 },\n                { \"turquoise4\", 30 },\n                { \"deepskyblue3\", 31 },\n                { \"deepskyblue3_1\", 32 },\n                { \"dodgerblue1\", 33 },\n                { \"green3\", 34 },\n                { \"springgreen3\", 35 },\n                { \"darkcyan\", 36 },\n                { \"lightseagreen\", 37 },\n                { \"deepskyblue2\", 38 },\n                { \"deepskyblue1\", 39 },\n                { \"green3_1\", 40 },\n                { \"springgreen3_1\", 41 },\n                { \"springgreen2\", 42 },\n                { \"cyan3\", 43 },\n                { \"darkturquoise\", 44 },\n                { \"turquoise2\", 45 },\n                { \"green1\", 46 },\n                { \"springgreen2_1\", 47 },\n                { \"springgreen1\", 48 },\n                { \"mediumspringgreen\", 49 },\n                { \"cyan2\", 50 },\n                { \"cyan1\", 51 },\n                { \"darkred\", 52 },\n                { \"deeppink4\", 53 },\n                { \"purple4\", 54 },\n                { \"purple4_1\", 55 },\n                { \"purple3\", 56 },\n                { \"blueviolet\", 57 },\n                { \"orange4\", 58 },\n                { \"grey37\", 59 },\n                { \"gray37\", 59 },\n                { \"mediumpurple4\", 60 },\n                { \"slateblue3\", 61 },\n                { \"slateblue3_1\", 62 },\n                { \"royalblue1\", 63 },\n                { \"chartreuse4\", 64 },\n                { \"darkseagreen4\", 65 },\n                { \"paleturquoise4\", 66 },\n                { \"steelblue\", 67 },\n                { \"steelblue3\", 68 },\n                { \"cornflowerblue\", 69 },\n                { \"chartreuse3\", 70 },\n                { \"darkseagreen4_1\", 71 },\n                { \"cadetblue\", 72 },\n                { \"cadetblue_1\", 73 },\n                { \"skyblue3\", 74 },\n                { \"steelblue1\", 75 },\n                { \"chartreuse3_1\", 76 },\n                { \"palegreen3\", 77 },\n                { \"seagreen3\", 78 },\n                { \"aquamarine3\", 79 },\n                { \"mediumturquoise\", 80 },\n                { \"steelblue1_1\", 81 },\n                { \"chartreuse2\", 82 },\n                { \"seagreen2\", 83 },\n                { \"seagreen1\", 84 },\n                { \"seagreen1_1\", 85 },\n                { \"aquamarine1\", 86 },\n                { \"darkslategray2\", 87 },\n                { \"darkred_1\", 88 },\n                { \"deeppink4_1\", 89 },\n                { \"darkmagenta\", 90 },\n                { \"darkmagenta_1\", 91 },\n                { \"darkviolet\", 92 },\n                { \"purple_1\", 93 },\n                { \"orange4_1\", 94 },\n                { \"lightpink4\", 95 },\n                { \"plum4\", 96 },\n                { \"mediumpurple3\", 97 },\n                { \"mediumpurple3_1\", 98 },\n                { \"slateblue1\", 99 },\n                { \"yellow4\", 100 },\n                { \"wheat4\", 101 },\n                { \"grey53\", 102 },\n                { \"gray53\", 102 },\n                { \"lightslategrey\", 103 },\n                { \"mediumpurple\", 104 },\n                { \"lightslateblue\", 105 },\n                { \"yellow4_1\", 106 },\n                { \"darkolivegreen3\", 107 },\n                { \"darkseagreen\", 108 },\n                { \"lightskyblue3\", 109 },\n                { \"lightskyblue3_1\", 110 },\n                { \"skyblue2\", 111 },\n                { \"chartreuse2_1\", 112 },\n                { \"darkolivegreen3_1\", 113 },\n                { \"palegreen3_1\", 114 },\n                { \"darkseagreen3\", 115 },\n                { \"darkslategray3\", 116 },\n                { \"skyblue1\", 117 },\n                { \"chartreuse1\", 118 },\n                { \"lightgreen\", 119 },\n                { \"lightgreen_1\", 120 },\n                { \"palegreen1\", 121 },\n                { \"aquamarine1_1\", 122 },\n                { \"darkslategray1\", 123 },\n                { \"red3\", 124 },\n                { \"deeppink4_2\", 125 },\n                { \"mediumvioletred\", 126 },\n                { \"magenta3\", 127 },\n                { \"darkviolet_1\", 128 },\n                { \"purple_2\", 129 },\n                { \"darkorange3\", 130 },\n                { \"indianred\", 131 },\n                { \"hotpink3\", 132 },\n                { \"mediumorchid3\", 133 },\n                { \"mediumorchid\", 134 },\n                { \"mediumpurple2\", 135 },\n                { \"darkgoldenrod\", 136 },\n                { \"lightsalmon3\", 137 },\n                { \"rosybrown\", 138 },\n                { \"grey63\", 139 },\n                { \"gray63\", 139 },\n                { \"mediumpurple2_1\", 140 },\n                { \"mediumpurple1\", 141 },\n                { \"gold3\", 142 },\n                { \"darkkhaki\", 143 },\n                { \"navajowhite3\", 144 },\n                { \"grey69\", 145 },\n                { \"gray69\", 145 },\n                { \"lightsteelblue3\", 146 },\n                { \"lightsteelblue\", 147 },\n                { \"yellow3\", 148 },\n                { \"darkolivegreen3_2\", 149 },\n                { \"darkseagreen3_1\", 150 },\n                { \"darkseagreen2\", 151 },\n                { \"lightcyan3\", 152 },\n                { \"lightskyblue1\", 153 },\n                { \"greenyellow\", 154 },\n                { \"darkolivegreen2\", 155 },\n                { \"palegreen1_1\", 156 },\n                { \"darkseagreen2_1\", 157 },\n                { \"darkseagreen1\", 158 },\n                { \"paleturquoise1\", 159 },\n                { \"red3_1\", 160 },\n                { \"deeppink3\", 161 },\n                { \"deeppink3_1\", 162 },\n                { \"magenta3_1\", 163 },\n                { \"magenta3_2\", 164 },\n                { \"magenta2\", 165 },\n                { \"darkorange3_1\", 166 },\n                { \"indianred_1\", 167 },\n                { \"hotpink3_1\", 168 },\n                { \"hotpink2\", 169 },\n                { \"orchid\", 170 },\n                { \"mediumorchid1\", 171 },\n                { \"orange3\", 172 },\n                { \"lightsalmon3_1\", 173 },\n                { \"lightpink3\", 174 },\n                { \"pink3\", 175 },\n                { \"plum3\", 176 },\n                { \"violet\", 177 },\n                { \"gold3_1\", 178 },\n                { \"lightgoldenrod3\", 179 },\n                { \"tan\", 180 },\n                { \"mistyrose3\", 181 },\n                { \"thistle3\", 182 },\n                { \"plum2\", 183 },\n                { \"yellow3_1\", 184 },\n                { \"khaki3\", 185 },\n                { \"lightgoldenrod2\", 186 },\n                { \"lightyellow3\", 187 },\n                { \"grey84\", 188 },\n                { \"gray84\", 188 },\n                { \"lightsteelblue1\", 189 },\n                { \"yellow2\", 190 },\n                { \"darkolivegreen1\", 191 },\n                { \"darkolivegreen1_1\", 192 },\n                { \"darkseagreen1_1\", 193 },\n                { \"honeydew2\", 194 },\n                { \"lightcyan1\", 195 },\n                { \"red1\", 196 },\n                { \"deeppink2\", 197 },\n                { \"deeppink1\", 198 },\n                { \"deeppink1_1\", 199 },\n                { \"magenta2_1\", 200 },\n                { \"magenta1\", 201 },\n                { \"orangered1\", 202 },\n                { \"indianred1\", 203 },\n                { \"indianred1_1\", 204 },\n                { \"hotpink\", 205 },\n                { \"hotpink_1\", 206 },\n                { \"mediumorchid1_1\", 207 },\n                { \"darkorange\", 208 },\n                { \"salmon1\", 209 },\n                { \"lightcoral\", 210 },\n                { \"palevioletred1\", 211 },\n                { \"orchid2\", 212 },\n                { \"orchid1\", 213 },\n                { \"orange1\", 214 },\n                { \"sandybrown\", 215 },\n                { \"lightsalmon1\", 216 },\n                { \"lightpink1\", 217 },\n                { \"pink1\", 218 },\n                { \"plum1\", 219 },\n                { \"gold1\", 220 },\n                { \"lightgoldenrod2_1\", 221 },\n                { \"lightgoldenrod2_2\", 222 },\n                { \"navajowhite1\", 223 },\n                { \"mistyrose1\", 224 },\n                { \"thistle1\", 225 },\n                { \"yellow1\", 226 },\n                { \"lightgoldenrod1\", 227 },\n                { \"khaki1\", 228 },\n                { \"wheat1\", 229 },\n                { \"cornsilk1\", 230 },\n                { \"grey100\", 231 },\n                { \"gray100\", 231 },\n                { \"grey3\", 232 },\n                { \"gray3\", 232 },\n                { \"grey7\", 233 },\n                { \"gray7\", 233 },\n                { \"grey11\", 234 },\n                { \"gray11\", 234 },\n                { \"grey15\", 235 },\n                { \"gray15\", 235 },\n                { \"grey19\", 236 },\n                { \"gray19\", 236 },\n                { \"grey23\", 237 },\n                { \"gray23\", 237 },\n                { \"grey27\", 238 },\n                { \"gray27\", 238 },\n                { \"grey30\", 239 },\n                { \"gray30\", 239 },\n                { \"grey35\", 240 },\n                { \"gray35\", 240 },\n                { \"grey39\", 241 },\n                { \"gray39\", 241 },\n                { \"grey42\", 242 },\n                { \"gray42\", 242 },\n                { \"grey46\", 243 },\n                { \"gray46\", 243 },\n                { \"grey50\", 244 },\n                { \"gray50\", 244 },\n                { \"grey54\", 245 },\n                { \"gray54\", 245 },\n                { \"grey58\", 246 },\n                { \"gray58\", 246 },\n                { \"grey62\", 247 },\n                { \"gray62\", 247 },\n                { \"grey66\", 248 },\n                { \"gray66\", 248 },\n                { \"grey70\", 249 },\n                { \"gray70\", 249 },\n                { \"grey74\", 250 },\n                { \"gray74\", 250 },\n                { \"grey78\", 251 },\n                { \"gray78\", 251 },\n                { \"grey82\", 252 },\n                { \"gray82\", 252 },\n                { \"grey85\", 253 },\n                { \"gray85\", 253 },\n                { \"grey89\", 254 },\n                { \"gray89\", 254 },\n                { \"grey93\", 255 },\n                { \"gray93\", 255 },\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Link.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents a link.\n/// </summary>\n/// <param name=\"url\">The link URL.</param>\npublic sealed class Link(string url)\n{\n    /// <summary>\n    /// Gets the link ID.\n    /// </summary>\n    public int? Id { get; } = Random.Shared.Next(0, int.MaxValue);\n\n    /// <summary>\n    /// Gets the url.\n    /// </summary>\n    public string Url { get; } = url;\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Properties/Usings.cs",
    "content": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.ComponentModel;\nglobal using System.Diagnostics;\nglobal using System.Diagnostics.CodeAnalysis;\nglobal using System.Globalization;\nglobal using System.IO;\nglobal using System.Linq;\nglobal using System.Runtime.InteropServices;\nglobal using System.Text;\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Spectre.Console.Ansi.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>\n    <IsPackable>true</IsPackable>\n    <DefineConstants>$(DefineConstants)TRACE;WCWIDTH;WCWIDTH_VISIBILITY_INTERNAL</DefineConstants>\n    <IsAotCompatible Condition=\"'$(TargetFramework)' != 'netstandard2.0'\">true</IsAotCompatible>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>\n    <CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <!-- Exclude the output of source generators from the compilation -->\n    <Compile Remove=\"$(CompilerGeneratedFilesOutputPath)/**/*.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Wcwidth.Sources\" PrivateAssets=\"all\" />\n    <PackageReference Include=\"Polyfill\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup Label=\"Source Generator\">\n    <ProjectReference Include=\"..\\Spectre.Console.SourceGenerator\\Spectre.Console.SourceGenerator.csproj\" OutputItemType=\"Analyzer\" ReferenceOutputAssembly=\"false\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <AdditionalFiles Include=\"Data\\colors.json\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <InternalsVisibleTo Include=\"Spectre.Console.Tests\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Spectre.Console.Ansi/Style.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Represents color and text decoration.\n/// </summary>\npublic readonly record struct Style\n{\n    /// <summary>\n    /// Gets the foreground color.\n    /// </summary>\n    public Color Foreground { get; init; }\n\n    /// <summary>\n    /// Gets the background color.\n    /// </summary>\n    public Color Background { get; init; }\n\n    /// <summary>\n    /// Gets the text decoration.\n    /// </summary>\n    public Decoration Decoration { get; init; }\n\n    /// <summary>\n    /// Gets a <see cref=\"Style\"/> with the\n    /// default colors and without text decoration.\n    /// </summary>\n    public static Style Plain { get; } = new Style(null, null, null);\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Style\"/> class.\n    /// </summary>\n    public Style()\n    {\n        Foreground = Color.Default;\n        Background = Color.Default;\n        Decoration = Decoration.None;\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"Style\"/> class.\n    /// </summary>\n    /// <param name=\"foreground\">The foreground color.</param>\n    /// <param name=\"background\">The background color.</param>\n    /// <param name=\"decoration\">The text decoration.</param>\n    public Style(Color? foreground = null, Color? background = null, Decoration? decoration = null)\n    {\n        Foreground = foreground ?? Color.Default;\n        Background = background ?? Color.Default;\n        Decoration = decoration ?? Decoration.None;\n    }\n\n    /// <summary>\n    /// Combines this style with another one.\n    /// </summary>\n    /// <param name=\"other\">The item to combine with this.</param>\n    /// <returns>A new style representing a combination of this and the other one.</returns>\n    public Style Combine(Style other)\n    {\n        var foreground = Foreground;\n        if (!other.Foreground.IsDefault)\n        {\n            foreground = other.Foreground;\n        }\n\n        var background = Background;\n        if (!other.Background.IsDefault)\n        {\n            background = other.Background;\n        }\n\n        return new Style(foreground, background, Decoration | other.Decoration);\n    }\n\n    /// <summary>\n    /// Implicitly converts <see cref=\"string\"/> into a <see cref=\"Style\"/>.\n    /// </summary>\n    /// <param name=\"style\">The style string.</param>\n    public static implicit operator Style(string style)\n    {\n        return Parse(style);\n    }\n\n    /// <summary>\n    /// Implicitly converts <see cref=\"Color\"/> into a <see cref=\"Style\"/> with a foreground color.\n    /// </summary>\n    /// <param name=\"color\">The foreground color.</param>\n    public static implicit operator Style(Color color)\n    {\n        return new Style(foreground: color);\n    }\n\n    /// <summary>\n    /// Converts the string representation of a style to its <see cref=\"Style\"/> equivalent.\n    /// </summary>\n    /// <param name=\"text\">A string containing a style to parse.</param>\n    /// <returns>A <see cref=\"Style\"/> equivalent of the text contained in <paramref name=\"text\"/>.</returns>\n    public static Style Parse(string text)\n    {\n        var result = AnsiMarkupTagParser.Parse(text);\n        return result.Style;\n    }\n\n    /// <summary>\n    /// Converts the string representation of a style to its <see cref=\"Style\"/> equivalent.\n    /// A return value indicates whether the operation succeeded.\n    /// </summary>\n    /// <param name=\"text\">A string containing a style to parse.</param>\n    /// <param name=\"result\">\n    /// When this method returns, contains the <see cref=\"Style\"/> equivalent of the text contained in <paramref name=\"text\"/>,\n    /// if the conversion succeeded, or <c>null</c> if the conversion failed.\n    /// </param>\n    /// <returns><c>true</c> if s was converted successfully; otherwise, <c>false</c>.</returns>\n    public static bool TryParse(string text, out Style result)\n    {\n        if (AnsiMarkupTagParser.TryParse(text, out var parsed))\n        {\n            result = parsed.Value.Style;\n            return true;\n        }\n\n        result = Plain;\n        return false;\n    }\n\n    /// <inheritdoc/>\n    public override int GetHashCode()\n    {\n        unchecked\n        {\n            var hash = (int)2166136261;\n            hash = (hash * 16777619) ^ Foreground.GetHashCode();\n            hash = (hash * 16777619) ^ Background.GetHashCode();\n            hash = (hash * 16777619) ^ Decoration.GetHashCode();\n            return hash;\n        }\n    }\n\n    /// <summary>\n    /// Returns the markup representation of this style.\n    /// </summary>\n    /// <returns>The markup representation of this style.</returns>\n    public string ToMarkup()\n    {\n        var builder = new List<string>();\n\n        if (Decoration != Decoration.None)\n        {\n            var result = DecorationTable.GetMarkupNames(Decoration);\n            if (result.Count != 0)\n            {\n                builder.AddRange(result);\n            }\n        }\n\n        if (Foreground != Color.Default)\n        {\n            builder.Add(Foreground.ToMarkup());\n        }\n\n        if (Background != Color.Default)\n        {\n            if (builder.Count == 0)\n            {\n                builder.Add(\"default\");\n            }\n\n            builder.Add(\"on \" + Background.ToMarkup());\n        }\n\n        return string.Join(\" \", builder);\n    }\n}\n\n/// <summary>\n/// Contains extension methods for <see cref=\"Style\"/>.\n/// </summary>\npublic static class StyleExtensions\n{\n    /// <summary>\n    /// Creates a new style from the specified one with\n    /// the specified foreground color.\n    /// </summary>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"color\">The foreground color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Style Foreground(this Style style, Color color)\n    {\n        return new Style(\n            foreground: color,\n            background: style.Background,\n            decoration: style.Decoration);\n    }\n\n    /// <summary>\n    /// Creates a new style from the specified one with\n    /// the specified background color.\n    /// </summary>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"color\">The background color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Style Background(this Style style, Color color)\n    {\n        return new Style(\n            foreground: style.Foreground,\n            background: color,\n            decoration: style.Decoration);\n    }\n\n    /// <summary>\n    /// Creates a new style from the specified one with\n    /// the specified text decoration.\n    /// </summary>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"decoration\">The text decoration.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Style Decoration(this Style style, Decoration decoration)\n    {\n        return new Style(\n            foreground: style.Foreground,\n            background: style.Background,\n            decoration: decoration);\n    }\n\n    internal static Style Combine(this Style? style, IEnumerable<Style> source)\n    {\n        var current = style ?? Style.Plain;\n        foreach (var item in source)\n        {\n            current = current.Combine(item);\n        }\n\n        return current;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/ConsoleExtensions.cs",
    "content": "#if NET10_0_OR_GREATER\nusing System.Threading;\n\nnamespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"System.Console\"/>.\n/// </summary>\npublic static class SystemConsoleExtensions\n{\n    private static readonly Lock _lock = new();\n    private static AnsiWriter? _writer;\n    private static AnsiMarkup? _markup;\n\n    private static (AnsiWriter, AnsiMarkup) GetAnsiWriter()\n    {\n        _writer ??= new AnsiWriter(System.Console.Out);\n        _markup ??= new AnsiMarkup(_writer);\n        return (_writer, _markup);\n    }\n\n    extension(System.Console)\n    {\n        /// <summary>\n        /// Write ANSI, using the default <see cref=\"AnsiWriter\"/> instance.\n        /// </summary>\n        /// <param name=\"action\">The <see cref=\"AnsiWriter\"/> action</param>\n        public static void Ansi(Action<AnsiWriter> action)\n        {\n            lock (_lock)\n            {\n                var (writer, _) = GetAnsiWriter();\n                action(writer);\n            }\n        }\n\n        /// <summary>\n        /// Writes the specified markup to the console, using the default <see cref=\"AnsiWriter\"/> instance.\n        /// </summary>\n        /// <param name=\"markup\">The markup.</param>\n        public static void Markup(string markup)\n        {\n            lock (_lock)\n            {\n                var (_, writer) = GetAnsiWriter();\n                writer.Write(markup);\n            }\n        }\n\n        /// <summary>\n        /// Writes the specified markup to the console, followed by the current line terminator,\n        /// using the default <see cref=\"AnsiWriter\"/> instance.\n        /// </summary>\n        /// <param name=\"markup\">The markup.</param>\n        public static void MarkupLine(string markup)\n        {\n            lock (_lock)\n            {\n                var (_, writer) = GetAnsiWriter();\n                writer.WriteLine(markup);\n            }\n        }\n    }\n}\n#endif"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/EnumHelpers.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class EnumUtils\n{\n    public static T[] GetValues<T>()\n        where T : struct, Enum\n    {\n        return\n#if NET6_0_OR_GREATER\n            Enum.GetValues<T>();\n#else\n            (T[])Enum.GetValues(typeof(T));\n#endif\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/EnumerableExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class EnumerableExtensions\n{\n    public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)\n    {\n        foreach (var item in source)\n        {\n            action(item);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/StringBuffer.cs",
    "content": "namespace Spectre.Console;\n\ninternal sealed class StringBuffer : IDisposable\n{\n    private readonly StringReader _reader;\n    private readonly int _length;\n\n    public int Position { get; private set; }\n    public bool Eof => Position >= _length;\n\n    public StringBuffer(string text)\n    {\n        text ??= string.Empty;\n\n        _reader = new StringReader(text);\n        _length = text.Length;\n\n        Position = 0;\n    }\n\n    public void Dispose()\n    {\n        _reader.Dispose();\n    }\n\n    public char Peek()\n    {\n        if (Eof)\n        {\n            return '\\0';\n        }\n\n        return (char)_reader.Peek();\n    }\n\n    public char Read()\n    {\n        if (Eof)\n        {\n            return '\\0';\n        }\n\n        Position++;\n        return (char)_reader.Read();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/StringExtensions.cs",
    "content": "namespace Spectre.Console;\n\n/// <summary>\n/// Contains extension methods for <see cref=\"string\"/>.\n/// </summary>\npublic static class StringExtensions\n{\n    /// <summary>\n    /// Escapes text so that it won’t be interpreted as markup.\n    /// </summary>\n    /// <param name=\"text\">The text to escape.</param>\n    /// <returns>A string that is safe to use in markup.</returns>\n    public static string EscapeMarkup(this string? text)\n    {\n        return AnsiMarkup.Escape(text);\n    }\n\n    /// <summary>\n    /// Removes markup from the specified string.\n    /// </summary>\n    /// <param name=\"text\">The text to remove markup from.</param>\n    /// <returns>A string that does not have any markup.</returns>\n    public static string RemoveMarkup(this string? text)\n    {\n        return AnsiMarkup.Remove(text);\n    }\n\n    internal static string ReplaceExact(this string text, string oldValue, string? newValue)\n    {\n#if NETSTANDARD2_0\n        return text.Replace(oldValue, newValue);\n#else\n        return text.Replace(oldValue, newValue, StringComparison.Ordinal);\n#endif\n    }\n\n    internal static bool ContainsExact(this string text, string value)\n    {\n#if NETSTANDARD2_0\n        return text.Contains(value);\n#else\n        return text.Contains(value, StringComparison.Ordinal);\n#endif\n    }\n\n#if NETSTANDARD2_0\n    internal static bool Contains(this string target, string value, System.StringComparison comparisonType)\n    {\n        return target.IndexOf(value, comparisonType) != -1;\n    }\n#endif\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi/Utilities/TextWriterExtensions.cs",
    "content": "namespace Spectre.Console;\n\ninternal static class TextWriterExtensions\n{\n    public static bool IsStandardOut(this TextWriter writer)\n    {\n        try\n        {\n            return writer == System.Console.Out;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n\n    public static bool IsStandardError(this TextWriter writer)\n    {\n        try\n        {\n            return writer == System.Console.Error;\n        }\n        catch\n        {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/AnsiMarkupTests.cs",
    "content": "namespace Spectre.Console.Ansi.Tests;\n\npublic sealed class AnsiMarkupTests\n{\n    public sealed class TheParseMethod\n    {\n        [Theory]\n        [InlineData(\"[yellow]Hello[\", \"Encountered malformed markup tag at position 14.\")]\n        [InlineData(\"[yellow]Hello[/\", \"Encountered malformed markup tag at position 15.\")]\n        [InlineData(\"[yellow]Hello[/foo\", \"Encountered malformed markup tag at position 15.\")]\n        [InlineData(\"[yellow Hello\", \"Encountered malformed markup tag at position 13.\")]\n        [InlineData(\"[yellow[green]]Hello\", \"Encountered malformed markup tag at position 7.\")]\n        public void Should_Throw_If_Encounters_Malformed_Tag(string markup, string expected)\n        {\n            // Given, When\n            var result = Record.Exception(() => AnsiMarkup.Parse(markup));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Tags_Are_Unbalanced()\n        {\n            // Given, When\n            var result = Record.Exception(() => AnsiMarkup.Parse(\"[yellow][blue]Hello[/]\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Unbalanced markup stack. Did you forget to close a tag?\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Encounters_Closing_Tag()\n        {\n            // Given, When\n            var result = Record.Exception(() => AnsiMarkup.Parse(\"Hello[/]World\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Encountered closing tag when none was expected near position 5.\");\n        }\n    }\n\n    public sealed class TheEscapeMethod\n    {\n        [Theory]\n        [InlineData(\"Hello World\", \"Hello World\")]\n        [InlineData(\"Hello World [\", \"Hello World [[\")]\n        [InlineData(\"Hello World ]\", \"Hello World ]]\")]\n        [InlineData(\"Hello [World]\", \"Hello [[World]]\")]\n        [InlineData(\"Hello [[World]]\", \"Hello [[[[World]]]]\")]\n        public void Should_Escape_Markup_As_Expected(string input, string expected)\n        {\n            // Given, When\n            var result = AnsiMarkup.Escape(input);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheRemoveMethod\n    {\n        [Theory]\n        [InlineData(\"Hello World\", \"Hello World\")]\n        [InlineData(\"Hello [blue]World\", \"Hello World\")]\n        [InlineData(\"Hello [blue]World[/]\", \"Hello World\")]\n        [InlineData(\"[grey][[grey]][/][white][[white]][/]\", \"[grey][white]\")]\n        public void Should_Remove_Markup_From_Text(string input, string expected)\n        {\n            // Given, When\n            var result = AnsiMarkup.Remove(input);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheHighlightMethod\n    {\n        private readonly Style _highlightStyle =\n            new Style(foreground: Color.Default, background: Color.Yellow, Decoration.Bold);\n\n        [Fact]\n        public void Should_Return_Same_Value_When_SearchText_Is_Empty()\n        {\n            // Given\n            var value = \"Sample text\";\n            var searchText = string.Empty;\n            var highlightStyle = new Style();\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, highlightStyle);\n\n            // Then\n            result.ShouldBe(value);\n        }\n\n        [Fact]\n        public void Should_Highlight_Matched_Text()\n        {\n            // Given\n            var value = \"Sample text with test word\";\n            var searchText = \"test\";\n            var highlightStyle = _highlightStyle;\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, highlightStyle);\n\n            // Then\n            result.ShouldBe(\"Sample text with [bold on yellow]test[/] word\");\n        }\n\n        [Fact]\n        public void Should_Match_Text_Across_Tokens()\n        {\n            // Given\n            var value = \"[red]Sample text[/] with test word\";\n            var searchText = \"text with\";\n            var highlightStyle = _highlightStyle;\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, highlightStyle);\n\n            // Then\n            result.ShouldBe(\"[red]Sample [/][bold on yellow]text with[/] test word\");\n        }\n\n        [Fact]\n        public void Should_Highlight_Only_First_Matched_Text()\n        {\n            // Given\n            var value = \"Sample text with test word\";\n            var searchText = \"te\";\n            var highlightStyle = _highlightStyle;\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, highlightStyle);\n\n            // Then\n            result.ShouldBe(\"Sample [bold on yellow]te[/]xt with test word\");\n        }\n\n        [Fact]\n        public void Should_Not_Match_Text_Outside_Of_Text_Tokens()\n        {\n            // Given\n            var value = \"[red]Sample text with test word[/]\";\n            var searchText = \"red\";\n            var highlightStyle = _highlightStyle;\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, highlightStyle);\n\n            // Then\n            result.ShouldBe(value);\n        }\n\n        [Fact]\n        public void Should_Not_Corrupt_Escaped_Brackets_When_Highlighting()\n        {\n            // Given\n            var value = \"MSFT-Provisioning-01[[Prod]] (guid-2)\";\n            var searchText = \"M\";\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, _highlightStyle);\n\n            // Then\n            // The result should be valid markup that can be parsed without throwing\n            var exception = Record.Exception(() => AnsiMarkup.Parse(result));\n            exception.ShouldBeNull();\n        }\n\n        [Theory]\n        [InlineData(\"Hello [[World]]\", \"World\", \"Hello [[[bold on yellow]World[/]]]\")]\n        [InlineData(\"[[Prod]] Service\", \"Prod\", \"[[[bold on yellow]Prod[/]]] Service\")]\n        [InlineData(\"Item [[A]] and [[B]]\", \"A\", \"Item [[[bold on yellow]A[/]]] and [[B]]\")]\n        public void Should_Produce_Valid_Markup_With_Escaped_Brackets(\n            string value, string searchText, string expected)\n        {\n            // Given, When\n            var result = AnsiMarkup.Highlight(value, searchText, _highlightStyle);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Highlight_Text_Adjacent_To_Escaped_Brackets()\n        {\n            // Given\n            var value = \"MSFT[[Prod]]Service\";\n            var searchText = \"MSFT\";\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, _highlightStyle);\n\n            // Then\n            var exception = Record.Exception(() => AnsiMarkup.Parse(result));\n            exception.ShouldBeNull();\n            result.ShouldBe(\"[bold on yellow]MSFT[/][[Prod]]Service\");\n        }\n\n        [Fact]\n        public void Should_Highlight_Text_After_Escaped_Brackets()\n        {\n            // Given\n            var value = \"[[Dev]] Environment\";\n            var searchText = \"Env\";\n\n            // When\n            var result = AnsiMarkup.Highlight(value, searchText, _highlightStyle);\n\n            // Then\n            var exception = Record.Exception(() => AnsiMarkup.Parse(result));\n            exception.ShouldBeNull();\n            result.ShouldBe(\"[[Dev]] [bold on yellow]Env[/]ironment\");\n        }\n    }\n\n    public sealed class TheWriteMethod\n    {\n        [Fact]\n        public void Should_Escape_Markup_Blocks_As_Expected()\n        {\n            // Given\n            var fixture = new AnsiFixture();\n\n            // When\n            fixture.Markup.Write(\"Hello [[ World ]] !\");\n\n            // Then\n            fixture.Output\n                .ShouldBe(\"Hello [ World ] !\");\n        }\n\n        [Theory]\n        [InlineData(\"[yellow]Hello[/]\", \"\u001b[93mHello\u001b[0m\")]\n        [InlineData(\"[yellow]Hello [italic]World[/]![/]\", \"\u001b[93mHello \u001b[0m\u001b[3;93mWorld\u001b[0m\u001b[93m!\u001b[0m\")]\n        public void Should_Output_Expected_Ansi_For_Markup(string text, string expected)\n        {\n            // Given\n            var fixture = new AnsiFixture();\n            fixture.Capabilities.ColorSystem = ColorSystem.Standard;\n\n            // When\n            fixture.Markup.Write(text);\n\n            // Then\n            fixture.Output\n                .ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Url_And_Text()\n        {\n            // Given\n            var fixture = new AnsiFixture();\n\n            // When\n            fixture.Markup.Write(\"[link=https://patriksvensson.se]Click to visit my blog[/]\");\n\n            // Then\n            fixture.Output.ShouldMatch(\n                \"\u001b]8;id=[0-9]*;https:\\\\/\\\\/patriksvensson\\\\.se\u001b\\\\\\\\Click to visit my blog\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Only_Url()\n        {\n            // Given\n            var fixture = new AnsiFixture();\n\n            // When\n            fixture.Markup.Write(\"[link]https://patriksvensson.se[/]\");\n\n            // Then\n            fixture.Output.ShouldMatch(\n                \"\u001b]8;id=[0-9]*;https:\\\\/\\\\/patriksvensson\\\\.se\u001b\\\\\\\\https:\\\\/\\\\/patriksvensson\\\\.se\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Bracket_In_Url_Only()\n        {\n            // Given\n            var fixture = new AnsiFixture();\n\n            // When\n            const string Path = \"file://c:/temp/[x].txt\";\n            fixture.Markup.Write($\"[link]{AnsiMarkup.Escape(Path)}[/]\");\n\n            // Then\n            fixture.Output.ShouldMatch(\n                \"\u001b]8;id=[0-9]*;file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b\\\\\\\\file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Bracket_In_Url()\n        {\n            // Given\n            var fixture = new AnsiFixture();\n            const string Path = \"file://c:/temp/[x].txt\";\n            var escapedPath = AnsiMarkup.Escape(Path);\n\n            // When\n            fixture.Markup.Write($\"[link={escapedPath}]{escapedPath}[/]\");\n\n            // Then\n            fixture.Output.ShouldMatch(\n                \"\u001b]8;id=[0-9]*;file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b\\\\\\\\file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Theory]\n        [InlineData(\"[yellow]Hello [[ World[/]\", \"\\e[93mHello [ World\\e[0m\")]\n        public void Should_Be_Able_To_Escape_Tags(string text, string expected)\n        {\n            // Given\n            var fixture = new AnsiFixture();\n            fixture.Capabilities.ColorSystem = ColorSystem.Standard;\n\n            // When\n            fixture.Markup.Write(text);\n\n            // Then\n            fixture.Output\n                .ShouldBe(expected);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/AnsiWriterTests.cs",
    "content": "namespace Spectre.Console.Ansi.Tests;\n\npublic sealed class AnsiWriterTests\n{\n    [Fact]\n    public void Should_Write_Expected_Ansi()\n    {\n        // Given\n        var fixture = new AnsiFixture();\n        fixture.Capabilities.Ansi = true;\n        fixture.Capabilities.Links = true;\n\n        // When\n        fixture.Writer\n            .BeginLink(\"https://spectreconsole.net\", linkId: 123)\n            .Decoration(Decoration.Bold | Decoration.Italic)\n            .Foreground(Color.Yellow)\n            .Write(\"Spectre Console\")\n            .ResetStyle()\n            .EndLink();\n\n        // Then\n        fixture.Output.ShouldBe(\"\\e]8;id=123;https://spectreconsole.net\\e\\\\\\e[1;3m\\e[38;5;11mSpectre Console\\e[0m\\e]8;;\\e\\\\\");\n    }\n\n    [Fact]\n    public void Should_Not_Write_Link_If_Not_Supported()\n    {\n        // Given\n        var fixture = new AnsiFixture();\n        fixture.Capabilities.Ansi = true;\n        fixture.Capabilities.Links = false;\n\n        // When\n        fixture.Writer\n            .BeginLink(\"https://spectreconsole.net\", linkId: 123)\n            .Decoration(Decoration.Bold | Decoration.Italic)\n            .Foreground(Color.Yellow)\n            .Write(\"Spectre Console\")\n            .ResetStyle()\n            .EndLink();\n\n        // Then\n        fixture.Output.ShouldBe(\"\\e[1;3m\\e[38;5;11mSpectre Console\\e[0m\");\n    }\n\n    [Fact]\n    public void Should_Not_Write_Ansi_If_Not_Supported()\n    {\n        // Given\n        var fixture = new AnsiFixture();\n        fixture.Capabilities.Ansi = false;\n\n        // When\n        fixture.Writer\n            .BeginLink(\"https://spectreconsole.net\", linkId: 123)\n            .Decoration(Decoration.Bold | Decoration.Italic)\n            .Foreground(Color.Yellow)\n            .Write(\"Spectre Console\")\n            .ResetStyle()\n            .EndLink();\n\n        // Then\n        fixture.Output.ShouldBe(\"Spectre Console\");\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/ColorSystemTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class ColorSystemTests\n{\n    [Theory]\n    [InlineData(ColorSystem.NoColors, ColorSystemSupport.NoColors)]\n    [InlineData(ColorSystem.Legacy, ColorSystemSupport.Legacy)]\n    [InlineData(ColorSystem.Standard, ColorSystemSupport.Standard)]\n    [InlineData(ColorSystem.EightBit, ColorSystemSupport.EightBit)]\n    [InlineData(ColorSystem.TrueColor, ColorSystemSupport.TrueColor)]\n    public void Should_Be_Analog_To_ColorSystemSupport(ColorSystem colors, ColorSystemSupport support)\n    {\n        // Given, When\n        var result = (int)colors;\n\n        // Then\n        result.ShouldBe((int)support);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/ColorTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class ColorTests\n{\n    public sealed class TheEqualsMethod\n    {\n        [Theory]\n        [InlineData(\"800080\")]\n        [InlineData(\"#800080\")]\n        public void Should_Consider_Color_And_Color_From_Hex_Equal(string color)\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n\n            // When\n            var color2 = Color.FromHex(color);\n\n            // Then\n            color2.ShouldBe(color1);\n        }\n\n        [Theory]\n        [InlineData(\"800080\")]\n        [InlineData(\"#800080\")]\n        public void Should_Consider_Color_And_Color_Try_From_Hex_Equal(string color)\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n\n            // When\n            var result = Color.TryFromHex(color, out var color2);\n\n            // Then\n            result.ShouldBeTrue();\n            color2.ShouldBe(color1);\n        }\n\n        [Theory]\n        [InlineData(null)]\n        [InlineData(\"\")]\n        [InlineData(\"#\")]\n        [InlineData(\"#80\")]\n        [InlineData(\"FOO\")]\n        public void Should_Not_Parse_Non_Color_From_Hex(string? input)\n        {\n            // Given, When\n            var result = Record.Exception(() => Color.FromHex(input!));\n\n            // Then\n            result.ShouldBeAssignableTo<Exception>();\n        }\n\n        [Theory]\n        [InlineData(null)]\n        [InlineData(\"\")]\n        [InlineData(\"#\")]\n        [InlineData(\"#80\")]\n        [InlineData(\"FOO\")]\n        public void Should_Not_Parse_Non_Color_Try_From_Hex(string? input)\n        {\n            // Given, When\n            var result = Color.TryFromHex(input!, out var color);\n\n            // Then\n            result.ShouldBeFalse();\n            color.ShouldBe(Color.Default);\n        }\n\n        [Theory]\n        [InlineData(\"ffffff\")]\n        [InlineData(\"#ffffff\")]\n        [InlineData(\"fff\")]\n        [InlineData(\"#fff\")]\n        public void Should_Parse_3_Digit_Hex_Colors_From_Hex(string color)\n        {\n            // Given\n            var expected = new Color(255, 255, 255);\n\n            // When\n            var result = Color.FromHex(color);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Not_Consider_Color_And_Non_Color_Equal()\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n\n            // When\n            var result = color1.Equals(\"Foo\");\n\n            // Then\n            result.ShouldBeFalse();\n        }\n\n        [Fact]\n        public void Should_Consider_Same_Colors_Equal_By_Component()\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n            var color2 = new Color(128, 0, 128);\n\n            // When\n            var result = color1.Equals(color2);\n\n            // Then\n            result.ShouldBeTrue();\n        }\n\n        [Fact]\n        public void Should_Consider_Same_Known_Colors_Equal()\n        {\n            // Given\n            var color1 = Color.Cyan1;\n            var color2 = Color.Cyan1;\n\n            // When\n            var result = color1.Equals(color2);\n\n            // Then\n            result.ShouldBeTrue();\n        }\n\n        [Fact]\n        public void Should_Consider_Known_Color_And_Color_With_Same_Components_Equal()\n        {\n            // Given\n            var color1 = Color.Cyan1;\n            var color2 = new Color(0, 255, 255);\n\n            // When\n            var result = color1.Equals(color2);\n\n            // Then\n            result.ShouldBeTrue();\n        }\n\n        [Fact]\n        public void Should_Not_Consider_Different_Colors_Equal()\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n            var color2 = new Color(128, 128, 128);\n\n            // When\n            var result = color1.Equals(color2);\n\n            // Then\n            result.ShouldBeFalse();\n        }\n\n        [Fact]\n        public void Shourd_Not_Consider_Black_And_Default_Colors_Equal()\n        {\n            // Given\n            var color1 = Color.Default;\n            var color2 = Color.Black;\n\n            // When\n            var result = color1.Equals(color2);\n\n            // Then\n            result.ShouldBeFalse();\n        }\n    }\n\n    public sealed class TheGetHashCodeMethod\n    {\n        [Fact]\n        public void Should_Return_Same_HashCode_For_Same_Colors()\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n            var color2 = new Color(128, 0, 128);\n\n            // When\n            var hash1 = color1.GetHashCode();\n            var hash2 = color2.GetHashCode();\n\n            // Then\n            hash1.ShouldBe(hash2);\n        }\n\n        [Fact]\n        public void Should_Return_Different_HashCode_For_Different_Colors()\n        {\n            // Given\n            var color1 = new Color(128, 0, 128);\n            var color2 = new Color(128, 128, 128);\n\n            // When\n            var hash1 = color1.GetHashCode();\n            var hash2 = color2.GetHashCode();\n\n            // Then\n            hash1.ShouldNotBe(hash2);\n        }\n    }\n\n    public sealed class ImplicitConversions\n    {\n        public sealed class Int32ToColor\n        {\n            public static IEnumerable<object[]> Data =>\n                Enumerable.Range(0, 255)\n                    .Select(number => new object[] { number });\n\n            [Theory]\n            [MemberData(nameof(Data))]\n            public void Should_Return_Expected_Color(int number)\n            {\n                // Given, When\n                var result = (Color)number;\n\n                // Then\n                result.ShouldBe(Color.FromInt32(number));\n            }\n\n            [Fact]\n            public void Should_Throw_If_Integer_Is_Lower_Than_Zero()\n            {\n                // Given, When\n                var result = Record.Exception(() => (Color)(-1));\n\n                // Then\n                result.ShouldBeOfType<InvalidOperationException>();\n                result.Message.ShouldBe(\"Color number must be between 0 and 255\");\n            }\n\n            [Fact]\n            public void Should_Throw_If_Integer_Is_Higher_Than_255()\n            {\n                // Given, When\n                var result = Record.Exception(() => (Color)256);\n\n                // Then\n                result.ShouldBeOfType<InvalidOperationException>();\n                result.Message.ShouldBe(\"Color number must be between 0 and 255\");\n            }\n        }\n\n        public sealed class ConsoleColorToColor\n        {\n            [Theory]\n            [InlineData(ConsoleColor.Black, 0)]\n            [InlineData(ConsoleColor.DarkRed, 1)]\n            [InlineData(ConsoleColor.DarkGreen, 2)]\n            [InlineData(ConsoleColor.DarkYellow, 3)]\n            [InlineData(ConsoleColor.DarkBlue, 4)]\n            [InlineData(ConsoleColor.DarkMagenta, 5)]\n            [InlineData(ConsoleColor.DarkCyan, 6)]\n            [InlineData(ConsoleColor.Gray, 7)]\n            [InlineData(ConsoleColor.DarkGray, 8)]\n            [InlineData(ConsoleColor.Red, 9)]\n            [InlineData(ConsoleColor.Green, 10)]\n            [InlineData(ConsoleColor.Yellow, 11)]\n            [InlineData(ConsoleColor.Blue, 12)]\n            [InlineData(ConsoleColor.Magenta, 13)]\n            [InlineData(ConsoleColor.Cyan, 14)]\n            [InlineData(ConsoleColor.White, 15)]\n            public void Should_Return_Expected_Color(ConsoleColor color, int expected)\n            {\n                // Given, When\n                var result = (Color)color;\n\n                // Then\n                result.ShouldBe(Color.FromInt32(expected));\n            }\n        }\n\n        public sealed class ColorToConsoleColor\n        {\n            [Theory]\n            [InlineData(0, ConsoleColor.Black)]\n            [InlineData(1, ConsoleColor.DarkRed)]\n            [InlineData(2, ConsoleColor.DarkGreen)]\n            [InlineData(3, ConsoleColor.DarkYellow)]\n            [InlineData(4, ConsoleColor.DarkBlue)]\n            [InlineData(5, ConsoleColor.DarkMagenta)]\n            [InlineData(6, ConsoleColor.DarkCyan)]\n            [InlineData(7, ConsoleColor.Gray)]\n            [InlineData(8, ConsoleColor.DarkGray)]\n            [InlineData(9, ConsoleColor.Red)]\n            [InlineData(10, ConsoleColor.Green)]\n            [InlineData(11, ConsoleColor.Yellow)]\n            [InlineData(12, ConsoleColor.Blue)]\n            [InlineData(13, ConsoleColor.Magenta)]\n            [InlineData(14, ConsoleColor.Cyan)]\n            [InlineData(15, ConsoleColor.White)]\n            public void Should_Return_Expected_ConsoleColor_For_Known_Color(int color, ConsoleColor expected)\n            {\n                // Given, When\n                var result = (ConsoleColor)Color.FromInt32(color);\n\n                // Then\n                result.ShouldBe(expected);\n            }\n        }\n    }\n\n    public sealed class TheToMarkupMethod\n    {\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Default_Color()\n        {\n            // Given, When\n            var result = Color.Default.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"default\");\n        }\n\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Known_Color()\n        {\n            // Given, When\n            var result = Color.Red.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"red\");\n        }\n\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Custom_Color()\n        {\n            // Given, When\n            var result = new Color(255, 1, 12).ToMarkup();\n\n            // Then\n            result.ShouldBe(\"#FF010C\");\n        }\n    }\n\n    public sealed class TheToStringMethod\n    {\n        [Fact]\n        public void Should_Return_Color_Name_For_Known_Colors()\n        {\n            // Given, When\n            var name = Color.Fuchsia.ToString();\n\n            // Then\n            name.ShouldBe(\"fuchsia\");\n        }\n\n        [Fact]\n        public void Should_Return_Hex_String_For_Unknown_Colors()\n        {\n            // Given, When\n            var name = new Color(128, 0, 128).ToString();\n\n            // Then\n            name.ShouldBe(\"#800080 (RGB=128,0,128)\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/Fixtures/AnsiFixture.cs",
    "content": "using System.IO;\n\nnamespace Spectre.Console.Ansi.Tests;\n\npublic sealed class AnsiFixture\n{\n    private StringWriter _output { get; }\n\n    public AnsiCapabilities Capabilities { get; }\n    public AnsiWriter Writer { get; }\n    public AnsiMarkup Markup { get; }\n\n    public string Output => _output.ToString();\n\n    public AnsiFixture(AnsiCapabilities? settings = null)\n    {\n        _output = new StringWriter();\n\n        Capabilities = settings ?? new AnsiCapabilities\n        {\n            Ansi = true,\n            Links = true,\n            ColorSystem = ColorSystem.TrueColor,\n            AlternateBuffer = true,\n        };\n\n        Writer = new AnsiWriter(_output, Capabilities);\n        Markup = new AnsiMarkup(Writer);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/Properties/Usings.cs",
    "content": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.Linq;\nglobal using Shouldly;\nglobal using Xunit;"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/Spectre.Console.Ansi.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>\n    <GenerateDocumentationFile>false</GenerateDocumentationFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"Shouldly\" />\n    <PackageReference Include=\"xunit\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Using Include=\"Xunit\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Spectre.Console.Ansi\\Spectre.Console.Ansi.csproj\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "src/Spectre.Console.Ansi.Tests/StyleTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class StyleTests\n{\n    [Fact]\n    public void Should_Convert_From_Color_As_Expected()\n    {\n        // Given, When\n        Style style = Color.Red;\n\n        // Then\n        style.Foreground.ShouldBe(Color.Red);\n    }\n\n    [Fact]\n    public void Should_Combine_Two_Styles_As_Expected()\n    {\n        // Given\n        var first = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n        var other = new Style(Color.Green, Color.Silver, Decoration.Underline);\n\n        // When\n        var result = first.Combine(other);\n\n        // Then\n        result.Foreground.ShouldBe(Color.Green);\n        result.Background.ShouldBe(Color.Silver);\n        result.Decoration.ShouldBe(Decoration.Bold | Decoration.Italic | Decoration.Underline);\n    }\n\n    [Fact]\n    public void Should_Consider_Two_Identical_Styles_Equal()\n    {\n        // Given\n        var first = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n        var second = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n\n        // When\n        var result = first.Equals(second);\n\n        // Then\n        result.ShouldBeTrue();\n    }\n\n    [Fact]\n    public void Should_Not_Consider_Two_Styles_With_Different_Foreground_Colors_Equal()\n    {\n        // Given\n        var first = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n        var second = new Style(Color.Blue, Color.Yellow, Decoration.Bold | Decoration.Italic);\n\n        // When\n        var result = first.Equals(second);\n\n        // Then\n        result.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Not_Consider_Two_Styles_With_Different_Background_Colors_Equal()\n    {\n        // Given\n        var first = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n        var second = new Style(Color.White, Color.Blue, Decoration.Bold | Decoration.Italic);\n\n        // When\n        var result = first.Equals(second);\n\n        // Then\n        result.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Not_Consider_Two_Styles_With_Different_Decorations_Equal()\n    {\n        // Given\n        var first = new Style(Color.White, Color.Yellow, Decoration.Bold | Decoration.Italic);\n        var second = new Style(Color.White, Color.Yellow, Decoration.Bold);\n\n        // When\n        var result = first.Equals(second);\n\n        // Then\n        result.ShouldBeFalse();\n    }\n\n    public sealed class TheParseMethod\n    {\n        [Fact]\n        public void Default_Keyword_Should_Return_Default_Style()\n        {\n            // Given, When\n            var result = Style.Parse(\"default\");\n\n            // Then\n            result.Foreground.ShouldBe(Color.Default);\n            result.Background.ShouldBe(Color.Default);\n            result.Decoration.ShouldBe(Decoration.None);\n        }\n\n        [Theory]\n        [InlineData(\"bold\", Decoration.Bold)]\n        [InlineData(\"b\", Decoration.Bold)]\n        [InlineData(\"dim\", Decoration.Dim)]\n        [InlineData(\"i\", Decoration.Italic)]\n        [InlineData(\"italic\", Decoration.Italic)]\n        [InlineData(\"underline\", Decoration.Underline)]\n        [InlineData(\"u\", Decoration.Underline)]\n        [InlineData(\"invert\", Decoration.Invert)]\n        [InlineData(\"conceal\", Decoration.Conceal)]\n        [InlineData(\"slowblink\", Decoration.SlowBlink)]\n        [InlineData(\"rapidblink\", Decoration.RapidBlink)]\n        [InlineData(\"strikethrough\", Decoration.Strikethrough)]\n        [InlineData(\"s\", Decoration.Strikethrough)]\n        public void Should_Parse_Decoration(string text, Decoration decoration)\n        {\n            // Given, When\n            var result = Style.Parse(text);\n\n            // Then\n            result.Decoration.ShouldBe(decoration);\n        }\n\n        [Fact]\n        public void Should_Parse_Background_If_Foreground_Is_Set_To_Default()\n        {\n            // Given, When\n            var result = Style.Parse(\"default on green\");\n\n            // Then\n            result.Decoration.ShouldBe(Decoration.None);\n            result.Foreground.ShouldBe(Color.Default);\n            result.Background.ShouldBe(Color.Green);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Foreground_Is_Set_Twice()\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(\"green yellow\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"A foreground color has already been set.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Background_Is_Set_Twice()\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(\"green on blue yellow\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"A background color has already been set.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Color_Name_Could_Not_Be_Found()\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(\"bold lol\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"Could not find color or style 'lol'.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Background_Color_Name_Could_Not_Be_Found()\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(\"blue on lol\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"Could not find color 'lol'.\");\n        }\n\n        [Fact]\n        public void Should_Parse_Colors_And_Decoration()\n        {\n            // Given, When\n            var result = Style.Parse(\"bold underline blue on green\");\n\n            // Then\n            result.Decoration.ShouldBe(Decoration.Bold | Decoration.Underline);\n            result.Foreground.ShouldBe(Color.Blue);\n            result.Background.ShouldBe(Color.Green);\n        }\n\n        [Theory]\n        [InlineData(\"#FF0000 on #0000FF\")]\n        [InlineData(\"#F00 on #00F\")]\n        public void Should_Parse_Hex_Colors_Correctly(string style)\n        {\n            // Given, When\n            var result = Style.Parse(style);\n\n            // Then\n            result.Foreground.ShouldBe(Color.Red);\n            result.Background.ShouldBe(Color.Blue);\n        }\n\n        [Theory]\n        [InlineData(\"#\", \"Invalid hex color '#'.\")]\n        [InlineData(\"#FF00FF00FF\", \"Invalid hex color '#FF00FF00FF'.\")]\n        [InlineData(\"#FOO\", \"Invalid hex color '#FOO'. Could not find any recognizable digits.\")]\n        public void Should_Return_Error_If_Hex_Color_Is_Invalid(string style, string expected)\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(style));\n\n            // Then\n            result.ShouldNotBeNull();\n            result.Message.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(\"rgb(255,0,0) on rgb(0,0,255)\")]\n        public void Should_Parse_Rgb_Colors_Correctly(string style)\n        {\n            // Given, When\n            var result = Style.Parse(style);\n\n            // Then\n            result.Foreground.ShouldBe(Color.Red);\n            result.Background.ShouldBe(Color.Blue);\n        }\n\n        [Theory]\n        [InlineData(\"12 on 24\")]\n        public void Should_Parse_Colors_Numbers_Correctly(string style)\n        {\n            // Given, When\n            var result = Style.Parse(style);\n\n            // Then\n            result.Foreground.ShouldBe(Color.Blue);\n            result.Background.ShouldBe(Color.DeepSkyBlue4_1);\n        }\n\n        [Theory]\n        [InlineData(\"-12\", \"Color number must be greater than or equal to 0 (was -12)\")]\n        [InlineData(\"256\", \"Color number must be less than or equal to 255 (was 256)\")]\n        public void Should_Return_Error_If_Color_Number_Is_Invalid(string style, string expected)\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(style));\n\n            // Then\n            result.ShouldNotBeNull();\n            result.Message.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(\"rgb()\", \"Invalid RGB color 'rgb()'.\")]\n        [InlineData(\"rgb(\", \"Invalid RGB color 'rgb('.\")]\n        [InlineData(\"rgb(255)\", \"Invalid RGB color 'rgb(255)'.\")]\n        [InlineData(\"rgb(255,255)\", \"Invalid RGB color 'rgb(255,255)'.\")]\n        [InlineData(\"rgb(255,255,255\", \"Invalid RGB color 'rgb(255,255,255'.\")]\n        [InlineData(\"rgb(A,B,C)\", \"Invalid RGB color 'rgb(A,B,C)'.\")]\n        public void Should_Return_Error_If_Rgb_Color_Is_Invalid(string style, string expected)\n        {\n            // Given, When\n            var result = Record.Exception(() => Style.Parse(style));\n\n            // Then\n            result.ShouldNotBeNull();\n            result.Message.ShouldStartWith(expected);\n        }\n    }\n\n    public sealed class TheTryParseMethod\n    {\n        [Fact]\n        public void Should_Return_True_If_Parsing_Succeeded()\n        {\n            // Given, When\n            var result = Style.TryParse(\"bold\", out var style);\n\n            // Then\n            result.ShouldBeTrue();\n            style.Decoration.ShouldBe(Decoration.Bold);\n        }\n\n        [Fact]\n        public void Should_Return_False_If_Parsing_Failed()\n        {\n            // Given, When\n            var result = Style.TryParse(\"lol\", out _);\n\n            // Then\n            result.ShouldBeFalse();\n        }\n    }\n\n    public sealed class TheToMarkupMethod\n    {\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Style_With_Foreground_Color()\n        {\n            // Given\n            var style = new Style(Color.Red);\n\n            // When\n            var result = style.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"red\");\n        }\n\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Style_With_Foreground_And_Background_Color()\n        {\n            // Given\n            var style = new Style(Color.Red, Color.Green);\n\n            // When\n            var result = style.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"red on green\");\n        }\n\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Style_With_Foreground_And_Background_Color_And_Decoration()\n        {\n            // Given\n            var style = new Style(Color.Red, Color.Green, Decoration.Bold | Decoration.Underline);\n\n            // When\n            var result = style.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"bold underline red on green\");\n        }\n\n        [Fact]\n        public void Should_Return_Expected_Markup_For_Style_With_Only_Background_Color()\n        {\n            // Given\n            var style = new Style(background: Color.Green);\n\n            // When\n            var result = style.ToMarkup();\n\n            // Then\n            result.ShouldBe(\"default on green\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Colors/ColorEmitter.cs",
    "content": "using System.CodeDom.Compiler;\nusing System.IO;\nusing System.Linq;\n\nnamespace Spectre.Console.SourceGenerator.Colors;\n\n/// <summary>\n/// Emits C# source code for colors.\n/// </summary>\ninternal static class ColorEmitter\n{\n    private const string AutoGeneratedHeader = \"\"\"\n        //------------------------------------------------------------------------------\n        // <auto-generated>\n        //     This code was generated by a tool.\n        //\n        //     Changes to this file may cause incorrect behavior and will be lost if\n        //     the code is regenerated.\n        // </auto-generated>\n        //------------------------------------------------------------------------------\n\n        \"\"\";\n\n    /// <summary>\n    /// Emits the Color.Generated.g.cs file content.\n    /// </summary>\n    public static string EmitColorProperties(EquatableArray<ColorModel> colors)\n    {\n        using var stringWriter = new StringWriter();\n        using var writer = new IndentedTextWriter(stringWriter, \"    \");\n\n        writer.WriteLine(AutoGeneratedHeader);\n        writer.WriteLine(\"using System.Diagnostics.CodeAnalysis;\");\n        writer.WriteLine();\n        writer.WriteLine(\"namespace Spectre.Console\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"/// <summary>\");\n        writer.WriteLine(\"/// Represents a color.\");\n        writer.WriteLine(\"/// </summary>\");\n        writer.WriteLine(\"public partial struct Color\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Emit internal constructor\n        writer.WriteLine(\"internal Color(byte number, byte red, byte green, byte blue, bool isDefault = false)\");\n        writer.Indent++;\n        writer.WriteLine(\": this(red, green, blue)\");\n        writer.Indent--;\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n        writer.WriteLine(\"Number = number;\");\n        writer.WriteLine(\"IsDefault = isDefault;\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.WriteLine();\n\n        foreach (var color in colors)\n        {\n            var hasUnderscore = color.Name.Contains(\"_\");\n\n            writer.WriteLine(\"/// <summary>\");\n            writer.WriteLine($\"/// Gets the color \\\"{color.Name}\\\" (RGB {color.R},{color.G},{color.B}).\");\n            writer.WriteLine(\"/// </summary>\");\n\n            if (hasUnderscore)\n            {\n                writer.WriteLine(\"[SuppressMessage(\\\"Naming\\\", \\\"CA1707:Identifiers should not contain underscores\\\")]\");\n            }\n\n            writer.WriteLine($\"public static Color {color.Name} {{ get; }} = new Color({color.Number}, {color.R}, {color.G}, {color.B});\");\n            writer.WriteLine();\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        return stringWriter.ToString();\n    }\n\n    /// <summary>\n    /// Emits the ColorPalette.Generated.g.cs file content.\n    /// </summary>\n    public static string EmitColorPalette(EquatableArray<ColorModel> colors)\n    {\n        using var stringWriter = new StringWriter();\n        using var writer = new IndentedTextWriter(stringWriter, \"    \");\n\n        writer.WriteLine(AutoGeneratedHeader);\n        writer.WriteLine(\"using System.Collections.Generic;\");\n        writer.WriteLine();\n        writer.WriteLine(\"namespace Spectre.Console\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"internal static partial class ColorPalette\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // GenerateLegacyPalette - colors 0-7 (only primary, no aliases)\n        EmitPaletteMethod(writer, \"GenerateLegacyPalette\", colors, 0, 7, null);\n\n        writer.WriteLine();\n\n        // GenerateStandardPalette - colors 8-15 (only primary, no aliases)\n        EmitStandardPaletteMethod(writer, colors);\n\n        writer.WriteLine();\n\n        // GenerateEightBitPalette - colors 16-255 (only primary, no aliases)\n        EmitEightBitPaletteMethod(writer, colors);\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        return stringWriter.ToString();\n    }\n\n    private static void EmitPaletteMethod(IndentedTextWriter writer, string methodName, EquatableArray<ColorModel> colors, int startNumber, int endNumber, string? parameterName)\n    {\n        if (parameterName != null)\n        {\n            writer.WriteLine($\"private static List<Color> {methodName}(IReadOnlyList<Color> {parameterName})\");\n        }\n        else\n        {\n            writer.WriteLine($\"private static List<Color> {methodName}()\");\n        }\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        if (parameterName != null)\n        {\n            writer.WriteLine($\"return new List<Color>({parameterName})\");\n        }\n        else\n        {\n            writer.WriteLine(\"return new List<Color>\");\n        }\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Filter to primary colors only (no aliases) within the range\n        var paletteColors = colors\n            .Where(c => !c.IsAlias && c.Number >= startNumber && c.Number <= endNumber)\n            .OrderBy(c => c.Number)\n            .ToArray();\n\n        foreach (var color in paletteColors)\n        {\n            writer.WriteLine($\"Color.{color.Name},\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n    }\n\n    private static void EmitStandardPaletteMethod(IndentedTextWriter writer, EquatableArray<ColorModel> colors)\n    {\n        writer.WriteLine(\"private static List<Color> GenerateStandardPalette(IReadOnlyList<Color> legacy)\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n        writer.WriteLine(\"return new List<Color>(legacy)\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Colors 8-15 (only primary, no aliases)\n        var standardColors = colors\n            .Where(c => !c.IsAlias && c.Number >= 8 && c.Number <= 15)\n            .OrderBy(c => c.Number)\n            .ToArray();\n\n        foreach (var color in standardColors)\n        {\n            writer.WriteLine($\"Color.{color.Name},\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n    }\n\n    private static void EmitEightBitPaletteMethod(IndentedTextWriter writer, EquatableArray<ColorModel> colors)\n    {\n        writer.WriteLine(\"private static List<Color> GenerateEightBitPalette(IReadOnlyList<Color> standard)\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n        writer.WriteLine(\"return new List<Color>(standard)\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Colors 16-255 (only primary, no aliases)\n        var eightBitColors = colors\n            .Where(c => !c.IsAlias && c.Number >= 16 && c.Number <= 255)\n            .OrderBy(c => c.Number)\n            .ToArray();\n\n        foreach (var color in eightBitColors)\n        {\n            writer.WriteLine($\"Color.{color.Name},\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n    }\n\n    /// <summary>\n    /// Emits the ColorTable.Generated.g.cs file content.\n    /// </summary>\n    public static string EmitColorTable(EquatableArray<ColorModel> colors)\n    {\n        using var stringWriter = new StringWriter();\n        using var writer = new IndentedTextWriter(stringWriter, \"    \");\n\n        writer.WriteLine(AutoGeneratedHeader);\n        writer.WriteLine(\"using System;\");\n        writer.WriteLine(\"using System.Collections.Generic;\");\n        writer.WriteLine();\n        writer.WriteLine(\"namespace Spectre.Console\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"internal static partial class ColorTable\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"private static Dictionary<string, int> GenerateTable()\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n        writer.WriteLine(\"return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // All colors including aliases, ordered by number then by alias status\n        var orderedColors = colors\n            .OrderBy(c => c.Number)\n            .ThenBy(c => c.IsAlias)\n            .ToArray();\n\n        foreach (var color in orderedColors)\n        {\n            writer.WriteLine($\"{{ \\\"{color.Name.ToLowerInvariant()}\\\", {color.Number} }},\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        return stringWriter.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Colors/ColorGenerator.cs",
    "content": "using System;\nusing System.Text;\nusing Microsoft.CodeAnalysis;\nusing Microsoft.CodeAnalysis.Text;\n\nnamespace Spectre.Console.SourceGenerator.Colors;\n\n/// <summary>\n/// Source generator that produces Color, ColorPalette, and ColorTable from colors.json.\n/// </summary>\n[Generator]\npublic class ColorGenerator : IIncrementalGenerator\n{\n    /// <inheritdoc />\n    public void Initialize(IncrementalGeneratorInitializationContext context)\n    {\n        // Find colors.json and parse it in the pipeline (for caching)\n        // Step 1: Extract text (cached by string value equality)\n        // Step 2: Parse to models (cached by EquatableArray value equality)\n        var colors = context.AdditionalTextsProvider\n            .Where(static file => file.Path.EndsWith(\"colors.json\", StringComparison.OrdinalIgnoreCase))\n            .Select(static (file, ct) =>\n                file.GetText(ct)?.ToString()\n                ?? throw new InvalidOperationException($\"Failed to read colors.json at {file.Path}\"))\n            .Select(static (text, _) => ColorParser.ParseAll(text))\n            .Collect();\n\n        // Register source output - only emit, no parsing (parsing is cached above)\n        context.RegisterSourceOutput(colors, static (spc, models) =>\n        {\n            if (models.IsEmpty)\n            {\n                return;\n            }\n\n            if (models.Length > 1)\n            {\n                spc.ReportDiagnostic(Diagnostic.Create(\n                    new DiagnosticDescriptor(\n                        \"SPECINTERNALCOL001\",\n                        \"Multiple colors.json files found\",\n                        \"Multiple colors.json files were found. Only the first one will be used.\",\n                        \"Spectre.Console.SourceGenerator\",\n                        DiagnosticSeverity.Warning,\n                        isEnabledByDefault: true),\n                    Location.None));\n            }\n\n            var colorModels = models[0];\n\n            // Generate Color.Generated.g.cs\n            var colorSource = ColorEmitter.EmitColorProperties(colorModels);\n            spc.AddSource(\"Color.Generated.g.cs\", SourceText.From(colorSource, Encoding.UTF8));\n\n            // Generate ColorPalette.Generated.g.cs\n            var paletteSource = ColorEmitter.EmitColorPalette(colorModels);\n            spc.AddSource(\"ColorPalette.Generated.g.cs\", SourceText.From(paletteSource, Encoding.UTF8));\n\n            // Generate ColorTable.Generated.g.cs\n            var tableSource = ColorEmitter.EmitColorTable(colorModels);\n            spc.AddSource(\"ColorTable.Generated.g.cs\", SourceText.From(tableSource, Encoding.UTF8));\n        });\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Colors/ColorModel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\n\nnamespace Spectre.Console.SourceGenerator.Colors;\n\n/// <summary>\n/// Represents a color from the JSON data file.\n/// </summary>\ninternal sealed record ColorModel(\n    int Number,\n    string Name,\n    byte R,\n    byte G,\n    byte B,\n    bool IsAlias);\n\n/// <summary>\n/// Parses color data from JSON.\n/// </summary>\ninternal static class ColorParser\n{\n    /// <summary>\n    /// Parses the colors.json file and returns all color models.\n    /// </summary>\n    public static EquatableArray<ColorModel> ParseAll(string json)\n    {\n        var document = JsonDocument.Parse(json);\n        var colors = new List<ColorModel>();\n        var nameCounts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);\n\n        foreach (var element in document.RootElement.EnumerateArray())\n        {\n            var number = element.GetProperty(\"number\").GetInt32();\n            var name = element.GetProperty(\"name\").GetString()\n                ?? throw new InvalidOperationException($\"Color {number} has null name\");\n            var rgb = element.GetProperty(\"rgb\");\n            var r = (byte)rgb.GetProperty(\"r\").GetInt32();\n            var g = (byte)rgb.GetProperty(\"g\").GetInt32();\n            var b = (byte)rgb.GetProperty(\"b\").GetInt32();\n\n            // Track name occurrences for deduplication\n            var uniqueName = GetUniqueName(name, nameCounts);\n            colors.Add(new ColorModel(number, uniqueName, r, g, b, IsAlias: false));\n\n            // Process aliases\n            if (element.TryGetProperty(\"aliases\", out var aliases))\n            {\n                foreach (var alias in aliases.EnumerateArray())\n                {\n                    var aliasName = alias.GetString()\n                        ?? throw new InvalidOperationException($\"Color {number} has null alias\");\n                    var uniqueAliasName = GetUniqueName(aliasName, nameCounts);\n                    colors.Add(new ColorModel(number, uniqueAliasName, r, g, b, IsAlias: true));\n                }\n            }\n        }\n\n        return new EquatableArray<ColorModel>(colors);\n    }\n\n    private static string GetUniqueName(string name, Dictionary<string, int> nameCounts)\n    {\n        if (!nameCounts.TryGetValue(name, out var count))\n        {\n            nameCounts[name] = 1;\n            return name;\n        }\n\n        nameCounts[name] = count + 1;\n        return $\"{name}_{count}\";\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Emojis/EmojiEmitter.cs",
    "content": "using System;\nusing System.CodeDom.Compiler;\nusing System.Globalization;\nusing System.IO;\n\nnamespace Spectre.Console.SourceGenerator.Emojis;\n\n/// <summary>\n/// Emits C# source code for emojis.\n/// </summary>\ninternal static class EmojiEmitter\n{\n    /// <summary>\n    /// Legacy emoji aliases for backwards compatibility.\n    /// These emojis were renamed in newer Unicode versions but we maintain the old names.\n    /// Format: (OldName, OldIdentifier, NewName, Description)\n    /// </summary>\n    private static readonly (string OldName, string OldIdentifier, string NewName, string Description)[] LegacyAliases =\n    [\n        // \"hugging face\" was renamed to \"smiling face with open hands\"\n        (\"HuggingFace\", \"hugging_face\", \"SmilingFaceWithOpenHands\", \"Hugging face\"),\n        // \"knocked out face\" was renamed to \"face with crossed-out eyes\"\n        (\"KnockedOutFace\", \"knocked_out_face\", \"FaceWithCrossedOutEyes\", \"Knocked-out face\"),\n        // \"pouting face\" was renamed to \"enraged face\"\n        (\"PoutingFace\", \"pouting_face\", \"EnragedFace\", \"Pouting face\")\n    ];\n\n    /// <summary>\n    /// Converts a Unicode escape sequence like \"\\U0001F9EE\" to the actual character.\n    /// </summary>\n    private static string CodeToEmoji(string code)\n    {\n        // Code is in format \"\\U00000000\" - extract the hex part\n        if (code.StartsWith(\"\\\\U\", StringComparison.Ordinal) && code.Length == 10)\n        {\n            var hex = code.Substring(2);\n            if (int.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var codePoint))\n            {\n                return char.ConvertFromUtf32(codePoint);\n            }\n        }\n\n        return string.Empty;\n    }\n\n    private const string AutoGeneratedHeader = \"\"\"\n        //------------------------------------------------------------------------------\n        // <auto-generated>\n        //     This code was generated by a tool.\n        //\n        //     Changes to this file may cause incorrect behavior and will be lost if\n        //     the code is regenerated.\n        // </auto-generated>\n        //------------------------------------------------------------------------------\n\n        \"\"\";\n\n    /// <summary>\n    /// Emits the Emoji.Generated.g.cs file content.\n    /// </summary>\n    public static string Emit(EquatableArray<EmojiModel> emojis)\n    {\n        using var stringWriter = new StringWriter();\n        using var writer = new IndentedTextWriter(stringWriter, \"    \");\n\n        writer.WriteLine(AutoGeneratedHeader);\n        writer.WriteLine(\"using System;\");\n        writer.WriteLine(\"using System.Collections.Generic;\");\n        writer.WriteLine();\n        writer.WriteLine(\"namespace Spectre.Console\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"/// <summary>\");\n        writer.WriteLine(\"/// Utility for working with emojis.\");\n        writer.WriteLine(\"/// </summary>\");\n        writer.WriteLine(\"public static partial class Emoji\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Emit _emojis dictionary\n        writer.WriteLine(\"private static readonly Dictionary<string, string> _emojis\");\n        writer.Indent++;\n        writer.WriteLine(\"= new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)\");\n        writer.Indent--;\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        foreach (var emoji in emojis)\n        {\n            writer.WriteLine($\"{{ \\\"{emoji.Identifier}\\\", Emoji.Known.{emoji.Name} }},\");\n        }\n\n        // Emit legacy aliases for backwards compatibility\n        foreach (var (oldName, oldIdentifier, newName, _) in LegacyAliases)\n        {\n            writer.WriteLine($\"{{ \\\"{oldIdentifier}\\\", Emoji.Known.{newName} }},\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n        writer.WriteLine();\n\n        // Emit Known class\n        writer.WriteLine(\"/// <summary>\");\n        writer.WriteLine(\"/// Contains well-known emojis.\");\n        writer.WriteLine(\"/// </summary>\");\n        writer.WriteLine(\"public static class Known\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        foreach (var emoji in emojis)\n        {\n            var emojiChar = CodeToEmoji(emoji.Code);\n            writer.WriteLine(\"/// <summary>\");\n            writer.WriteLine($\"/// Gets the \\\"{emoji.Description}\\\" emoji. {emojiChar}\");\n            writer.WriteLine(\"/// </summary>\");\n            writer.WriteLine($\"/// <remarks>\");\n            writer.WriteLine($\"/// Lookup: <c>{emoji.Identifier}</c>\");\n            writer.WriteLine($\"/// </remarks>\");\n            writer.WriteLine($\"public const string {emoji.Name} = \\\"{emoji.Code}\\\";\");\n            writer.WriteLine();\n        }\n\n        // Emit legacy aliases for backwards compatibility\n        foreach (var (oldName, oldIdentifier, newName, description) in LegacyAliases)\n        {\n            writer.WriteLine(\"/// <summary>\");\n            writer.WriteLine($\"/// Gets the \\\"{description}\\\" emoji.\");\n            writer.WriteLine(\"/// </summary>\");\n            writer.WriteLine($\"/// <remarks>\");\n            writer.WriteLine($\"/// Lookup: <c>{oldIdentifier}</c><br/>\");\n            writer.WriteLine($\"/// This is a legacy alias for <see cref=\\\"{newName}\\\"/>.\");\n            writer.WriteLine($\"/// </remarks>\");\n            writer.WriteLine($\"public const string {oldName} = {newName};\");\n            writer.WriteLine();\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        return stringWriter.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Emojis/EmojiGenerator.cs",
    "content": "using System;\nusing System.Text;\nusing Microsoft.CodeAnalysis;\nusing Microsoft.CodeAnalysis.Text;\n\nnamespace Spectre.Console.SourceGenerator.Emojis;\n\n/// <summary>\n/// Source generator that produces Emoji from emoji.json.\n/// </summary>\n[Generator]\npublic class EmojiGenerator : IIncrementalGenerator\n{\n    /// <inheritdoc />\n    public void Initialize(IncrementalGeneratorInitializationContext context)\n    {\n        // Find emoji.json and parse it in the pipeline (for caching)\n        // Step 1: Extract text (cached by string value equality)\n        // Step 2: Parse to models (cached by EquatableArray value equality)\n        var emojis = context.AdditionalTextsProvider\n            .Where(static file => file.Path.EndsWith(\"emoji.json\", StringComparison.OrdinalIgnoreCase))\n            .Select(static (file, ct) =>\n                file.GetText(ct)?.ToString()\n                ?? throw new InvalidOperationException($\"Failed to read emoji.json at {file.Path}\"))\n            .Select(static (text, _) => EmojiParser.ParseAll(text))\n            .Collect();\n\n        // Register implementation source output - we do not use these emojis directly in the source\n        // and this will allow IDEs to optionally skip running this generator for intellisense and the such, but it will\n        // always run when compiling.\n        // see https://github.com/dotnet/roslyn/blob/main/docs/features/incremental-generators.md#outputting-values\n        context.RegisterImplementationSourceOutput(emojis, static (spc, models) =>\n        {\n            if (models.IsEmpty)\n            {\n                return;\n            }\n\n            if (models.Length > 1)\n            {\n                spc.ReportDiagnostic(Diagnostic.Create(\n                    new DiagnosticDescriptor(\n                        \"SPECINTERNALEMOJI001\",\n                        \"Multiple emoji.json files found\",\n                        \"Multiple emoji.json files were found. Only the first one will be used.\",\n                        \"Spectre.Console.SourceGenerator\",\n                        DiagnosticSeverity.Warning,\n                        isEnabledByDefault: true),\n                    Location.None));\n            }\n\n            var source = EmojiEmitter.Emit(models[0]);\n            spc.AddSource(\"Emoji.Generated.g.cs\", SourceText.From(source, Encoding.UTF8));\n        });\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Emojis/EmojiModel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace Spectre.Console.SourceGenerator.Emojis;\n\n/// <summary>\n/// Represents an emoji from the JSON data file.\n/// </summary>\ninternal sealed record EmojiModel(\n    string Identifier,   // snake_case for dictionary lookup\n    string Name,         // PascalCase for C# property\n    string Code,         // Unicode escape sequence like \\U0001F90E\n    string Description)  // Human-readable description\n    ;\n\n/// <summary>\n/// Parses emoji data from JSON.\n/// </summary>\ninternal static class EmojiParser\n{\n    /// <summary>\n    /// Parses the emoji.json file and returns all emoji models.\n    /// Filters out emojis with multiple codepoints (combinators).\n    /// </summary>\n    public static EquatableArray<EmojiModel> ParseAll(string json)\n    {\n        var document = JsonDocument.Parse(json);\n        var emojis = new List<EmojiModel>();\n\n        foreach (var element in document.RootElement.EnumerateArray())\n        {\n            var label = element.GetProperty(\"label\").GetString()\n                ?? throw new InvalidOperationException(\"Emoji has null label\");\n            var hexcode = element.GetProperty(\"hexcode\").GetString()\n                ?? throw new InvalidOperationException(\"Emoji has null hexcode\");\n\n            // Skip multi-codepoint emojis (those with dashes in hexcode indicate combinators)\n            if (hexcode.Contains(\"-\"))\n            {\n                continue;\n            }\n\n            // Transform hexcode to Unicode escape sequence\n            var code = TransformHexcode(hexcode);\n\n            // Check if it has combinators (multiple escape sequences)\n            var firstIndex = code.IndexOf(\"\\\\U\", StringComparison.Ordinal);\n            var hasCombinators = firstIndex >= 0 && code.IndexOf(\"\\\\U\", firstIndex + 2, StringComparison.Ordinal) >= 0;\n            if (hasCombinators)\n            {\n                continue;\n            }\n\n            // Transform label to identifier (snake_case)\n            var identifier = TransformName(label);\n\n            // Transform identifier to name (PascalCase)\n            var name = identifier\n                .Replace(\"1st\", \"first\")\n                .Replace(\"2nd\", \"second\")\n                .Replace(\"3rd\", \"third\");\n            name = Pascalize(name);\n\n            // Create description\n            var description = Humanize(label);\n\n            emojis.Add(new EmojiModel(identifier, name, code, description));\n        }\n\n        // Sort by name for consistent output\n        return new EquatableArray<EmojiModel>(emojis.OrderBy(e => e.Name));\n    }\n\n    private static string TransformName(string name)\n    {\n        if (string.IsNullOrEmpty(name))\n        {\n            return name;\n        }\n\n        var result = new StringBuilder(name.Length + 16); // Extra capacity for expansions like & -> and\n        var i = 0;\n        var len = name.Length;\n\n        while (i < len)\n        {\n            var c = name[i];\n\n            // Handle \"'s\" or \"'s\" -> \"s\" (straight or curly apostrophe followed by s)\n            if ((c == '\\'' || c == '\\u2019') && i + 1 < len && name[i + 1] == 's')\n            {\n                result.Append('s');\n                i += 2;\n                continue;\n            }\n\n            switch (c)\n            {\n                // Skip these characters (remove them)\n                case ':':\n                case ',':\n                case '.':\n                case '!':\n                case '(':\n                case ')':\n                case '\\u201c': // left double quotation mark\n                case '\\u201d': // right double quotation mark\n                case '\\u229b': // circled asterisk operator\n                    break;\n\n                // Replace with underscore\n                case ' ':\n                case '\\'':\n                case '\\u2019': // right single quotation mark (curly apostrophe)\n                case '-':\n                    result.Append('_');\n                    break;\n\n                // Multi-char expansions\n                case '&':\n                    result.Append(\"and\");\n                    break;\n                case '#':\n                    result.Append(\"hash\");\n                    break;\n                case '*':\n                    result.Append(\"star\");\n                    break;\n\n                // Default: lowercase the character\n                default:\n                    result.Append(char.ToLowerInvariant(c));\n                    break;\n            }\n\n            i++;\n        }\n\n        // Trim leading/trailing underscores (equivalent to original .Trim())\n        var str = result.ToString();\n        return str.Trim('_');\n    }\n\n    private static string TransformHexcode(string hexcode)\n    {\n        // Convert hexcode like \"1F90E\" to Unicode escape \"\\U0001F90E\"\n        // Pad to 8 characters for the \\U escape format\n        var paddedHex = hexcode.PadLeft(8, '0');\n        return $\"\\\\U{paddedHex}\";\n    }\n\n    private static string Pascalize(string input)\n    {\n        if (string.IsNullOrEmpty(input))\n        {\n            return input;\n        }\n\n        var result = new StringBuilder();\n        var capitalizeNext = true;\n\n        foreach (var c in input)\n        {\n            if (c == '_')\n            {\n                capitalizeNext = true;\n            }\n            else if (char.IsLetterOrDigit(c))\n            {\n                result.Append(capitalizeNext ? char.ToUpperInvariant(c) : c);\n                capitalizeNext = false;\n            }\n            else\n            {\n                capitalizeNext = true;\n            }\n        }\n\n        return result.ToString();\n    }\n\n    private static string Humanize(string input)\n    {\n        if (string.IsNullOrEmpty(input))\n        {\n            return input;\n        }\n\n        // Capitalize the first letter\n        var result = char.ToUpperInvariant(input[0]) + input.Substring(1);\n        return result;\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/EquatableArray.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Immutable;\n\nnamespace Spectre.Console.SourceGenerator;\n\n/// <summary>\n/// An immutable array wrapper with structural equality for incremental generator caching.\n/// </summary>\n/// <typeparam name=\"T\">The element type, must implement IEquatable{T}.</typeparam>\ninternal readonly struct EquatableArray<T> : IEquatable<EquatableArray<T>>, IEnumerable<T>\n    where T : IEquatable<T>\n{\n    /// <summary>\n    /// An empty array.\n    /// </summary>\n    public static readonly EquatableArray<T> Empty = new(ImmutableArray<T>.Empty);\n\n    private readonly ImmutableArray<T> _array;\n\n    /// <summary>\n    /// Creates a new EquatableArray from the given immutable array.\n    /// </summary>\n    public EquatableArray(ImmutableArray<T> array) => _array = array;\n\n    /// <summary>\n    /// Creates a new EquatableArray from the given enumerable.\n    /// </summary>\n    public EquatableArray(IEnumerable<T> items) => _array = [.. items];\n\n    /// <summary>\n    /// Gets the number of elements.\n    /// </summary>\n    public int Count => _array.IsDefault ? 0 : _array.Length;\n\n    /// <summary>\n    /// Gets whether the array is empty.\n    /// </summary>\n    public bool IsEmpty => _array.IsDefault || _array.Length == 0;\n\n    /// <summary>\n    /// Gets the element at the specified index.\n    /// </summary>\n    public T this[int index] => _array[index];\n\n    /// <inheritdoc />\n    public bool Equals(EquatableArray<T> other)\n    {\n        if (_array.IsDefault && other._array.IsDefault)\n        {\n            return true;\n        }\n\n        if (_array.IsDefault || other._array.IsDefault)\n        {\n            return false;\n        }\n\n        if (_array.Length != other._array.Length)\n        {\n            return false;\n        }\n\n        for (var i = 0; i < _array.Length; i++)\n        {\n            if (!_array[i].Equals(other._array[i]))\n            {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /// <inheritdoc />\n    public override bool Equals(object? obj) => obj is EquatableArray<T> other && Equals(other);\n\n    /// <inheritdoc />\n    public override int GetHashCode()\n    {\n        if (_array.IsDefault)\n        {\n            return 0;\n        }\n\n        var hash = 17;\n        foreach (var item in _array)\n        {\n            hash = (hash * 31) + (item?.GetHashCode() ?? 0);\n        }\n\n        return hash;\n    }\n\n    /// <inheritdoc />\n    public IEnumerator<T> GetEnumerator() =>\n        ((IEnumerable<T>)(_array.IsDefault ? ImmutableArray<T>.Empty : _array)).GetEnumerator();\n\n    /// <inheritdoc />\n    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();\n\n    /// <summary>\n    /// Equality operator.\n    /// </summary>\n    public static bool operator ==(EquatableArray<T> left, EquatableArray<T> right) => left.Equals(right);\n\n    /// <summary>\n    /// Inequality operator.\n    /// </summary>\n    public static bool operator !=(EquatableArray<T> left, EquatableArray<T> right) => !left.Equals(right);\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <Nullable>enable</Nullable>\n    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>\n    <IsRoslynComponent>true</IsRoslynComponent>\n    <IncludeBuildOutput>false</IncludeBuildOutput>\n    <DevelopmentDependency>true</DevelopmentDependency>\n    <NoWarn>RS1035</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.CodeAnalysis.CSharp\" PrivateAssets=\"all\" />\n    <PackageReference Include=\"Microsoft.CodeAnalysis.Analyzers\" PrivateAssets=\"all\" />\n    <PackageReference Include=\"System.Text.Json\" PrivateAssets=\"all\" GeneratePathProperty=\"true\" />\n    <PackageReference Include=\"IsExternalInit\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"$(OutputPath)\\$(AssemblyName).dll\" Pack=\"true\" PackagePath=\"analyzers/dotnet/cs\" Visible=\"false\" />\n    <None Include=\"$(PkgSystem_Text_Json)\\lib\\netstandard2.0\\System.Text.Json.dll\" Pack=\"true\" PackagePath=\"analyzers/dotnet/cs\" Visible=\"false\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Spinners/SpinnerEmitter.cs",
    "content": "using System.CodeDom.Compiler;\nusing System.IO;\n\nnamespace Spectre.Console.SourceGenerator.Spinners;\n\n/// <summary>\n/// Emits C# source code for spinners.\n/// </summary>\ninternal static class SpinnerEmitter\n{\n    private const string AutoGeneratedHeader = \"\"\"\n        //------------------------------------------------------------------------------\n        // <auto-generated>\n        //     This code was generated by a tool.\n        //\n        //     Partly generated from\n        //     https://github.com/sindresorhus/cli-spinners/blob/master/spinners.json\n        //\n        //     Changes to this file may cause incorrect behavior and will be lost if\n        //     the code is regenerated.\n        // </auto-generated>\n        //------------------------------------------------------------------------------\n\n        \"\"\";\n\n    /// <summary>\n    /// Emits the Spinner.Generated.g.cs file content.\n    /// </summary>\n    public static string Emit(EquatableArray<SpinnerModel> spinners)\n    {\n        using var stringWriter = new StringWriter();\n        using var writer = new IndentedTextWriter(stringWriter, \"    \");\n\n        writer.WriteLine(AutoGeneratedHeader);\n        writer.WriteLine(\"using System;\");\n        writer.WriteLine(\"using System.Collections.Generic;\");\n        writer.WriteLine();\n        writer.WriteLine(\"namespace Spectre.Console\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine(\"public abstract partial class Spinner\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        // Emit private spinner classes\n        foreach (var spinner in spinners)\n        {\n            EmitSpinnerClass(writer, spinner);\n        }\n\n        // Emit Known class\n        writer.WriteLine(\"/// <summary>\");\n        writer.WriteLine(\"/// Contains well-known spinners.\");\n        writer.WriteLine(\"/// </summary>\");\n        writer.WriteLine(\"public static class Known\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        foreach (var spinner in spinners)\n        {\n            writer.WriteLine(\"/// <summary>\");\n            writer.WriteLine($\"/// Gets the \\\"{spinner.Name}\\\" spinner.\");\n            writer.WriteLine(\"/// </summary>\");\n            writer.WriteLine($\"public static Spinner {spinner.NormalizedName} {{ get; }} = new {spinner.NormalizedName}Spinner();\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n\n        return stringWriter.ToString();\n    }\n\n    private static void EmitSpinnerClass(IndentedTextWriter writer, SpinnerModel spinner)\n    {\n        writer.WriteLine($\"private sealed class {spinner.NormalizedName}Spinner : Spinner\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        writer.WriteLine($\"public override TimeSpan Interval => TimeSpan.FromMilliseconds({spinner.Interval});\");\n        writer.WriteLine($\"public override bool IsUnicode => {(spinner.IsUnicode ? \"true\" : \"false\")};\");\n        writer.WriteLine(\"public override IReadOnlyList<string> Frames => new List<string>\");\n        writer.WriteLine(\"{\");\n        writer.Indent++;\n\n        foreach (var frame in spinner.Frames)\n        {\n            writer.WriteLine($\"\\\"{frame}\\\",\");\n        }\n\n        writer.Indent--;\n        writer.WriteLine(\"};\");\n\n        writer.Indent--;\n        writer.WriteLine(\"}\");\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Spinners/SpinnerGenerator.cs",
    "content": "using System;\nusing System.Text;\nusing Microsoft.CodeAnalysis;\nusing Microsoft.CodeAnalysis.Text;\n\nnamespace Spectre.Console.SourceGenerator.Spinners;\n\n/// <summary>\n/// Source generator that produces Spinner from spinners_default.json and spinners_sindresorhus.json.\n/// </summary>\n[Generator]\npublic class SpinnerGenerator : IIncrementalGenerator\n{\n    /// <inheritdoc />\n    public void Initialize(IncrementalGeneratorInitializationContext context)\n    {\n        // Find spinners_default.json\n        // Step 1: Extract text (cached by string value equality)\n        // Step 2: Wrap in EquatableArray for value equality when combining\n        var defaultSpinners = context.AdditionalTextsProvider\n            .Where(static file => file.Path.EndsWith(\"spinners_default.json\", StringComparison.OrdinalIgnoreCase))\n            .Select(static (file, ct) =>\n                file.GetText(ct)?.ToString()\n                ?? throw new InvalidOperationException($\"Failed to read spinners_default.json at {file.Path}\"))\n            .Collect()\n            .Select(static (arr, _) => new EquatableArray<string>(arr));\n\n        // Find spinners_sindresorhus.json\n        var sindreSpinners = context.AdditionalTextsProvider\n            .Where(static file => file.Path.EndsWith(\"spinners_sindresorhus.json\", StringComparison.OrdinalIgnoreCase))\n            .Select(static (file, ct) =>\n                file.GetText(ct)?.ToString()\n                ?? throw new InvalidOperationException($\"Failed to read spinners_sindresorhus.json at {file.Path}\"))\n            .Collect()\n            .Select(static (arr, _) => new EquatableArray<string>(arr));\n\n        // Combine both JSON files and parse in the pipeline (for caching)\n        // EquatableArray has value equality, so this step is properly cached\n        var spinners = defaultSpinners.Combine(sindreSpinners)\n            .Select(static (data, _) =>\n            {\n                var (defaultJsonFiles, sindreJsonFiles) = data;\n                if (defaultJsonFiles.IsEmpty || sindreJsonFiles.IsEmpty)\n                {\n                    return EquatableArray<SpinnerModel>.Empty;\n                }\n\n                return SpinnerParser.ParseAll(defaultJsonFiles[0], sindreJsonFiles[0]);\n            });\n\n        // Register source output - only emit, no parsing (parsing is cached above)\n        context.RegisterSourceOutput(spinners, static (spc, models) =>\n        {\n            if (models.IsEmpty)\n            {\n                return;\n            }\n\n            var source = SpinnerEmitter.Emit(models);\n            spc.AddSource(\"Spinner.Generated.g.cs\", SourceText.From(source, Encoding.UTF8));\n        });\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.SourceGenerator/Spinners/SpinnerModel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Text.Json;\n\nnamespace Spectre.Console.SourceGenerator.Spinners;\n\n/// <summary>\n/// Represents a spinner from the JSON data files.\n/// </summary>\ninternal sealed record SpinnerModel(\n    string Name,\n    string NormalizedName,\n    int Interval,\n    bool IsUnicode,\n    EquatableArray<string> Frames);\n\n/// <summary>\n/// Parses spinner data from JSON.\n/// </summary>\ninternal static class SpinnerParser\n{\n    /// <summary>\n    /// Parses spinner JSON files and returns all spinner models.\n    /// Default spinners are processed first, then Sindre Sorhus spinners are appended.\n    /// </summary>\n    public static EquatableArray<SpinnerModel> ParseAll(string defaultJson, string sindreJson)\n    {\n        var spinners = new List<SpinnerModel>();\n\n        // Parse default spinners first\n        ParseSpinners(defaultJson, spinners, pascalizeNames: false);\n\n        // Parse Sindre Sorhus spinners\n        ParseSpinners(sindreJson, spinners, pascalizeNames: true);\n\n        return new EquatableArray<SpinnerModel>(spinners);\n    }\n\n    private static void ParseSpinners(string json, List<SpinnerModel> spinners, bool pascalizeNames)\n    {\n        var document = JsonDocument.Parse(json);\n\n        foreach (var property in document.RootElement.EnumerateObject())\n        {\n            var name = property.Name;\n            var element = property.Value;\n\n            var interval = element.GetProperty(\"interval\").GetInt32();\n            var isUnicode = !element.TryGetProperty(\"unicode\", out var unicodeProp) || unicodeProp.GetBoolean();\n\n            var frames = new List<string>();\n            foreach (var frame in element.GetProperty(\"frames\").EnumerateArray())\n            {\n                var frameStr = frame.GetString()\n                    ?? throw new InvalidOperationException($\"Spinner {name} has null frame\");\n                // Escape backslashes for C# string literals\n                frames.Add(frameStr.Replace(@\"\\\", @\"\\\\\"));\n            }\n\n            var normalizedName = pascalizeNames ? Pascalize(name) : name;\n\n            spinners.Add(new SpinnerModel(\n                Name: name,\n                NormalizedName: normalizedName,\n                Interval: interval,\n                IsUnicode: isUnicode,\n                Frames: new EquatableArray<string>(frames)));\n        }\n    }\n\n    private static string Pascalize(string input)\n    {\n        if (string.IsNullOrEmpty(input))\n        {\n            return input;\n        }\n\n        // Convert first character to uppercase\n        var result = new System.Text.StringBuilder();\n        var capitalizeNext = true;\n\n        foreach (var c in input)\n        {\n            if (char.IsLetterOrDigit(c))\n            {\n                result.Append(capitalizeNext ? char.ToUpperInvariant(c) : c);\n                capitalizeNext = false;\n            }\n            else\n            {\n                capitalizeNext = true;\n            }\n        }\n\n        return result.ToString();\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Testing/.editorconfig",
    "content": "root = false\n\n[*.cs]\n"
  },
  {
    "path": "src/Spectre.Console.Testing/Extensions/ShouldlyExtensions.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Provides extensions for testing using the Shouldly-style fluent assertions.\n/// </summary>\npublic static class ShouldlyExtensions\n{\n    /// <summary>\n    /// Performs the specified action on the given object and then returns the object.\n    /// Useful for fluent testing patterns where additional assertions or operations\n    /// are chained together in a readable manner.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of the object.</typeparam>\n    /// <param name=\"item\">The object to operate on.</param>\n    /// <param name=\"action\">An action to perform on the object.</param>\n    /// <returns>The original object, to allow further chaining.</returns>\n    /// <exception cref=\"ArgumentNullException\">Thrown if <paramref name=\"action\"/> is null.</exception>\n    [DebuggerStepThrough]\n    public static T And<T>(this T item, Action<T> action)\n    {\n        ArgumentNullException.ThrowIfNull(action);\n\n        action(item);\n        return item;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Extensions/StringExtensions.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Contains extensions for <see cref=\"string\"/>.\n/// </summary>\npublic static class StringExtensions\n{\n    /// <summary>\n    /// Returns a new string with all lines trimmed of trailing whitespace.\n    /// </summary>\n    /// <param name=\"value\">The string to trim.</param>\n    /// <returns>A new string with all lines trimmed of trailing whitespace.</returns>\n    public static string TrimLines(this string value)\n    {\n        if (value is null)\n        {\n            return string.Empty;\n        }\n\n        var result = new List<string>();\n        foreach (var line in value.NormalizeLineEndings().Split(['\\n']))\n        {\n            result.Add(line.TrimEnd());\n        }\n\n        return string.Join(\"\\n\", result);\n    }\n\n    /// <summary>\n    /// Returns a new string with normalized line endings.\n    /// </summary>\n    /// <param name=\"value\">The string to normalize line endings for.</param>\n    /// <returns>A new string with normalized line endings.</returns>\n    public static string NormalizeLineEndings(this string value)\n    {\n        if (value != null)\n        {\n            value = value.Replace(\"\\r\\n\", \"\\n\");\n            return value.Replace(\"\\r\", string.Empty);\n        }\n\n        return string.Empty;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Extensions/StyleExtensions.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Contains extensions for <see cref=\"Style\"/>.\n/// </summary>\npublic static class StyleExtensions\n{\n    /// <summary>\n    /// Sets the foreground or background color of the specified style.\n    /// </summary>\n    /// <param name=\"style\">The style.</param>\n    /// <param name=\"color\">The color.</param>\n    /// <param name=\"foreground\">Whether or not to set the foreground color.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static Style SetColor(this Style style, Color color, bool foreground)\n    {\n        if (foreground)\n        {\n            return style.Foreground(color);\n        }\n\n        return style.Background(color);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Extensions/TestConsoleExtensions.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Contains extensions for <see cref=\"TestConsole\"/>.\n/// </summary>\npublic static partial class TestConsoleExtensions\n{\n    /// <summary>\n    /// Sets the console's color system.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"colors\">The color system to use.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole Colors(this TestConsole console, ColorSystem colors)\n    {\n        console.Profile.Capabilities.ColorSystem = colors;\n        return console;\n    }\n\n    /// <summary>\n    /// Sets whether or not ANSI is supported.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"enable\">Whether or not VT/ANSI control codes are supported.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole SupportsAnsi(this TestConsole console, bool enable)\n    {\n        console.Profile.Capabilities.Ansi = enable;\n        return console;\n    }\n\n    /// <summary>\n    /// Sets whether or not Unicode is supported.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"enable\">Whether or not Unicode is supported.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole SupportsUnicode(this TestConsole console, bool enable)\n    {\n        console.Profile.Capabilities.Unicode = enable;\n        return console;\n    }\n\n    /// <summary>\n    /// Makes the console interactive.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole Interactive(this TestConsole console)\n    {\n        console.Profile.Capabilities.Interactive = true;\n        return console;\n    }\n\n    /// <summary>\n    /// Sets the console width.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"width\">The console width.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole Width(this TestConsole console, int width)\n    {\n        console.Profile.Width = width;\n        return console;\n    }\n\n    /// <summary>\n    /// Sets the console height.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"width\">The console height.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole Height(this TestConsole console, int width)\n    {\n        console.Profile.Height = width;\n        return console;\n    }\n\n    /// <summary>\n    /// Sets the console size.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <param name=\"size\">The console size.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole Size(this TestConsole console, Size size)\n    {\n        console.Profile.Width = size.Width;\n        console.Profile.Height = size.Height;\n        return console;\n    }\n\n    /// <summary>\n    /// Turns on emitting of VT/ANSI sequences.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>The same instance so that multiple calls can be chained.</returns>\n    public static TestConsole EmitAnsiSequences(this TestConsole console)\n    {\n        console.SetCursor(null);\n        console.EmitAnsiSequences = true;\n        return console;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Internal/NoopCursor.cs",
    "content": "namespace Spectre.Console.Testing;\n\ninternal sealed class NoopCursor : IAnsiConsoleCursor\n{\n    public void Move(CursorDirection direction, int steps)\n    {\n    }\n\n    public void SetPosition(int column, int line)\n    {\n    }\n\n    public void Show(bool show)\n    {\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Internal/NoopExclusivityMode.cs",
    "content": "namespace Spectre.Console.Testing;\n\ninternal sealed class NoopExclusivityMode : IExclusivityMode\n{\n    public T Run<T>(Func<T> func)\n    {\n        return func();\n    }\n\n    public async Task<T> RunAsync<T>(Func<Task<T>> func)\n    {\n        return await func().ConfigureAwait(false);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/Properties/Usings.cs",
    "content": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.Diagnostics;\nglobal using System.IO;\nglobal using System.Threading;\nglobal using System.Threading.Tasks;\nglobal using Spectre.Console.Rendering;"
  },
  {
    "path": "src/Spectre.Console.Testing/Spectre.Console.Testing.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0;netstandard2.0</TargetFrameworks>\n    <IsTestProject>false</IsTestProject>\n    <IsPackable>true</IsPackable>\n    <Description>Contains testing utilities for Spectre.Console.</Description>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Spectre.Console\\Spectre.Console.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Polyfill\" Condition=\"'$(TargetFramework)' == 'netstandard2.0'\" PrivateAssets=\"all\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Spectre.Console.Testing/TestCapabilities.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Represents fake capabilities useful in tests.\n/// </summary>\npublic sealed class TestCapabilities : IReadOnlyCapabilities\n{\n    /// <inheritdoc/>\n    public ColorSystem ColorSystem { get; set; } = ColorSystem.TrueColor;\n\n    /// <inheritdoc/>\n    public bool Ansi { get; set; }\n\n    /// <inheritdoc/>\n    public bool Links { get; set; }\n\n    /// <inheritdoc/>\n    public bool Legacy { get; set; }\n\n    /// <inheritdoc/>\n    public bool Interactive { get; set; }\n\n    /// <inheritdoc/>\n    public bool Unicode { get; set; }\n\n    /// <inheritdoc/>\n    public bool AlternateBuffer { get; set; }\n\n    /// <summary>\n    /// Creates a <see cref=\"RenderOptions\"/> with the same capabilities as this instance.\n    /// </summary>\n    /// <param name=\"console\">The console.</param>\n    /// <returns>A <see cref=\"RenderOptions\"/> with the same capabilities as this instance.</returns>\n    public RenderOptions CreateRenderContext(IAnsiConsole console)\n    {\n        ArgumentNullException.ThrowIfNull(console);\n\n        return RenderOptions.Create(console, this);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/TestConsole.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// A testable console.\n/// </summary>\npublic sealed class TestConsole : IAnsiConsole, IDisposable\n{\n    private readonly IAnsiConsole _console;\n    private readonly StringWriter _writer;\n    private IAnsiConsoleCursor? _cursor;\n\n    /// <inheritdoc/>\n    public Profile Profile => _console.Profile;\n\n    /// <inheritdoc/>\n    public IExclusivityMode ExclusivityMode => _console.ExclusivityMode;\n\n    /// <summary>\n    /// Gets the console input.\n    /// </summary>\n    public TestConsoleInput Input { get; }\n\n    /// <inheritdoc/>\n    public RenderPipeline Pipeline => _console.Pipeline;\n\n    /// <inheritdoc/>\n    public IAnsiConsoleCursor Cursor => _cursor ?? _console.Cursor;\n\n    /// <inheritdoc/>\n    IAnsiConsoleInput IAnsiConsole.Input => Input;\n\n    /// <summary>\n    /// Gets the console output.\n    /// </summary>\n    public string Output => _writer.ToString();\n\n    /// <summary>\n    /// Gets the console output lines.\n    /// </summary>\n    public IReadOnlyList<string> Lines => Output.NormalizeLineEndings().TrimEnd('\\n').Split(['\\n']);\n\n    /// <summary>\n    /// Gets or sets a value indicating whether or not VT/ANSI sequences\n    /// should be emitted to the console.\n    /// </summary>\n    public bool EmitAnsiSequences { get; set; }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TestConsole\"/> class.\n    /// </summary>\n    public TestConsole()\n    {\n        _writer = new StringWriter();\n        _cursor = new NoopCursor();\n\n        Input = new TestConsoleInput();\n        EmitAnsiSequences = false;\n\n        _console = AnsiConsole.Create(new AnsiConsoleSettings\n        {\n            Ansi = AnsiSupport.Yes,\n            ColorSystem = (ColorSystemSupport)ColorSystem.TrueColor,\n            Out = new AnsiConsoleOutput(_writer),\n            Interactive = InteractionSupport.No,\n            ExclusivityMode = new NoopExclusivityMode(),\n            Enrichment = new ProfileEnrichment\n            {\n                UseDefaultEnrichers = false,\n            },\n        });\n\n        _console.Profile.Width = 80;\n        _console.Profile.Height = 24;\n        _console.Profile.Capabilities.Ansi = true;\n        _console.Profile.Capabilities.Unicode = true;\n    }\n\n    /// <inheritdoc/>\n    public void Dispose()\n    {\n        _writer.Dispose();\n    }\n\n    /// <inheritdoc/>\n    public void Clear(bool home)\n    {\n        _console.Clear(home);\n    }\n\n    /// <inheritdoc/>\n    public void Write(IRenderable renderable)\n    {\n        if (EmitAnsiSequences)\n        {\n            _console.Write(renderable);\n        }\n        else\n        {\n            foreach (var segment in renderable.GetSegments(this))\n            {\n                if (segment.IsControlCode)\n                {\n                    continue;\n                }\n\n                Profile.Out.Writer.Write(segment.Text);\n            }\n        }\n    }\n\n    /// <inheritdoc/>\n    public void WriteAnsi(Action<AnsiWriter> action)\n    {\n        _console.WriteAnsi(action);\n    }\n\n    internal void SetCursor(IAnsiConsoleCursor? cursor)\n    {\n        _cursor = cursor;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Testing/TestConsoleInput.cs",
    "content": "namespace Spectre.Console.Testing;\n\n/// <summary>\n/// Represents a testable console input mechanism.\n/// </summary>\npublic sealed class TestConsoleInput : IAnsiConsoleInput\n{\n    private readonly Queue<ConsoleKeyInfo> _input;\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"TestConsoleInput\"/> class.\n    /// </summary>\n    public TestConsoleInput()\n    {\n        _input = new Queue<ConsoleKeyInfo>();\n    }\n\n    /// <summary>\n    /// Pushes the specified text to the input queue.\n    /// </summary>\n    /// <param name=\"input\">The input string.</param>\n    public void PushText(string input)\n    {\n        ArgumentNullException.ThrowIfNull(input);\n\n        foreach (var character in input)\n        {\n            PushCharacter(character);\n        }\n    }\n\n    /// <summary>\n    /// Pushes the specified text followed by 'Enter' to the input queue.\n    /// </summary>\n    /// <param name=\"input\">The input.</param>\n    public void PushTextWithEnter(string input)\n    {\n        PushText(input);\n        PushKey(ConsoleKey.Enter);\n    }\n\n    /// <summary>\n    /// Pushes the specified character to the input queue.\n    /// </summary>\n    /// <param name=\"input\">The input.</param>\n    public void PushCharacter(char input)\n    {\n        var control = char.IsUpper(input);\n        _input.Enqueue(new ConsoleKeyInfo(input, (ConsoleKey)input, false, false, control));\n    }\n\n    /// <summary>\n    /// Pushes the specified key to the input queue.\n    /// </summary>\n    /// <param name=\"input\">The input.</param>\n    public void PushKey(ConsoleKey input)\n    {\n        _input.Enqueue(new ConsoleKeyInfo((char)input, input, false, false, false));\n    }\n\n    /// <summary>\n    /// Pushes the specified key to the input queue.\n    /// </summary>\n    /// <param name=\"consoleKeyInfo\">The input.</param>\n    public void PushKey(ConsoleKeyInfo consoleKeyInfo)\n    {\n        _input.Enqueue(consoleKeyInfo);\n    }\n\n    /// <inheritdoc/>\n    public bool IsKeyAvailable()\n    {\n        return _input.Count > 0;\n    }\n\n    /// <inheritdoc/>\n    public ConsoleKeyInfo? ReadKey(bool intercept)\n    {\n        if (_input.Count == 0)\n        {\n            throw new InvalidOperationException(\"No input available.\");\n        }\n\n        return _input.Dequeue();\n    }\n\n    /// <inheritdoc/>\n    public Task<ConsoleKeyInfo?> ReadKeyAsync(bool intercept, CancellationToken cancellationToken)\n    {\n        return Task.FromResult(ReadKey(intercept));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Data/Exceptions.cs",
    "content": "namespace Spectre.Console.Tests.Data;\n\npublic static class TestExceptions\n{\n    public static bool MethodThatThrows(int? number) => throw new InvalidOperationException(\"Throwing!\");\n\n    public static bool GenericMethodThatThrows<T0, T1, TRet>(int? number) => throw new InvalidOperationException(\"Throwing!\");\n\n    public static bool MethodThatThrowsGenericException<T>() => throw new GenericException<T>(\"Throwing!\", default!);\n\n    public static void ThrowWithInnerException()\n    {\n        try\n        {\n            MethodThatThrows(null);\n        }\n        catch (Exception ex)\n        {\n            throw new InvalidOperationException(\"Something threw!\", ex);\n        }\n    }\n\n    public static void ThrowWithGenericInnerException()\n    {\n        try\n        {\n            GenericMethodThatThrows<int, float, double>(null);\n        }\n        catch (Exception ex)\n        {\n            throw new InvalidOperationException(\"Something threw!\", ex);\n        }\n    }\n\n    public static List<T> GenericMethodWithOutThatThrows<T>(out List<T> firstFewItems)\n    {\n        firstFewItems = [];\n        throw new InvalidOperationException(\"Throwing!\");\n    }\n\n    public static (string Key, List<T> Values) GetTuplesWithInnerException<T>((int First, string Second) myValue)\n    {\n        MethodThatThrows(0);\n        return (\"key\", []);\n    }\n}\n\n#pragma warning disable CS9113 // Parameter is unread.\npublic class GenericException<T>(string message, T value) : Exception(message);"
  },
  {
    "path": "src/Spectre.Console.Tests/Data/example.json",
    "content": "{\n  \"id\": \"0001\",\n  \"type\": \"donut\",\n  \"name\": \"Cake\",\n  \"ppu\": 0.55,\n  \"foo\": true,\n  \"bar\": false,\n  \"qux\": 32,\n  \"corgi\": null,\n  \"batters\": {\n    \"batter\": [\n      {\n        \"id\": \"1001\",\n        \"type\": \"Regular\",\n        \"min\": 0\n      },\n      {\n        \"id\": \"1002\",\n        \"type\": \"Chocolate\",\n        \"min\": 0.32\n      },\n      {\n        \"id\": \"1003\",\n        \"min\": 12.32,\n        \"type\": \"Blueberry\"\n      },\n      {\n        \"id\": \"1004\",\n        \"min\": 0.32E-12,\n        \"type\": \"Devil's Food\"\n      }\n    ]\n  },\n  \"topping\": [\n    {\n      \"id\": \"5001\",\n      \"min\": 0.32e-12,\n      \"type\": \"None\"\n    },\n    {\n      \"id\": \"5002\",\n      \"min\": 0.32E+12,\n      \"type\": \"Glazed\"\n    },\n    {\n      \"id\": \"5005\",\n      \"min\": 0.32e+12,\n      \"type\": \"Sugar\"\n    },\n    {\n      \"id\": \"5007\",\n      \"min\": 0.32e12,\n      \"type\": \"Powdered Sugar\"\n    },\n    {\n      \"id\": \"5006\",\n      \"type\": \"Chocolate with Sprinkles\"\n    },\n    {\n      \"id\": \"5003\",\n      \"type\": \"Chocolate\"\n    },\n    {\n      \"id\": \"5004\",\n      \"type\": \"Maple\"\n    }\n  ]\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Data/poison.flf",
    "content": "flf2a$ 12 10 20 -1 14\npoison.flf composed into figlet by Vinney Thai <ssfiit@eris.cc.umb.edu>\npoison font (numbers & puntuation marks) composed by Vinney Thai\npoison font (uppercase characters) composed David Issel <dissel@nunic.nu.edu>\ndate: Oct 23, 1994\nExplanation of first line:\nflf2 - \"magic number\" for file identification\na    - should always be `a', for now\n$    - the \"hardblank\" -- prints as a blank, but can't be smushed\n12   - height of a character\n10   - height of a character, not including descenders\n20   - max line length (excluding comment lines) + a fudge factor\n-1   - default smushmode for this font (like \"-m 0\" on command line)\n15   - number of comment lines\n\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@@\n     @\n@@@ $@\n@@@ $@\n@@! $@\n!@  $@\n@!@ $@\n!!! $@\n     @\n:!: $@\n :: $@\n::: $@\n     @@\n         @\n@@@ @@@ $@\n@@@ @@@ $@\n@@! @@! $@\n @!  @! $@\n  $   $  @\n  $   $  @\n  $   $  @\n  $   $  @\n  $   $  @\n  $   $  @\n         @@\n              @\n  @@@  @@@ $  @\n  @@@  @@@ $  @\n@!@@!@!@@@@! $@\n!@!@!!@@!@!@ $@\n  @!@  !@! $  @\n  !!!  !!! $  @\n!:!!:!:!!!!: $@\n:!:!::!!:!:! $@\n  ::   ::: $  @\n   :   : : $  @\n              @@\n            @\n    @@ $    @\n @@@@@@@@@ $@\n!@@!@@!@@! $@\n!@! !@ $    @\n!!!@@!!!! $ @\n !!!@@@!!! $@\n    !: !:! $@\n!:!!:!: :! $@\n: :::: :: $ @\n    :: $    @\n            @@\n              @\n@@@@     @@@ $@\n@@@@    @@@ $ @\n@@!@   @@! $  @\n      !@! $   @\n     @!! $    @\n    !!! $     @\n   !!: $      @\n  ::!   ::!: $@\n  ::    :::  $@\n: :     : :: $@\n              @@\n             @\n  @@@@@ $    @\n @@@@@@@ $   @\n@@!   @@@ $  @\n !@  @!@ $   @\n  @!@!@ $    @\n  !!!@  !!! $@\n !!:!!:!!: $ @\n:!:  !:!: $  @\n::: :::::: $ @\n ::: :: ::: $@\n             @@\n     @\n@@@ $@\n @@ $@\n@! $ @\n $   @\n $   @\n $   @\n $   @\n $   @\n $   @\n $   @\n     @@\n        @\n   @@@ $@\n  @@@ $ @\n @@! $  @\n!@! $   @\n!!@ $   @\n!!! $   @\n!!: $   @\n :!: $  @\n   :: $ @\n     : $@\n        @@\n        @\n@@@ $   @\n @@@ $  @\n  @@! $ @\n   !@! $@\n   !!@ $@\n   !!! $@\n   !!: $@\n  :!: $ @\n :: $   @\n: $     @\n        @@\n            @\n            @\n@@!    !@@ $@\n !@!  @!! $ @\n  !@@!@! $  @\n@!@!@!!@!! $@\n  !: :!! $  @\n :!:  !:! $ @\n:::    ::: $@\n            @\n            @\n            @@\n           @\n           @\n           @\n   @@! $   @\n   !@! $   @\n@!@!@!@!@ $@\n!!!@!@!!! $@\n   !!: $   @\n   :!: $   @\n           @\n           @\n           @@\n     @\n     @\n     @\n     @\n     @\n     @\n     @\n     @\n:!: $@\n :: $@\n:: $ @\n     @@\n           @\n           @\n           @\n           @\n           @\n@!@!@!@!@ $@\n!!!@!@!!! $@\n           @\n           @\n           @\n           @\n           @@\n     @\n     @\n     @\n     @\n     @\n     @\n     @\n     @\n:!: $@\n::: $@\n::: $@\n     @@\n              @\n         @@@ $@\n        @@@ $ @\n       @@! $  @\n      !@! $   @\n     @!! $    @\n    !!! $     @\n   !!: $      @\n  ::! $       @\n  :: $        @\n: : $         @\n              @@\n            @\n @@@@@@@@ $ @\n@@@@@@@@@@ $@\n@@!   @@@@ $@\n!@!  @!@!@ $@\n@!@ @! !@! $@\n!@!!!  !!! $@\n!!:!   !!! $@\n:!:    !:! $@\n::::::: :: $@\n : : :  : $ @\n            @@\n       @\n  @@@ $@\n @@@@ $@\n@@@!! $@\n  !@! $@\n  @!@ $@\n  !@! $@\n  !!: $@\n  :!: $@\n  ::: $@\n   :: $@\n       @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n     @@@ $@\n    @!@ $ @\n   !!@ $  @\n  !!: $   @\n !:! $    @\n:!: $     @\n:: ::::: $@\n:: : ::: $@\n          @@\n         @\n@@@@@@ $ @\n@@@@@@@ $@\n    @@@ $@\n    @!@ $@\n@!@!!@ $ @\n!!@!@! $ @\n    !!: $@\n    :!: $@\n:: :::: $@\n : : : $ @\n         @@\n           @\n     @@@ $ @\n    @@@@ $ @\n   @@!@! $ @\n  !@!!@! $ @\n @!! @!! $ @\n!!!  !@! $ @\n:!!:!:!!: $@\n!:::!!::: $@\n     ::: $ @\n     ::: $ @\n           @@\n         @\n@@@@@@@ $@\n@@@@@@@ $@\n!@@ $    @\n!@! $    @\n!!@@!! $ @\n@!!@!!! $@\n    !:! $@\n    !:! $@\n:::: :: $@\n:: : : $ @\n         @@\n          @\n  @@@@@@ $@\n @@@@@@@ $@\n!@@ $     @\n!@! $     @\n!!@@!@! $ @\n@!!@!!!! $@\n!:!  !:! $@\n:!:  !:! $@\n:::: ::: $@\n :: : : $ @\n          @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n     @@! $@\n    !@! $ @\n   @!! $  @\n  !!! $   @\n !!: $    @\n:!: $     @\n :: $     @\n: : $     @\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n !@!!@! $ @\n !!@!!! $ @\n!!:  !!! $@\n:!:  !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n!!@!!@!! $@\n  !!@!!! $@\n     !!! $@\n     !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n     @\n     @\n     @\n     @\n@!@ $@\n!@! $@\n!:! $@\n $$  @\n:!: $@\n::: $@\n::: $@\n     @@\n     @\n     @\n     @\n     @\n@!@  @\n!@! $@\n:!: $@\n $$  @\n:!: $@\n :: $@\n:: $ @\n     @@\n             @\n        @@@ $@\n      @@@ $  @\n    @@! $    @\n  !@! $      @\n!!@ $        @\n!!! $        @\n  !!: $      @\n    :!: $    @\n      :: $   @\n        : $  @\n             @@\n           @\n           @\n           @\n           @\n!@!!@!!@! $@\n@!@!@!@!@ $@\n $      $  @\n!!:!!::!! $@\n::!:!:!!: $@\n           @\n           @\n           @@\n             @\n@@@ $        @\n  @@@ $      @\n    @@! $    @\n      !@! $  @\n        !!@ $@\n        !!! $@\n      !!: $  @\n    :!: $    @\n  :: $       @\n: $          @\n             @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n    @!@ $ @\n   !!@ $  @\n  !!@ $   @\n          @\n  !:! $   @\n   :: $   @\n  ::: $   @\n          @@\n            @\n @@@@@@@@ $ @\n@@@@@@@@@@ $@\n@@!    @@@ $@\n!@! @!@!!@ $@\n@!@ !@@!@! $@\n!@! @@!@!! $@\n!!:  !:!! $ @\n:!: $       @\n:::::::::: $@\n : : :: : $ @\n            @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!@!@! $@\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@   @!@ $@\n@!@!@!@ $ @\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n :: :::: $@\n:: : :: $ @\n          @@\n          @\n @@@@@@@ $@\n@@@@@@@@ $@\n!@@ $     @\n!@! $     @\n!@! $     @\n!!! $     @\n:!! $     @\n:!: $     @\n ::: ::: $@\n :: :: : $@\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n :::: :: $@\n:: :  : $ @\n          @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n@@! $     @\n!@! $     @\n@!!!:! $  @\n!!!!!: $  @\n!!: $     @\n:!: $     @\n :: :::: $@\n: :: :: $ @\n          @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n@@! $     @\n!@! $     @\n@!!!:! $  @\n!!!!!: $  @\n!!: $     @\n:!: $     @\n :: $     @\n : $      @\n          @@\n           @\n @@@@@@@@ $@\n@@@@@@@@@ $@\n!@@ $      @\n!@! $      @\n!@! @!@!@ $@\n!!! !!@!! $@\n:!!   !!: $@\n:!:   !:: $@\n ::: :::: $@\n :: :: : $ @\n           @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!@!@! $@\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n     @\n@@@ $@\n@@@ $@\n@@! $@\n!@! $@\n!!@ $@\n!!! $@\n!!: $@\n:!: $@\n :: $@\n: $  @\n     @@\n          @\n     @@@ $@\n     @@@ $@\n     @@! $@\n     !@! $@\n     !!@ $@\n     !!! $@\n     !!: $@\n!!:  :!: $@\n::: : :: $@\n : ::: $  @\n          @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  !@@ $@\n!@!  @!! $@\n@!@@!@! $ @\n!!@!!! $  @\n!!: :!! $ @\n:!:  !:! $@\n ::  ::: $@\n :   ::: $@\n          @@\n          @\n@@@      $@\n@@@      $@\n@@!      $@\n!@!      $@\n@!!      $@\n!!!      $@\n!!:      $@\n :!:     $@\n :: :::: $@\n: :: : : $@\n          @@\n             @\n@@@@@@@@@@ $ @\n@@@@@@@@@@@ $@\n@@! @@! @@! $@\n!@! !@! !@! $@\n@!! !!@ @!@ $@\n!@!   ! !@! $@\n!!:     !!: $@\n:!:     :!: $@\n:::     :: $ @\n :      : $  @\n             @@\n          @\n@@@  @@@ $@\n@@@@ @@@ $@\n@@!@!@@@ $@\n!@!!@!@! $@\n@!@ !!@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n ::   :: $@\n::    : $ @\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@@!@! $ @\n!!@!!! $  @\n!!: $     @\n:!: $     @\n :: $     @\n : $      @\n          @@\n           @\n @@@@@@ $  @\n@@@@@@@@ $ @\n@@!  @@@ $ @\n!@!  @!@ $ @\n@!@  !@! $ @\n!@!  !!! $ @\n!!:!!:!: $ @\n:!: :!:  $ @\n::::: :! $ @\n : :  ::: $@\n           @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!!@! $ @\n!!@!@! $  @\n!!: :!! $ @\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@ $ @\n!@@ $     @\n!@! $     @\n!!@@!! $  @\n !!@!!! $ @\n     !:! $@\n    !:! $ @\n:::: :: $ @\n:: : : $  @\n          @@\n         @\n@@@@@@@ $@\n@@@@@@@ $@\n  @@! $  @\n  !@! $  @\n  @!! $  @\n  !!! $  @\n  !!: $  @\n  :!: $  @\n   :: $  @\n   : $   @\n         @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n:!:  !!: $@\n ::!!:! $ @\n  :::: $  @\n   : $    @\n          @@\n               @\n@@@  @@@  @@@ $@\n@@@  @@@  @@@ $@\n@@!  @@!  @@! $@\n!@!  !@!  !@! $@\n@!!  !!@  @!@ $@\n!@!  !!!  !@! $@\n!!:  !!:  !!: $@\n:!:  :!:  :!: $@\n :::: :: ::: $ @\n  :: :  : : $  @\n               @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  !@@ $@\n!@!  @!! $@\n !@@!@! $ @\n  @!!! $  @\n !: :!! $ @\n:!:  !:! $@\n ::  ::: $@\n :   :: $ @\n          @@\n         @\n@@@ @@@ $@\n@@@ @@@ $@\n@@! !@@ $@\n!@! @!! $@\n !@!@! $ @\n  @!!! $ @\n  !!: $  @\n  :!: $  @\n   :: $  @\n   : $   @\n         @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n     @@! $@\n    !@! $ @\n   @!! $  @\n  !!! $   @\n !!: $    @\n:!: $     @\n :: :::: $@\n: :: : : $@\n          @@\n       @\n@@@@@ $@\n@@@@@ $@\n@@! $  @\n!@! $  @\n@!@ $  @\n!!! $  @\n!!: $  @\n:!: $  @\n::::: $@\n : : $ @\n       @@\n               @\n @@@ $         @\n  @@@ $        @\n   @@! $       @\n    !@! $      @\n     @!! $     @\n      !!! $    @\n       !!: $   @\n        ::! $  @\n         :: $  @\n          : : $@\n               @@\n       @\n@@@@@ $@\n@@@@@ $@\n  @@! $@\n  !@! $@\n  @!@ $@\n  !!! $@\n  !!: $@\n  :!: $@\n::::: $@\n : : $ @\n       @@\n                @\n     @@@@@ $    @\n   @@@@ @@@@ $  @\n @!@!     @!@! $@\n   $        $   @\n   $        $   @\n   $        $   @\n   $        $   @\n   $        $   @\n   $        $   @\n   $        $   @\n                @@\n               @\n              $@\n              $@\n              $@\n              $@\n              $@\n              $@\n              $@\n              $@\n::::::::::::: $@\n::::::::::::: $@\n               @@\n     @\n@@@ $@\n@@ $ @\n @! $@\n  $  @\n  $  @\n  $  @\n  $  @\n  $  @\n  $  @\n  $  @\n     @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!@!@! $@\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@   @!@ $@\n@!@!@!@ $ @\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n :: :::: $@\n:: : :: $ @\n          @@\n          @\n @@@@@@@ $@\n@@@@@@@@ $@\n!@@ $     @\n!@! $     @\n!@! $     @\n!!! $     @\n:!! $     @\n:!: $     @\n ::: ::: $@\n :: :: : $@\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n :::: :: $@\n:: :  : $ @\n          @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n@@! $     @\n!@! $     @\n@!!!:! $  @\n!!!!!: $  @\n!!: $     @\n:!: $     @\n :: :::: $@\n: :: :: $ @\n          @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n@@! $     @\n!@! $     @\n@!!!:! $  @\n!!!!!: $  @\n!!: $     @\n:!: $     @\n :: $     @\n : $      @\n          @@\n           @\n @@@@@@@@ $@\n@@@@@@@@@ $@\n!@@ $      @\n!@! $      @\n!@! @!@!@ $@\n!!! !!@!! $@\n:!!   !!: $@\n:!:   !:: $@\n ::: :::: $@\n :: :: : $ @\n           @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!@!@! $@\n!!!@!!!! $@\n!!:  !!! $@\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n     @\n@@@ $@\n@@@ $@\n@@! $@\n!@! $@\n!!@ $@\n!!! $@\n!!: $@\n:!: $@\n :: $@\n: $  @\n     @@\n          @\n     @@@ $@\n     @@@ $@\n     @@! $@\n     !@! $@\n     !!@ $@\n     !!! $@\n     !!: $@\n!!:  :!: $@\n::: : :: $@\n : ::: $  @\n          @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  !@@ $@\n!@!  @!! $@\n@!@@!@! $ @\n!!@!!! $  @\n!!: :!! $ @\n:!:  !:! $@\n ::  ::: $@\n :   ::: $@\n          @@\n          @\n@@@      $@\n@@@      $@\n@@!      $@\n!@!      $@\n@!!      $@\n!!!      $@\n!!:      $@\n :!:     $@\n :: :::: $@\n: :: : : $@\n          @@\n             @\n@@@@@@@@@@ $ @\n@@@@@@@@@@@ $@\n@@! @@! @@! $@\n!@! !@! !@! $@\n@!! !!@ @!@ $@\n!@!   ! !@! $@\n!!:     !!: $@\n:!:     :!: $@\n:::     :: $ @\n :      : $  @\n             @@\n          @\n@@@  @@@ $@\n@@@@ @@@ $@\n@@!@!@@@ $@\n!@!!@!@! $@\n@!@ !!@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n ::   :: $@\n::    : $ @\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@@!@! $ @\n!!@!!! $  @\n!!: $     @\n:!: $     @\n :: $     @\n : $      @\n          @@\n           @\n @@@@@@ $  @\n@@@@@@@@ $ @\n@@!  @@@ $ @\n!@!  @!@ $ @\n@!@  !@! $ @\n!@!  !!! $ @\n!!:!!:!: $ @\n:!: :!:  $ @\n::::: :! $ @\n : :  ::: $@\n           @@\n          @\n@@@@@@@ $ @\n@@@@@@@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@!!@! $ @\n!!@!@! $  @\n!!: :!! $ @\n:!:  !:! $@\n::   ::: $@\n :   : : $@\n          @@\n          @\n @@@@@@ $ @\n@@@@@@@ $ @\n!@@ $     @\n!@! $     @\n!!@@!! $  @\n !!@!!! $ @\n     !:! $@\n    !:! $ @\n:::: :: $ @\n:: : : $  @\n          @@\n         @\n@@@@@@@ $@\n@@@@@@@ $@\n  @@! $  @\n  !@! $  @\n  @!! $  @\n  !!! $  @\n  !!: $  @\n  :!: $  @\n   :: $  @\n   : $   @\n         @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n!!:  !!! $@\n:!:  !:! $@\n::::: :: $@\n : :  : $ @\n          @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  @@@ $@\n!@!  @!@ $@\n@!@  !@! $@\n!@!  !!! $@\n:!:  !!: $@\n ::!!:! $ @\n  :::: $  @\n   : $    @\n          @@\n               @\n@@@  @@@  @@@ $@\n@@@  @@@  @@@ $@\n@@!  @@!  @@! $@\n!@!  !@!  !@! $@\n@!!  !!@  @!@ $@\n!@!  !!!  !@! $@\n!!:  !!:  !!: $@\n:!:  :!:  :!: $@\n :::: :: ::: $ @\n  :: :  : : $  @\n               @@\n          @\n@@@  @@@ $@\n@@@  @@@ $@\n@@!  !@@ $@\n!@!  @!! $@\n !@@!@! $ @\n  @!!! $  @\n !: :!! $ @\n:!:  !:! $@\n ::  ::: $@\n :   :: $ @\n          @@\n         @\n@@@ @@@ $@\n@@@ @@@ $@\n@@! !@@ $@\n!@! @!! $@\n !@!@! $ @\n  @!!! $ @\n  !!: $  @\n  :!: $  @\n   :: $  @\n   : $   @\n         @@\n          @\n@@@@@@@@ $@\n@@@@@@@@ $@\n     @@! $@\n    !@! $ @\n   @!! $  @\n  !!! $   @\n !!: $    @\n:!: $     @\n :: :::: $@\n: :: : : $@\n          @@\n          @\n   @@@@@ $@\n   @@@@@ $@\n  @@! $   @\n  !@! $   @\n@!@ $     @\n!!! $     @\n  !!: $   @\n  :!: $   @\n   ::::: $@\n    : : $ @\n          @@\n     @\n@@@ $@\n@@@ $@\n@@! $@\n!@! $@\n $$  @\n!!! $@\n!!: $@\n:!: $@\n:: $ @\n : $ @\n     @@\n          @\n@@@@@ $   @\n@@@@@ $   @\n   @@! $  @\n   !@! $  @\n     @!@ $@\n     !!! $@\n   !!: $  @\n   :!: $  @\n::::: $   @\n : : $    @\n          @@\n               @\n               @\n   !@!    @!@ $@\n @!@!@!@!@!@ $ @\n!!!    !@! $   @\n  $      $     @\n  $      $     @\n  $      $     @\n  $      $     @\n  $      $     @\n  $      $     @\n               @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @\n  @@\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Data/starwars.flf",
    "content": "flf2a$ 7 6 22 15 4\nstarwars.flf by Ryan Youck (youck@cs.uregina.ca) Dec 25/1994\nI am not responsible for use of this font  \nBased on Big.flf by Glenn Chappell\n\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@\n$ $@@\n __ $@\n|  |$@\n|  |$@\n|  |$@\n|__|$@\n(__)$@\n    $@@\n _ _ @\n( | )@\n V V @\n  $  @\n  $  @\n  $  @\n     @@\n   _  _   @\n _| || |_$@\n|_  __  _|@\n _| || |_ @\n|_  __  _|@\n  |_||_| $@\n          @@\n     __,--,_.@\n    /       |@\n   |   (----`@\n    \\   \\   $@\n.----)   |  $@\n|_    __/   $@\n  '--'      $@@\n  _     ___$ @\n / \\   /  /$ @\n( o ) /  / $ @\n \\_/ /  / _$ @\n    /  / / \\ @\n   /  / ( o )@\n  /__/   \\_/ @@\n        @\n  ___   @\n ( _ ) $@\n / _ \\/\\@\n| (_>  <@\n \\___/\\/@\n       $@@\n __ @\n(_ )@\n |/ @\n  $ @\n  $ @\n  $ @\n    @@\n  ___@\n /  /@\n|  |$@\n|  |$@\n|  |$@\n|  |$@\n \\__\\@@\n___  @\n\\  \\ @\n |  |@\n |  |@\n |  |@\n |  |@\n/__/ @@\n    _    @\n /\\| |/\\ @\n \\ ` ' /$@\n|_     _|@\n / , . \\$@\n \\/|_|\\/ @\n         @@\n       @\n   _   @\n _| |_$@\n|_   _|@\n  |_| $@\n   $   @\n       @@\n    @\n    @\n  $ @\n  $ @\n __ @\n(_ )@\n |/ @@\n        @\n        @\n ______ @\n|______|@\n    $   @\n    $   @\n        @@\n    @\n    @\n    @\n  $ @\n __ @\n(__)@\n    @@\n     ___@\n    /  /@\n   /  / @\n  /  /$ @\n /  /$  @\n/__/$   @\n        @@\n  ___  $@\n / _ \\ $@\n| | | |$@\n| | | |$@\n| |_| |$@\n \\___/ $@\n       $@@\n __ $@\n/_ |$@\n | |$@\n | |$@\n | |$@\n |_|$@\n    $@@\n ___  $@\n|__ \\ $@\n  $) |$@\n  / / $@\n / /_ $@\n|____|$@\n      $@@\n ____  $@\n|___ \\ $@\n  __) |$@\n |__ < $@\n ___) |$@\n|____/ $@\n       $@@\n _  _   $@\n| || |  $@\n| || |_ $@\n|__   _|$@\n   | |  $@\n   |_|  $@\n        $@@\n _____ $@\n| ____|$@\n| |__  $@\n|___ \\ $@\n ___) |$@\n|____/ $@\n       $@@\n   __  $@\n  / /  $@\n / /_  $@\n| '_ \\ $@\n| (_) |$@\n \\___/ $@\n       $@@\n ______ $@\n|____  |$@\n   $/ / $@\n   / /  $@\n  / /   $@\n /_/    $@\n        $@@\n  ___  $@\n / _ \\ $@\n| (_) |$@\n > _ < $@\n| (_) |$@\n \\___/ $@\n       $@@\n  ___  $@\n / _ \\ $@\n| (_) |$@\n \\__, |$@\n   / / $@\n  /_/  $@\n       $@@\n   @\n _ @\n(_)@\n $ @\n _ @\n(_)@\n   @@\n   @\n _ @\n(_)@\n $ @\n _ @\n( )@\n|/ @@\n   ___@\n  /  /@\n /  /$@\n<  <$ @\n \\  \\$@\n  \\__\\@\n      @@\n        @\n ______ @\n|______|@\n ______ @\n|______|@\n        @\n        @@\n___   @\n\\  \\$ @\n \\  \\ @\n  >  >@\n /  / @\n/__/$ @\n      @@\n ______  $@\n|      \\ $@\n`----)  |$@\n    /  / $@\n   |__|  $@\n    __   $@\n   (__)  $@@\n   ____  @\n  / __ \\ @\n / / _` |@\n| | (_| |@\n \\ \\__,_|@\n  \\____/ @\n         @@\n     ___  $   @\n    /   \\ $   @\n   /  ^  \\$   @\n  /  /_\\  \\$  @\n /  _____  \\$ @\n/__/     \\__\\$@\n             $@@\n.______  $@\n|   _  \\ $@\n|  |_)  |$@\n|   _  < $@\n|  |_)  |$@\n|______/ $@\n         $@@\n  ______$@\n /      |@\n|  ,----'@\n|  |    $@\n|  `----.@\n \\______|@\n        $@@\n _______ $@\n|       \\$@\n|  .--.  |@\n|  |  |  |@\n|  '--'  |@\n|_______/$@\n         $@@\n _______ @\n|   ____|@\n|  |__  $@\n|   __| $@\n|  |____ @\n|_______|@\n         @@\n _______ @\n|   ____|@\n|  |__  $@\n|   __| $@\n|  |   $ @\n|__|     @\n         @@\n  _______ @\n /  _____|@\n|  |  __ $@\n|  | |_ |$@\n|  |__| |$@\n \\______|$@\n         $@@\n __    __ $@\n|  |  |  |$@\n|  |__|  |$@\n|   __   |$@\n|  |  |  |$@\n|__|  |__|$@\n          $@@\n __ $@\n|  |$@\n|  |$@\n|  |$@\n|  |$@\n|__|$@\n    $@@\n       __ $@\n      |  |$@\n      |  |$@\n.--.  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n __  ___$@\n|  |/  /$@\n|  '  / $@\n|    <  $@\n|  .  \\ $@\n|__|\\__\\$@\n        $@@\n __     $@\n|  |    $@\n|  |    $@\n|  |    $@\n|  `----.@\n|_______|@\n        $@@\n.___  ___.$@\n|   \\/   |$@\n|  \\  /  |$@\n|  |\\/|  |$@\n|  |  |  |$@\n|__|  |__|$@\n          $@@\n.__   __.$@\n|  \\ |  |$@\n|   \\|  |$@\n|  . `  |$@\n|  |\\   |$@\n|__| \\__|$@\n         $@@\n  ______  $@\n /  __  \\ $@\n|  |  |  |$@\n|  |  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n.______  $@\n|   _  \\ $@\n|  |_)  |$@\n|   ___/ $@\n|  |  $   @\n| _|  $   @\n      $   @@\n  ______    $ @\n /  __  \\   $ @\n|  |  |  |  $ @\n|  |  |  |  $ @\n|  `--'  '--. @\n \\_____\\_____\\@\n            $ @@\n.______    $ @\n|   _  \\   $ @\n|  |_)  |  $ @\n|      /   $ @\n|  |\\  \\----.@\n| _| `._____|@\n            $@@\n     _______.@\n    /       |@\n   |   (----`@\n    \\   \\   $@\n.----)   |  $@\n|_______/   $@\n            $@@\n.___________.@\n|           |@\n`---|  |----`@\n    |  |   $ @\n    |  |   $ @\n    |__|   $ @\n           $ @@\n __    __ $@\n|  |  |  |$@\n|  |  |  |$@\n|  |  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n____    ____$@\n\\   \\  /   /$@\n \\   \\/   /$ @\n  \\      /$  @\n   \\    /$   @\n    \\__/$    @\n        $    @@\n____    __    ____$@\n\\   \\  /  \\  /   /$@\n \\   \\/    \\/   /$ @\n  \\            /$  @\n   \\    /\\    /$   @\n    \\__/  \\__/$    @\n              $    @@\n___   ___$@\n\\  \\ /  /$@\n \\  V  / $@\n  >   <  $@\n /  .  \\ $@\n/__/ \\__\\$@\n         $@@\n____    ____$@\n\\   \\  /   /$@\n \\   \\/   /$ @\n  \\_    _/$  @\n    |  |$    @\n    |__|$    @\n        $    @@\n ________ $@\n|       / $@\n`---/  /  $@\n   /  /   $@\n  /  /----.@\n /________|@\n          $@@\n ____ @\n|    |@\n|  |-`@\n|  | $@\n|  | $@\n|  |-.@\n|____|@@\n___     @\n\\  \\ $  @\n \\  \\$  @\n  \\  \\$ @\n   \\  \\$@\n    \\__\\@\n        @@\n ____ @\n|    |@\n`-|  |@\n  |  |@\n  |  |@\n.-|  |@\n|____|@@\n  ___  @\n /   \\ @\n/--^--\\@\n      $@\n      $@\n      $@\n      $@@\n        @\n        @\n        @\n    $   @\n    $   @\n ______ @\n|______|@@\n __ @\n( _)@\n \\| @\n  $ @\n  $ @\n  $ @\n    @@\n     ___  $   @\n    /   \\ $   @\n   /  ^  \\$   @\n  /  /_\\  \\$  @\n /  _____  \\$ @\n/__/     \\__\\$@\n             $@@\n.______  $@\n|   _  \\ $@\n|  |_)  |$@\n|   _  < $@\n|  |_)  |$@\n|______/ $@\n         $@@\n  ______$@\n /      |@\n|  ,----'@\n|  |    $@\n|  `----.@\n \\______|@\n        $@@\n _______ $@\n|       \\$@\n|  .--.  |@\n|  |  |  |@\n|  '--'  |@\n|_______/$@\n         $@@\n _______ @\n|   ____|@\n|  |__  $@\n|   __| $@\n|  |____ @\n|_______|@\n         @@\n _______ @\n|   ____|@\n|  |__  $@\n|   __| $@\n|  |   $ @\n|__|     @\n         @@\n  _______ @\n /  _____|@\n|  |  __ $@\n|  | |_ |$@\n|  |__| |$@\n \\______|$@\n         $@@\n __    __ $@\n|  |  |  |$@\n|  |__|  |$@\n|   __   |$@\n|  |  |  |$@\n|__|  |__|$@\n          $@@\n __ $@\n|  |$@\n|  |$@\n|  |$@\n|  |$@\n|__|$@\n    $@@\n       __ $@\n      |  |$@\n      |  |$@\n.--.  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n __  ___$@\n|  |/  /$@\n|  '  / $@\n|    <  $@\n|  .  \\ $@\n|__|\\__\\$@\n        $@@\n __     $@\n|  |    $@\n|  |    $@\n|  |    $@\n|  `----.@\n|_______|@\n        $@@\n.___  ___.$@\n|   \\/   |$@\n|  \\  /  |$@\n|  |\\/|  |$@\n|  |  |  |$@\n|__|  |__|$@\n          $@@\n.__   __.$@\n|  \\ |  |$@\n|   \\|  |$@\n|  . `  |$@\n|  |\\   |$@\n|__| \\__|$@\n         $@@\n  ______  $@\n /  __  \\ $@\n|  |  |  |$@\n|  |  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n.______  $@\n|   _  \\ $@\n|  |_)  |$@\n|   ___/ $@\n|  |  $   @\n| _|  $   @\n      $   @@\n  ______    $ @\n /  __  \\   $ @\n|  |  |  |  $ @\n|  |  |  |  $ @\n|  `--'  '--. @\n \\_____\\_____\\@\n            $ @@\n.______    $ @\n|   _  \\   $ @\n|  |_)  |  $ @\n|      /   $ @\n|  |\\  \\----.@\n| _| `._____|@\n            $@@\n     _______.@\n    /       |@\n   |   (----`@\n    \\   \\   $@\n.----)   |  $@\n|_______/   $@\n            $@@\n.___________.@\n|           |@\n`---|  |----`@\n    |  |   $ @\n    |  |   $ @\n    |__|   $ @\n           $ @@\n __    __ $@\n|  |  |  |$@\n|  |  |  |$@\n|  |  |  |$@\n|  `--'  |$@\n \\______/ $@\n          $@@\n____    ____$@\n\\   \\  /   /$@\n \\   \\/   /$ @\n  \\      /$  @\n   \\    /$   @\n    \\__/$    @\n        $    @@\n____    __    ____$@\n\\   \\  /  \\  /   /$@\n \\   \\/    \\/   /$ @\n  \\            /$  @\n   \\    /\\    /$   @\n    \\__/  \\__/$    @\n              $    @@\n___   ___$@\n\\  \\ /  /$@\n \\  V  / $@\n  >   <  $@\n /  .  \\ $@\n/__/ \\__\\$@\n         $@@\n____    ____$@\n\\   \\  /   /$@\n \\   \\/   /$ @\n  \\_    _/$  @\n    |  |$    @\n    |__|$    @\n        $    @@\n ________ $@\n|       / $@\n`---/  /  $@\n   /  /   $@\n  /  /----.@\n /________|@\n          $@@\n   ___@\n  /  /@\n |  |$@\n/  /$ @\n\\  \\$ @\n |  |$@\n  \\__\\@@\n __ $@\n|  |$@\n|  |$@\n|  |$@\n|  |$@\n|  |$@\n|__|$@@\n___   @\n\\  \\$ @\n |  | @\n  \\  \\@\n  /  /@\n |  | @\n/__/$ @@\n  __  _ @\n /  \\/ |@\n|_/\\__/ @\n     $  @\n     $  @\n     $  @\n        @@\n  _   _  @\n (_)_(_) @\n   / \\   @\n  / _ \\  @\n / ___ \\ @\n/_/   \\_\\@\n         @@\n _   _ @\n(_)_(_)@\n / _ \\ @\n| | | |@\n| |_| |@\n \\___/ @\n       @@\n _   _ @\n(_) (_)@\n| | | |@\n| | | |@\n| |_| |@\n \\___/ @\n       @@\n _   _ @\n(_) (_)@\n  __ _ @\n / _` |@\n| (_| |@\n \\__,_|@\n       @@\n _   _ @\n(_) (_)@\n  ___  @\n / _ \\ @\n| (_) |@\n \\___/ @\n       @@\n _   _ @\n(_) (_)@\n _   _ @\n| | | |@\n| |_| |@\n \\__,_|@\n       @@\n  ___  @\n / _ \\ @\n| | ) |@\n| |< < @\n| | ) |@\n| ||_/ @\n|_|    @@\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/AlternateScreen/Show.Output.verified.txt",
    "content": "Foo\n\u001b[?1049h\u001b[HBar\n\u001b[?1049l"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/ArgumentCannotContainOptions.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Arguments can not contain options.\n\n       --foo <BAR>\n       ^^^^^ Not permitted"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInOptionName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Encountered invalid character '$' in option name.\n\n       --f$oo\n          ^ Invalid character"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/InvalidCharacterInValueName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Encountered invalid character '$' in value name.\n\n       -f|--foo <F$OO>\n                  ^ Invalid character"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/LongOptionMustHaveMoreThanOneCharacter.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Long option names must consist of more than one character.\n\n       --f\n         ^ Invalid option name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/MissingLongAndShortName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       No long or short name for option has been specified.\n\n       <FOO>\n       ^^^^^ Missing option. Was this meant to be an argument?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleOptionValuesAreNotSupported.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Multiple option values are not supported.\n\n       -f|--foo <FOO> <BAR>\n                      ^^^^^ Too many option values"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/MultipleValuesAreNotSupported.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Multiple values are not supported.\n\n       <FOO> <BAR>\n             ^^^^^ Too many values"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionNamesCannotStartWithDigit.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Option names cannot start with a digit.\n\n       --1foo\n         ^^^^ Invalid option name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/OptionsMustHaveName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Options without name are not allowed.\n\n       --foo|-\n             ^ Missing option name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/ShortOptionMustOnlyBeOneCharacter.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Short option names can not be longer than one character.\n\n       --foo|-bar\n              ^^^ Invalid option name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/UnexpectedCharacter.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Encountered unexpected character '$'.\n\n       <FOO> $ <BAR>\n             ^ Unexpected character"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/UnterminatedValueName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Encountered unterminated value name 'BAR'.\n\n       --foo|-f <BAR\n                ^^^^ Unterminated value name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Arguments/ValuesMustHaveName.Output.verified.txt",
    "content": "Error: An error occured when parsing template.\n       Values without name are not allowed.\n\n       <>\n       ^^ Missing value name"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/ArgumentOrder.Output.verified.txt",
    "content": "USAGE:\n    myapp <FOO> <BAR> <BAZ> <CORGI> [QUX] [OPTIONS]\n\nARGUMENTS:\n    <FOO>\n    <BAR>\n    <BAZ>\n    <CORGI>\n    [QUX]\n\nOPTIONS:\n    -h, --help    Prints help information"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Command.Output.verified.txt",
    "content": "USAGE:\n    myapp cat [LEGS] [OPTIONS] <COMMAND>\n\nARGUMENTS:\n    [LEGS]    The number of legs\n\nOPTIONS:\n    -h, --help               Prints help information\n    -a, --alive              Indicates whether or not the animal is alive\n    -n, --name <VALUE>\n        --agility <VALUE>    The agility between 0 and 100\n\nCOMMANDS:\n    lion <TEETH>    The lion command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/CommandExamples.Output.verified.txt",
    "content": "USAGE:\n    myapp animal [LEGS] [OPTIONS] <COMMAND>\n\nEXAMPLES:\n    myapp animal --help\n\nARGUMENTS:\n    [LEGS]    The number of legs\n\nOPTIONS:\n    -h, --help     Prints help information\n    -a, --alive    Indicates whether or not the animal is alive\n\nCOMMANDS:\n    dog <AGE>    The dog command\n    horse        The horse command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Default.Output.verified.txt",
    "content": "USAGE:\n    myapp <TEETH> [LEGS] [OPTIONS]\n\nARGUMENTS:\n    <TEETH>    The number of teeth the lion has\n    [LEGS]     The number of legs\n\nOPTIONS:\n    -h, --help               Prints help information\n    -a, --alive              Indicates whether or not the animal is alive\n    -n, --name <VALUE>\n        --agility <VALUE>    The agility between 0 and 100\n    -c <CHILDREN>            The number of children the lion has"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/DefaultExamples.Output.verified.txt",
    "content": "USAGE:\n    myapp <TEETH> [LEGS] [OPTIONS]\n\nEXAMPLES:\n    myapp 12 -c 3\n\nARGUMENTS:\n    <TEETH>    The number of teeth the lion has\n    [LEGS]     The number of legs\n\nOPTIONS:\n    -h, --help               Prints help information\n    -a, --alive              Indicates whether or not the animal is alive\n    -n, --name <VALUE>\n        --agility <VALUE>    The agility between 0 and 100\n    -c <CHILDREN>            The number of children the lion has"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Command_Options.Output.verified.txt",
    "content": "USAGE:\n    myapp <FOO> [OPTIONS]\n\nARGUMENTS:\n    <FOO>    Dummy argument FOO\n\nOPTIONS:\n    -h, --help    Prints help information\n        --baz     Dummy option BAZ"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Hidden_Commands.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    dog <AGE>    The dog command\n    horse        The horse command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Leaf.Output.verified.txt",
    "content": "USAGE:\n    myapp cat [LEGS] lion <TEETH> [OPTIONS]\n\nARGUMENTS:\n    <TEETH>    The number of teeth the lion has\n\nOPTIONS:\n    -h, --help       Prints help information\n    -c <CHILDREN>    The number of children the lion has"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/NoDescription.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    bar"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/Root.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    dog <AGE>           The dog command\n    horse               The horse command\n    giraffe <LENGTH>    The giraffe command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nEXAMPLES:\n    myapp dog --name Rufus --age 12 --good-boy\n    myapp horse --name Brutus\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    dog <AGE>    The dog command\n    horse        The horse command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Children.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nEXAMPLES:\n    myapp dog --name Rufus --age 12 --good-boy\n    myapp horse --name Brutus\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    dog <AGE>    The dog command\n    horse        The horse command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Help/RootExamples_Leafs.Output.verified.txt",
    "content": "USAGE:\n    myapp [OPTIONS] <COMMAND>\n\nEXAMPLES:\n    myapp animal dog --name Rufus --age 12 --good-boy\n    myapp animal horse --name Brutus\n\nOPTIONS:\n    -h, --help       Prints help information\n    -v, --version    Prints version information\n\nCOMMANDS:\n    animal    The animal command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_1.Output.verified.txt",
    "content": "Error: Flags cannot be assigned a value.\n\n       dog --alive foo\n           ^^^^^^^ Can't assign value"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/CannotAssignValueToFlag/Test_2.Output.verified.txt",
    "content": "Error: Flags cannot be assigned a value.\n\n       dog -a foo\n           ^^ Can't assign value"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/InvalidShortOptionName/Test_1.Output.verified.txt",
    "content": "Error: Short option does not have a valid name.\n\n       dog -f0o\n             ^ Not a valid name for a short option"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameContainSymbol/Test_1.Output.verified.txt",
    "content": "Error: Invalid long option name.\n\n       dog --f€oo\n              ^ Invalid character"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsMissing/Test_1.Output.verified.txt",
    "content": "Error: Invalid long option name.\n\n       dog --\n           ^^ Did you forget the option name?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameIsOneCharacter/Test_1.Output.verified.txt",
    "content": "Error: Invalid long option name.\n\n       dog --f\n           ^^^ Did you mean -f?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/LongOptionNameStartWithDigit/Test_1.Output.verified.txt",
    "content": "Error: Invalid long option name.\n\n       dog --1foo\n           ^^^^^^ Option names cannot start with a digit"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/NoMatchingArgument/Test_1.Output.verified.txt",
    "content": "Error: Could not match 'baz' with an argument.\n\n       giraffe foo bar baz\n                       ^^^ Could not match to argument"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_1.Output.verified.txt",
    "content": "Error: Option 'name' is defined but no value has been provided.\n\n       dog --name\n           ^^^^^^ No value provided"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/NoValueForOption/Test_2.Output.verified.txt",
    "content": "Error: Option 'name' is defined but no value has been provided.\n\n       dog -n\n           ^^ No value provided"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_1.Output.verified.txt",
    "content": "Error: Option does not have a name.\n\n       dog -\n           ^ Did you forget the option name?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_2.Output.verified.txt",
    "content": "Error: Expected an option value.\n\n       dog --foo=\n                 ^ Did you forget the option value?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_3.Output.verified.txt",
    "content": "Error: Expected an option value.\n\n       dog --foo:\n                 ^ Did you forget the option value?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_4.Output.verified.txt",
    "content": "Error: Expected an option value.\n\n       dog -f=\n              ^ Did you forget the option value?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/OptionWithoutName/Test_5.Output.verified.txt",
    "content": "Error: Expected an option value.\n\n       dog -f:\n              ^ Did you forget the option value?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_1.Output.verified.txt",
    "content": "Error: Unexpected option 'foo'.\n\n       --foo\n       ^^^^^ Did you forget the command?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnexpectedOption/Test_2.Output.verified.txt",
    "content": "Error: Unexpected option 'f'.\n\n       -f\n       ^^ Did you forget the command?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_1.Output.verified.txt",
    "content": "Error: Unknown command 'cat'.\n\n       cat 14\n       ^^^ No such command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_2.Output.verified.txt",
    "content": "Error: Unknown command 'other'.\n\n       empty other\n             ^^^^^ No such command"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_3.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       dog bat 14\n           ^^^ Did you mean 'cat'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_4.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       bat 14\n       ^^^ Did you mean 'cat'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_5.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       bat\n       ^^^ Did you mean 'cat'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_6.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       dog bat\n           ^^^ Did you mean 'cat'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_7.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       qux bat\n           ^^^ Did you mean 'bar'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownCommand/Test_8.Output.verified.txt",
    "content": "Error: Unknown command 'bat'.\n\n       foo qux bat\n               ^^^ Did you mean 'bar'?"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_1.Output.verified.txt",
    "content": "Error: Unknown option 'unknown'.\n\n       dog --unknown\n           ^^^^^^^^^ Unknown option"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Parsing/UnknownOption/Test_2.Output.verified.txt",
    "content": "Error: Unknown option 'u'.\n\n       dog -u\n           ^^ Unknown option"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Hidden_Command_Options.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--DEFAULT COMMAND-->\n  <Command Name=\"__default_command\" IsBranch=\"false\" IsDefault=\"true\" ClrType=\"Spectre.Console.Tests.Data.HiddenOptionsCommand\" Settings=\"Spectre.Console.Tests.Data.HiddenOptionSettings\">\n    <Parameters>\n      <Argument Name=\"FOO\" Position=\"0\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>Dummy argument FOO</Description>\n      </Argument>\n      <Option Short=\"\" Long=\"baz\" Value=\"NULL\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>Dummy option BAZ</Description>\n      </Option>\n    </Parameters>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_1.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--ANIMAL-->\n  <Command Name=\"animal\" IsBranch=\"true\" Settings=\"Spectre.Console.Tests.Data.AnimalSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n    </Parameters>\n    <!--MAMMAL-->\n    <Command Name=\"mammal\" IsBranch=\"true\" Settings=\"Spectre.Console.Tests.Data.MammalSettings\">\n      <Parameters>\n        <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n      </Parameters>\n      <!--DOG-->\n      <Command Name=\"dog\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.DogCommand\" Settings=\"Spectre.Console.Tests.Data.DogSettings\">\n        <Parameters>\n          <Argument Name=\"AGE\" Position=\"0\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\" />\n          <Option Short=\"g\" Long=\"good-boy\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\" />\n        </Parameters>\n      </Command>\n      <!--HORSE-->\n      <Command Name=\"horse\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.HorseCommand\" Settings=\"Spectre.Console.Tests.Data.MammalSettings\">\n        <Parameters>\n          <Option Shadowed=\"true\" Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n        </Parameters>\n      </Command>\n    </Command>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_2.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--DOG-->\n  <Command Name=\"dog\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.DogCommand\" Settings=\"Spectre.Console.Tests.Data.DogSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Argument Name=\"AGE\" Position=\"1\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\" />\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n      <Option Short=\"g\" Long=\"good-boy\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\" />\n      <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n    </Parameters>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_3.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--ANIMAL-->\n  <Command Name=\"animal\" IsBranch=\"true\" Settings=\"Spectre.Console.Tests.Data.AnimalSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n    </Parameters>\n    <!--DOG-->\n    <Command Name=\"dog\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.DogCommand\" Settings=\"Spectre.Console.Tests.Data.DogSettings\">\n      <Parameters>\n        <Argument Name=\"AGE\" Position=\"0\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\" />\n        <Option Short=\"g\" Long=\"good-boy\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\" />\n        <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n      </Parameters>\n    </Command>\n    <!--HORSE-->\n    <Command Name=\"horse\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.HorseCommand\" Settings=\"Spectre.Console.Tests.Data.MammalSettings\">\n      <Parameters>\n        <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n      </Parameters>\n    </Command>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_4.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--ANIMAL-->\n  <Command Name=\"animal\" IsBranch=\"true\" Settings=\"Spectre.Console.Tests.Data.AnimalSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n    </Parameters>\n    <!--DOG-->\n    <Command Name=\"dog\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.DogCommand\" Settings=\"Spectre.Console.Tests.Data.DogSettings\">\n      <Parameters>\n        <Argument Name=\"AGE\" Position=\"0\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\" />\n        <Option Short=\"g\" Long=\"good-boy\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\" />\n        <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n      </Parameters>\n    </Command>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_5.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--CMD-->\n  <Command Name=\"cmd\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.OptionVectorCommand\" Settings=\"Spectre.Console.Tests.Data.OptionVectorSettings\">\n    <Parameters>\n      <Option Short=\"\" Long=\"bar\" Value=\"NULL\" Required=\"false\" Kind=\"vector\" ClrType=\"System.Int32[]\" />\n      <Option Short=\"\" Long=\"foo\" Value=\"NULL\" Required=\"false\" Kind=\"vector\" ClrType=\"System.String[]\" />\n    </Parameters>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Cli/Xml/Test_6.Output.verified.txt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Model>\n  <!--DEFAULT COMMAND-->\n  <Command Name=\"__default_command\" IsBranch=\"false\" IsDefault=\"true\" ClrType=\"Spectre.Console.Tests.Data.DogCommand\" Settings=\"Spectre.Console.Tests.Data.DogSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Argument Name=\"AGE\" Position=\"1\" Required=\"true\" Kind=\"scalar\" ClrType=\"System.Int32\" />\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n      <Option Short=\"g\" Long=\"good-boy\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\" />\n      <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n    </Parameters>\n  </Command>\n  <!--HORSE-->\n  <Command Name=\"horse\" IsBranch=\"false\" ClrType=\"Spectre.Console.Tests.Data.HorseCommand\" Settings=\"Spectre.Console.Tests.Data.MammalSettings\">\n    <Parameters>\n      <Argument Name=\"LEGS\" Position=\"0\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.Int32\">\n        <Description>The number of legs.</Description>\n        <Validators>\n          <Validator ClrType=\"Spectre.Console.Tests.Data.EvenNumberValidatorAttribute\" Message=\"Animals must have an even number of legs.\" />\n          <Validator ClrType=\"Spectre.Console.Tests.Data.PositiveNumberValidatorAttribute\" Message=\"Number of legs must be greater than 0.\" />\n        </Validators>\n      </Argument>\n      <Option Short=\"a\" Long=\"alive,not-dead\" Value=\"NULL\" Required=\"false\" Kind=\"flag\" ClrType=\"System.Boolean\">\n        <Description>Indicates whether or not the animal is alive.</Description>\n      </Option>\n      <Option Short=\"n,p\" Long=\"name,pet-name\" Value=\"VALUE\" Required=\"false\" Kind=\"scalar\" ClrType=\"System.String\" />\n    </Parameters>\n  </Command>\n</Model>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/CallSite.Output.verified.txt",
    "content": "System.InvalidOperationException: Something threw!\n     System.InvalidOperationException: Throwing!\n       at bool Spectre.Console.Tests.Data.TestExceptions.GenericMethodThatThrows<T0,T1,TRet>(int? number) in /xyz/Exceptions.cs:nn\n       at void Spectre.Console.Tests.Data.TestExceptions.ThrowWithGenericInnerException() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Data.TestExceptions.ThrowWithGenericInnerException() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exceptions_With_Generic_Type_Parameters_In_Callsite_As_Expected>b__4_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/Default.Output.verified.txt",
    "content": "System.InvalidOperationException: Throwing!\n  at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(int? number) in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception>b__0_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/GenericException.Output_exceptionFormats=Default.verified.txt",
    "content": "﻿Spectre.Console.Tests.Data.GenericException<Spectre.Console.IAnsiConsole>: Throwing!\n  at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrowsGenericException<T>() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_GenericException>b__8_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/GenericException.Output_exceptionFormats=ShortenEverything.verified.txt",
    "content": "﻿GenericException<IAnsiConsole>: Throwing!\n  at bool MethodThatThrowsGenericException<T>() in /xyz/ in Exceptions.cs:nn\n  at void <Should_Write_GenericException>b__8_0() in /xyz/ in ExceptionTests.cs:nn\n  at Exception GetException(Action action) in /xyz/ in ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/GenericException.Output_exceptionFormats=ShortenMethods.verified.txt",
    "content": "﻿Spectre.Console.Tests.Data.GenericException<Spectre.Console.IAnsiConsole>: Throwing!\n  at bool MethodThatThrowsGenericException<T>() in /xyz/Exceptions.cs:nn\n  at void <Should_Write_GenericException>b__8_0() in /xyz/ExceptionTests.cs:nn\n  at Exception GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/GenericException.Output_exceptionFormats=ShortenTypes.verified.txt",
    "content": "﻿GenericException<IAnsiConsole>: Throwing!\n  at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrowsGenericException<T>() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_GenericException>b__8_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/InnerException.Output.verified.txt",
    "content": "System.InvalidOperationException: Something threw!\n     System.InvalidOperationException: Throwing!\n       at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(int? number) in /xyz/Exceptions.cs:nn\n       at void Spectre.Console.Tests.Data.TestExceptions.ThrowWithInnerException() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Data.TestExceptions.ThrowWithInnerException() in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Inner_Exception>b__3_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/NoStackTrace.Output.verified.txt",
    "content": "﻿System.InvalidOperationException: Something threw!\n   System.InvalidOperationException: Throwing!\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/OutParam.Output.verified.txt",
    "content": "InvalidOperationException: Throwing!\n  at List<T> Spectre.Console.Tests.Data.TestExceptions.GenericMethodWithOutThatThrows<T>(out List<T> firstFewItems) in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Output_Param>b__5_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/ShortenedMethods.Output.verified.txt",
    "content": "System.InvalidOperationException: Throwing!\n  at bool MethodThatThrows(int? number) in /xyz/Exceptions.cs:nn\n  at void <Should_Write_Exception_With_Shortened_Methods>b__2_0() in /xyz/ExceptionTests.cs:nn\n  at Exception GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/ShortenedTypes.Output.verified.txt",
    "content": "InvalidOperationException: Throwing!\n  at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(int? number) in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Shortened_Types>b__1_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Exception/Tuple.Output.verified.txt",
    "content": "InvalidOperationException: Throwing!\n  at bool Spectre.Console.Tests.Data.TestExceptions.MethodThatThrows(int? number) in /xyz/Exceptions.cs:nn\n  at (string Key, List<T> Values) Spectre.Console.Tests.Data.TestExceptions.GetTuplesWithInnerException<T>((int First, string Second) myValue) in /xyz/Exceptions.cs:nn\n  at void Spectre.Console.Tests.Unit.ExceptionTests.<>c.<Should_Write_Exception_With_Tuple_Return>b__6_0() in /xyz/ExceptionTests.cs:nn\n  at Exception Spectre.Console.Tests.Unit.ExceptionTests.GetException(Action action) in /xyz/ExceptionTests.cs:nn\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Live/Progress/Render_ReduceWidth.Output.verified.txt",
    "content": "                    \nfoo ━━ 0% --:--:-- ⣷\nbar ━━ 0% --:--:-- ⣷\nbaz ━━ 0% --:--:-- ⣷\n                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Live/Status/Render.Output.verified.txt",
    "content": "\u001b[?25l     \n\u001b[38;5;11m*\u001b[0m foo\n     \n\u001b[2A     \n\u001b[38;5;11m-\u001b[0m bar\n     \n\u001b[2A     \n\u001b[38;5;11m*\u001b[0m baz\n     \n\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[?25h"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/AcceptChoice.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Orange] (Banana): Orange\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_BestMatch.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Bandana/Orange]: Band\b \b\b \b\b \b\b \bBandana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_Empty.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Orange] (Banana): Banana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_NextChoice.Output.verified.txt",
    "content": "Favorite fruit? [Apple/Banana/Orange]: Apple\b \b\b \b\b \b\b \b\b \bBanana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/AutoComplete_PreviousChoice.Output.verified.txt",
    "content": "﻿Favorite fruit? [Banana/Bandana/Orange]: Ban\b \b\b \b\b \bBanana\b \b\b \b\b \b\b \b\b \b\b \bBandana\b \b\b \b\b \b\b \b\b \b\b \b\b \bBanana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleNotSet.Output.verified.txt",
    "content": "Enter Value: \u001b[38;5;12m[Choice 1/Choice 2]\u001b[0m: Choice 2\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/ChoicesStyleSet.Output.verified.txt",
    "content": "Enter Value: \u001b[38;5;9m[Choice 1/Choice 2]\u001b[0m: Choice 2\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/ClearOnFinish.Output.verified.txt",
    "content": "﻿Enter a value ************\n\n\u001b[2K"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/ConversionError.Output.verified.txt",
    "content": "[\n  Age? ninety-nine,\n  Invalid input,\n  Age? 99\n]"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/CustomConverter.Output.verified.txt",
    "content": "Favorite fruit? [Apple/Banana]: Banana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/CustomValidation.Output.verified.txt",
    "content": "Guess number: 22\nToo low\nGuess number: 102\nToo high\nGuess number: ABC\nInvalid input\nGuess number: 99\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValue.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Orange] (Banana): Banana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleNotSet.Output.verified.txt",
    "content": "Enter Value: \u001b[38;5;2m(default)\u001b[0m: Input\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/DefaultValueStyleSet.Output.verified.txt",
    "content": "Enter Value: \u001b[38;5;9m(default)\u001b[0m: Input\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidChoice.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Orange] (Banana): Apple\nPlease select one of the available options\nFavorite fruit? [Banana/Orange] (Banana): Banana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/InvalidDefaultChoice.Output.verified.txt",
    "content": "Favorite fruit? [Banana/Orange] (Banan): Banan\nPlease select one of the available options\nFavorite fruit? [Banana/Orange] (Banan): Banana\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/NoSuffix.Output.verified.txt",
    "content": "Enter command$ Orange\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValue.Output.verified.txt",
    "content": "Favorite fruit? (******): ******\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueCustomMask.Output.verified.txt",
    "content": "Favorite fruit? (------): ------\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/SecretDefaultValueNullMask.Output.verified.txt",
    "content": "Favorite fruit? (): \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Prompts/Text/SecretValueBackspaceNullMask.Output.verified.txt",
    "content": "﻿Favorite fruit? \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/AsciiBorder.Output.verified.txt",
    "content": "+-Greeting----+\n| Hello World |\n+-------------+\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/DoubleBorder.Output.verified.txt",
    "content": "╔═Greeting════╗\n║ Hello World ║\n╚═════════════╝\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/HeavyBorder.Output.verified.txt",
    "content": "┏━Greeting━━━━┓\n┃ Hello World ┃\n┗━━━━━━━━━━━━━┛\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder.Output.verified.txt",
    "content": "﻿ Hello World \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/NoBorder_With_Header.Output.verified.txt",
    "content": "﻿  Greeting   \n Hello World \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/RoundedBorder.Output.verified.txt",
    "content": "╭─Greeting────╮\n│ Hello World │\n╰─────────────╯\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Box/SquareBorder.Output.verified.txt",
    "content": "┌─Greeting────┐\n│ Hello World │\n└─────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/Ascii2Border.Output.verified.txt",
    "content": "+----------+----------+\n| Header 1 | Header 2 |\n|----------+----------|\n| Cell     | Cell     |\n| Cell     | Cell     |\n|----------+----------|\n| Footer 1 | Footer 2 |\n+----------+----------+\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiBorder.Output.verified.txt",
    "content": "+---------------------+\n| Header 1 | Header 2 |\n|----------+----------|\n| Cell     | Cell     |\n| Cell     | Cell     |\n|----------+----------|\n| Footer 1 | Footer 2 |\n+---------------------+\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/AsciiDoubleHeadBorder.Output.verified.txt",
    "content": "+----------+----------+\n| Header 1 | Header 2 |\n|==========+==========|\n| Cell     | Cell     |\n| Cell     | Cell     |\n+----------+----------+\n| Footer 1 | Footer 2 |\n+----------+----------+\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleBorder.Output.verified.txt",
    "content": "╔══════════╦══════════╗\n║ Header 1 ║ Header 2 ║\n╠══════════╬══════════╣\n║ Cell     ║ Cell     ║\n║ Cell     ║ Cell     ║\n╠══════════╬══════════╣\n║ Footer 1 ║ Footer 2 ║\n╚══════════╩══════════╝\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/DoubleEdgeBorder.Output.verified.txt",
    "content": "╔══════════╤══════════╗\n║ Header 1 │ Header 2 ║\n╟──────────┼──────────╢\n║ Cell     │ Cell     ║\n║ Cell     │ Cell     ║\n╟──────────┼──────────╢\n║ Footer 1 │ Footer 2 ║\n╚══════════╧══════════╝\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyBorder.Output.verified.txt",
    "content": "┏━━━━━━━━━━┳━━━━━━━━━━┓\n┃ Header 1 ┃ Header 2 ┃\n┣━━━━━━━━━━╋━━━━━━━━━━┫\n┃ Cell     ┃ Cell     ┃\n┃ Cell     ┃ Cell     ┃\n┣━━━━━━━━━━╋━━━━━━━━━━┫\n┃ Footer 1 ┃ Footer 2 ┃\n┗━━━━━━━━━━┻━━━━━━━━━━┛\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyEdgeBorder.Output.verified.txt",
    "content": "┏━━━━━━━━━━┯━━━━━━━━━━┓\n┃ Header 1 │ Header 2 ┃\n┠──────────┼──────────┨\n┃ Cell     │ Cell     ┃\n┃ Cell     │ Cell     ┃\n┠──────────┼──────────┨\n┃ Footer 1 │ Footer 2 ┃\n┗━━━━━━━━━━┷━━━━━━━━━━┛\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HeavyHeadBorder.Output.verified.txt",
    "content": "┏━━━━━━━━━━┳━━━━━━━━━━┓\n┃ Header 1 ┃ Header 2 ┃\n┡━━━━━━━━━━╇━━━━━━━━━━┩\n│ Cell     │ Cell     │\n│ Cell     │ Cell     │\n├──────────┼──────────┤\n│ Footer 1 │ Footer 2 │\n└──────────┴──────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/HorizontalBorder.Output.verified.txt",
    "content": "───────────────────────\n  Header 1   Header 2  \n───────────────────────\n  Cell       Cell      \n  Cell       Cell      \n───────────────────────\n  Footer 1   Footer 2  \n───────────────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder.Output.verified.txt",
    "content": "                       \n| Header 1 | Header 2 |\n| -------- | -------- |\n| Cell     | Cell     |\n| Cell     | Cell     |\n| Footer 1 | Footer 2 |\n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_Centered.Output.verified.txt",
    "content": "                       \n| Header 1 | Header 2 |\n| -------- | :------: |\n| Cell     |   Cell   |\n| Cell     |   Cell   |\n| Footer 1 | Footer 2 |\n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_LeftAligned.Output.verified.txt",
    "content": "                       \n| Header 1 | Header 2 |\n| -------- | :------- |\n| Cell     | Cell     |\n| Cell     | Cell     |\n| Footer 1 | Footer 2 |\n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MarkdownBorder_RightAligned.Output.verified.txt",
    "content": "                       \n| Header 1 | Header 2 |\n| -------- | -------: |\n| Cell     |     Cell |\n| Cell     |     Cell |\n| Footer 1 | Footer 2 |\n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalBorder.Output.verified.txt",
    "content": "                       \n  Header 1 │ Header 2  \n ──────────┼────────── \n  Cell     │ Cell      \n  Cell     │ Cell      \n ──────────┼────────── \n  Footer 1 │ Footer 2  \n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalDoubleHeadBorder.Output.verified.txt",
    "content": "                       \n  Header 1 │ Header 2  \n ══════════╪══════════ \n  Cell     │ Cell      \n  Cell     │ Cell      \n ══════════╪══════════ \n  Footer 1 │ Footer 2  \n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalHeavyHeadBorder.Output.verified.txt",
    "content": "                       \n  Header 1 │ Header 2  \n ━━━━━━━━━━┿━━━━━━━━━━ \n  Cell     │ Cell      \n  Cell     │ Cell      \n ━━━━━━━━━━┿━━━━━━━━━━ \n  Footer 1 │ Footer 2  \n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/MinimalistBorder.Output.verified.txt",
    "content": "﻿Header 1 Header 2\n─────────────────\nCell     Cell    \nCell     Cell    \n─────────────────\nFooter 1 Footer 2\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/NoBorder.Output.verified.txt",
    "content": "Header 1 Header 2\nCell     Cell    \nCell     Cell    \nFooter 1 Footer 2\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/RoundedBorder.Output.verified.txt",
    "content": "╭──────────┬──────────╮\n│ Header 1 │ Header 2 │\n├──────────┼──────────┤\n│ Cell     │ Cell     │\n│ Cell     │ Cell     │\n├──────────┼──────────┤\n│ Footer 1 │ Footer 2 │\n╰──────────┴──────────╯\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleBorder.Output.verified.txt",
    "content": "                       \n  Header 1   Header 2  \n───────────────────────\n  Cell       Cell      \n  Cell       Cell      \n───────────────────────\n  Footer 1   Footer 2  \n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SimpleHeavyBorder.Output.verified.txt",
    "content": "                       \n  Header 1   Header 2  \n━━━━━━━━━━━━━━━━━━━━━━━\n  Cell       Cell      \n  Cell       Cell      \n━━━━━━━━━━━━━━━━━━━━━━━\n  Footer 1   Footer 2  \n                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Rendering/Borders/Table/SquareBorder.Output.verified.txt",
    "content": "┌──────────┬──────────┐\n│ Header 1 │ Header 2 │\n├──────────┼──────────┤\n│ Cell     │ Cell     │\n│ Cell     │ Cell     │\n├──────────┼──────────┤\n│ Footer 1 │ Footer 2 │\n└──────────┴──────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row.verified.txt",
    "content": "┌───────────┬───────────┬───────────┐\n│ Column #1 │ Column #2 │ Column #3 │\n├───────────┼───────────┼───────────┤\n│ 1         │           │           │\n│ 2         │           │           │\n│ 3         │ 4         │ 5         │\n└───────────┴───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_Renderable.verified.txt",
    "content": "┌───────────┬───────────┬───────────┐\n│ Column #1 │ Column #2 │ Column #3 │\n├───────────┼───────────┼───────────┤\n│ 1         │           │           │\n│ 2         │           │           │\n│ 3         │ 4         │ 5         │\n└───────────┴───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/TableRowCollectionTests.TheUpdateMethod.Should_Update_Row_With_String.verified.txt",
    "content": "┌───────────┬───────────┬───────────┐\n│ Column #1 │ Column #2 │ Column #3 │\n├───────────┼───────────┼───────────┤\n│ 1         │           │           │\n│ 2         │           │           │\n│ 3         │ 4         │ 5         │\n└───────────┴───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Bottom.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n            ┌──────────────┐            \n            │ Hello World! │            \n            └──────────────┘            "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Middle.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n            ┌──────────────┐            \n            │ Hello World! │            \n            └──────────────┘            \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Center_Top.Output.verified.txt",
    "content": "﻿            ┌──────────────┐            \n            │ Hello World! │            \n            └──────────────┘            \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Bottom.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n┌──────────────┐                        \n│ Hello World! │                        \n└──────────────┘                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Middle.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n┌──────────────┐                        \n│ Hello World! │                        \n└──────────────┘                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Left_Top.Output.verified.txt",
    "content": "﻿┌──────────────┐                        \n│ Hello World! │                        \n└──────────────┘                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Bottom.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                        ┌──────────────┐\n                        │ Hello World! │\n                        └──────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Middle.Output.verified.txt",
    "content": "﻿                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                        ┌──────────────┐\n                        │ Hello World! │\n                        └──────────────┘\n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Align/Right_Top.Output.verified.txt",
    "content": "﻿                        ┌──────────────┐\n                        │ Hello World! │\n                        └──────────────┘\n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        \n                                        "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BarChart/Fixed_Max_Value.Output.verified.txt",
    "content": "                          Number of fruits                  \n Apple  ███ 12                                              \nOrange  █████████████████████████ 54                        \nBanana  ██████████████ 33                                   \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BarChart/Render.Output.verified.txt",
    "content": "                          Number of fruits                  \n Apple  ████████ 12                                         \nOrange  █████████████████████████████████████████████████ 54\nBanana  ████████████████████████████ 33                     \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BarChart/Zero_Value.Output.verified.txt",
    "content": "                          Number of fruits                  \n Apple  0                                                   \nOrange  █████████████████████████████████████████████████ 54\nBanana  ████████████████████████████ 33                     \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Ansi.Output.verified.txt",
    "content": "\u001b[38;5;9m████████████████████████\u001b[0m\u001b[38;5;12m█████████████████\u001b[0m\u001b[38;5;2m█████████████\u001b[0m\u001b[38;5;11m███\u001b[0m\u001b[38;5;119m███\u001b[0m\n                                                            \n\u001b[38;5;9m■\u001b[0m SCSS \u001b[38;5;8m37\u001b[0m    \u001b[38;5;12m■\u001b[0m HTML \u001b[38;5;8m28.3\u001b[0m     \u001b[38;5;2m■\u001b[0m C# \u001b[38;5;8m22.6\u001b[0m    \u001b[38;5;11m■\u001b[0m JavaScript \u001b[38;5;8m6\u001b[0m    \n\u001b[38;5;119m■\u001b[0m Ruby \u001b[38;5;8m6\u001b[0m     \u001b[38;5;14m■\u001b[0m Shell \u001b[38;5;8m0.1\u001b[0m                                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Culture.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n■ SCSS 37    ■ HTML 28,3     ■ C# 22,6    ■ JavaScript 6    \n■ Ruby 6     ■ Shell 0,1                                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Default.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████████████████████████\n■ SCSS 37   ■ HTML 28.3    ■ C# 22.6   ■ JavaScript 6   ■ Ruby 6   ■ Shell 0.1  \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/FullSize.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n                                                            \n■ SCSS 37    ■ HTML 28.3     ■ C# 22.6    ■ JavaScript 6    \n■ Ruby 6     ■ Shell 0.1                                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTagValues.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n■ SCSS    ■ HTML   ■ C#   ■ JavaScript    ■ Ruby   ■ Shell  \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/HideTags.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/TagFormat.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n■ SCSS 37%    ■ HTML 28,3%   ■ C# 22,6%   ■ JavaScript 6%   \n■ Ruby 6%     ■ Shell 0,1%                                  \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/ValueColor.Output.verified.txt",
    "content": "﻿\u001b[38;5;9m████████████████████████\u001b[0m\u001b[38;5;12m█████████████████\u001b[0m\u001b[38;5;2m█████████████\u001b[0m\u001b[38;5;11m███\u001b[0m\u001b[38;5;119m███\u001b[0m\n\u001b[38;5;9m■\u001b[0m SCSS \u001b[38;5;9m37\u001b[0m    \u001b[38;5;12m■\u001b[0m HTML \u001b[38;5;9m28.3\u001b[0m     \u001b[38;5;2m■\u001b[0m C# \u001b[38;5;9m22.6\u001b[0m    \u001b[38;5;11m■\u001b[0m JavaScript \u001b[38;5;9m6\u001b[0m    \n\u001b[38;5;119m■\u001b[0m Ruby \u001b[38;5;9m6\u001b[0m     \u001b[38;5;14m■\u001b[0m Shell \u001b[38;5;9m0.1\u001b[0m                                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/BreakdownChart/Width.Output.verified.txt",
    "content": "████████████████████████████████████████████████████████████\n■ SCSS 37    ■ HTML 28.3     ■ C# 22.6    ■ JavaScript 6    \n■ Ruby 6     ■ Shell 0.1                                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Calendar/Centered.Output.verified.txt",
    "content": "                                 2020 October                                   \n                  ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐                   \n                  │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │                   \n                  ├─────┼─────┼─────┼─────┼─────┼─────┼─────┤                   \n                  │     │     │     │     │ 1   │ 2   │ 3*  │                   \n                  │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 10  │                   \n                  │ 11  │ 12* │ 13  │ 14  │ 15  │ 16  │ 17  │                   \n                  │ 18  │ 19  │ 20  │ 21  │ 22  │ 23  │ 24  │                   \n                  │ 25  │ 26  │ 27  │ 28  │ 29  │ 30  │ 31  │                   \n                  │     │     │     │     │     │     │     │                   \n                  └─────┴─────┴─────┴─────┴─────┴─────┴─────┘                   \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Calendar/Culture.Output.verified.txt",
    "content": "            Oktober 2020             \n┌─────┬────┬────┬────┬────┬────┬────┐\n│ Mo  │ Di │ Mi │ Do │ Fr │ Sa │ So │\n├─────┼────┼────┼────┼────┼────┼────┤\n│     │    │    │ 1  │ 2  │ 3* │ 4  │\n│ 5   │ 6  │ 7  │ 8  │ 9  │ 10 │ 11 │\n│ 12* │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │\n│ 19  │ 20 │ 21 │ 22 │ 23 │ 24 │ 25 │\n│ 26  │ 27 │ 28 │ 29 │ 30 │ 31 │    │\n│     │    │    │    │    │    │    │\n└─────┴────┴────┴────┴────┴────┴────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Calendar/LeftAligned.Output.verified.txt",
    "content": "               2020 October                \n┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │\n├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n│     │     │     │     │ 1   │ 2   │ 3*  │\n│ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 10  │\n│ 11  │ 12* │ 13  │ 14  │ 15  │ 16  │ 17  │\n│ 18  │ 19  │ 20  │ 21  │ 22  │ 23  │ 24  │\n│ 25  │ 26  │ 27  │ 28  │ 29  │ 30  │ 31  │\n│     │     │     │     │     │     │     │\n└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Calendar/Render.Output.verified.txt",
    "content": "               2020 October                \n┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n│ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │\n├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n│     │     │     │     │ 1   │ 2   │ 3*  │\n│ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 10  │\n│ 11  │ 12* │ 13  │ 14  │ 15  │ 16  │ 17  │\n│ 18  │ 19  │ 20  │ 21  │ 22  │ 23  │ 24  │\n│ 25  │ 26  │ 27  │ 28  │ 29  │ 30  │ 31  │\n│     │     │     │     │     │     │     │\n└─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Calendar/RightAligned.Output.verified.txt",
    "content": "                                                    2020 October                \n                                     ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n                                     │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │\n                                     ├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n                                     │     │     │     │     │ 1   │ 2   │ 3*  │\n                                     │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 10  │\n                                     │ 11  │ 12* │ 13  │ 14  │ 15  │ 16  │ 17  │\n                                     │ 18  │ 19  │ 20  │ 21  │ 22  │ 23  │ 24  │\n                                     │ 25  │ 26  │ 27  │ 28  │ 29  │ 30  │ 31  │\n                                     │     │     │     │     │     │     │     │\n                                     └─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.NonUnicode.verified.txt",
    "content": "\u001b[101m  \u001b[0m      \u001b[42m  \u001b[0m\n          \n          \n          \n\u001b[104m  \u001b[0m      \u001b[103m  \u001b[0m\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render.Unicode.verified.txt",
    "content": "﻿\u001b[91m▀\u001b[0m   \u001b[32m▀\u001b[0m\n     \n\u001b[94m▀\u001b[0m   \u001b[93m▀\u001b[0m\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.NonUnicode.verified.txt",
    "content": "\u001b[106m  \u001b[0m                  \n                    \n                    \n                    \n                    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_MaxWidth.Unicode.verified.txt",
    "content": "﻿\u001b[96m▀\u001b[0m         \n          \n          \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.NonUnicode.verified.txt",
    "content": "\u001b[106m  \u001b[0m        \n          \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_NarrowTerminal.Unicode.verified.txt",
    "content": "﻿\u001b[96m▀\u001b[0m         \n          \n          \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.NonUnicode.verified.txt",
    "content": "┌──────┐\n│ \u001b[106m  \u001b[0m   │\n│   \u001b[100m  \u001b[0m │\n└──────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Canvas/Render_Nested.Unicode.verified.txt",
    "content": "﻿┌────┐\n│ \u001b[96m▀\u001b[0m\u001b[90m▄\u001b[0m │\n└────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Columns/Render.Output.verified.txt",
    "content": "╭────────────────────╮ ╭────────────────╮ ╭─────────────────╮\n│ Savannah Thompson  │ │ Sophie Ramos   │ │ Katrin Goldberg │\n│ Australia          │ │ United States  │ │ Germany         │\n╰────────────────────╯ ╰────────────────╯ ╰─────────────────╯\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=poison.flf.verified.txt",
    "content": "﻿                                                                                                                                       \n@@@@@@@    @@@@@@   @@@@@@@  @@@@@@@   @@@  @@@  @@@     @@@  @@@  @@@   @@@@@@    @@@@@@      @@@  @@@  @@@@@@@@  @@@@@@@   @@@@@@@@  \n@@@@@@@@  @@@@@@@@  @@@@@@@  @@@@@@@@  @@@  @@@  @@@     @@@  @@@  @@@  @@@@@@@@  @@@@@@@      @@@  @@@  @@@@@@@@  @@@@@@@@  @@@@@@@@  \n@@!  @@@  @@!  @@@    @@!    @@!  @@@  @@!  @@!  !@@     @@!  @@!  @@!  @@!  @@@  !@@          @@!  @@@  @@!       @@!  @@@  @@!       \n!@!  @!@  !@!  @!@    !@!    !@!  @!@  !@!  !@!  @!!     !@!  !@!  !@!  !@!  @!@  !@!          !@!  @!@  !@!       !@!  @!@  !@!       \n@!@@!@!   @!@!@!@!    @!!    @!@!!@!   !!@  @!@@!@!      @!!  !!@  @!@  @!@!@!@!  !!@@!!       @!@!@!@!  @!!!:!    @!@!!@!   @!!!:!    \n!!@!!!    !!!@!!!!    !!!    !!@!@!    !!!  !!@!!!       !@!  !!!  !@!  !!!@!!!!   !!@!!!      !!!@!!!!  !!!!!:    !!@!@!    !!!!!:    \n!!:       !!:  !!!    !!:    !!: :!!   !!:  !!: :!!      !!:  !!:  !!:  !!:  !!!       !:!     !!:  !!!  !!:       !!: :!!   !!:       \n:!:       :!:  !:!    :!:    :!:  !:!  :!:  :!:  !:!     :!:  :!:  :!:  :!:  !:!      !:!      :!:  !:!  :!:       :!:  !:!  :!:       \n ::       ::   :::     ::    ::   :::   ::   ::  :::      :::: :: :::   ::   :::  :::: ::      ::   :::   :: ::::  ::   :::   :: ::::  \n :         :   : :     :      :   : :  :     :   :::       :: :  : :     :   : :  :: : :        :   : :  : :: ::    :   : :  : :: ::   \n                                                                                                                                       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Load_Stream.Output_fontfile=starwars.flf.verified.txt",
    "content": "﻿.______        ___      .___________..______       __   __  ___    ____    __    ____      ___           _______.    __    __   _______ .______       _______ \n|   _  \\      /   \\     |           ||   _  \\     |  | |  |/  /    \\   \\  /  \\  /   /     /   \\         /       |   |  |  |  | |   ____||   _  \\     |   ____|\n|  |_)  |    /  ^  \\    `---|  |----`|  |_)  |    |  | |  '  /      \\   \\/    \\/   /     /  ^  \\       |   (----`   |  |__|  | |  |__   |  |_)  |    |  |__   \n|   ___/    /  /_\\  \\       |  |     |      /     |  | |    <        \\            /     /  /_\\  \\       \\   \\       |   __   | |   __|  |      /     |   __|  \n|  |       /  _____  \\      |  |     |  |\\  \\----.|  | |  .  \\        \\    /\\    /     /  _____  \\  .----)   |      |  |  |  | |  |____ |  |\\  \\----.|  |____ \n| _|      /__/     \\__\\     |__|     | _| `._____||__| |__|\\__\\        \\__/  \\__/     /__/     \\__\\ |_______/       |__|  |__| |_______|| _| `._____||_______|\n                                                                                                                                                              \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render.Output.verified.txt",
    "content": "﻿  ____            _            _   _                                 \n |  _ \\    __ _  | |_   _ __  (_) | | __   __      __   __ _   ___   \n | |_) |  / _` | | __| | '__| | | | |/ /   \\ \\ /\\ / /  / _` | / __|  \n |  __/  | (_| | | |_  | |    | | |   <     \\ V  V /  | (_| | \\__ \\  \n |_|      \\__,_|  \\__| |_|    |_| |_|\\_\\     \\_/\\_/    \\__,_| |___/  \n                                                                     \n  _                          \n | |__     ___   _ __    ___ \n | '_ \\   / _ \\ | '__|  / _ \\\n | | | | |  __/ | |    |  __/\n |_| |_|  \\___| |_|     \\___|\n                             \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Centered.Output.verified.txt",
    "content": "﻿          ____                          _                        ____                                 _        \n         / ___|   _ __     ___    ___  | |_   _ __    ___       / ___|   ___    _ __    ___    ___   | |   ___ \n         \\___ \\  | '_ \\   / _ \\  / __| | __| | '__|  / _ \\     | |      / _ \\  | '_ \\  / __|  / _ \\  | |  / _ \\\n          ___) | | |_) | |  __/ | (__  | |_  | |    |  __/  _  | |___  | (_) | | | | | \\__ \\ | (_) | | | |  __/\n         |____/  | .__/   \\___|  \\___|  \\__| |_|     \\___| (_)  \\____|  \\___/  |_| |_| |___/  \\___/  |_|  \\___|\n                 |_|                                                                                           \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_LeftAligned.Output.verified.txt",
    "content": "﻿  ____                          _                        ____                                 _        \n / ___|   _ __     ___    ___  | |_   _ __    ___       / ___|   ___    _ __    ___    ___   | |   ___ \n \\___ \\  | '_ \\   / _ \\  / __| | __| | '__|  / _ \\     | |      / _ \\  | '_ \\  / __|  / _ \\  | |  / _ \\\n  ___) | | |_) | |  __/ | (__  | |_  | |    |  __/  _  | |___  | (_) | | | | | \\__ \\ | (_) | | | |  __/\n |____/  | .__/   \\___|  \\___|  \\__| |_|     \\___| (_)  \\____|  \\___/  |_| |_| |___/  \\___/  |_|  \\___|\n         |_|                                                                                           \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_RightAligned.Output.verified.txt",
    "content": "                   ____                          _                        ____                                 _        \n                  / ___|   _ __     ___    ___  | |_   _ __    ___       / ___|   ___    _ __    ___    ___   | |   ___ \n                  \\___ \\  | '_ \\   / _ \\  / __| | __| | '__|  / _ \\     | |      / _ \\  | '_ \\  / __|  / _ \\  | |  / _ \\\n                   ___) | | |_) | |  __/ | (__  | |_  | |    |  __/  _  | |___  | (_) | | | | | \\__ \\ | (_) | | | |  __/\n                  |____/  | .__/   \\___|  \\___|  \\__| |_|     \\___| (_)  \\____|  \\___/  |_| |_| |___/  \\___/  |_|  \\___|\n                          |_|                                                                                           \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Figlet/Render_Wrapped.Output.verified.txt",
    "content": "﻿  ____                          _                        ____         \n / ___|   _ __     ___    ___  | |_   _ __    ___       / ___|   ___  \n \\___ \\  | '_ \\   / _ \\  / __| | __| | '__|  / _ \\     | |      / _ \\ \n  ___) | | |_) | |  __/ | (__  | |_  | |    |  __/  _  | |___  | (_) |\n |____/  | .__/   \\___|  \\___|  \\__| |_|     \\___| (_)  \\____|  \\___/ \n         |_|                                                          \n                        _        \n  _ __    ___    ___   | |   ___ \n | '_ \\  / __|  / _ \\  | |  / _ \\\n | | | | \\__ \\ | (_) | | | |  __/\n |_| |_| |___/  \\___/  |_|  \\___|\n                                 \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/AddEmptyRow/Render.Output.verified.txt",
    "content": "Foo  Bar  \n          \nQux  Corgi\n          \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render.Output.verified.txt",
    "content": "Qux     Corgi   Waldo\nGrault  Garply  Fred \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_2.Output.verified.txt",
    "content": "Options                                                         \n  -h, --help             Show command line help.                \n  -c, --configuration    The configuration to run for.          \n                         The default for most projects is Debug.\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Alignment.Output.verified.txt",
    "content": "   Foo   Bar    Baz  \n   Qux  Corgi   Waldo\nGrault  Garply  Fred \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Cell_Markup_Overflow.Output.verified.txt",
    "content": "﻿foo                 Short text     \npneumonoultramicr…                 \nbar                                \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Cell_Overflow_Crop.Output.verified.txt",
    "content": "﻿foo              Short text     \npneumonoultrami                 \nbar                             \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Cell_Overflow_Ellipsis.Output.verified.txt",
    "content": "﻿foo              Short text     \npneumonoultram…                 \nbar                             \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Cell_Overflow_Fold.Output.verified.txt",
    "content": "﻿foo              Short text     \npneumonoultrami                 \ncroscopicsilico                 \nvolcanoconiosis                 \nbar                             \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Cell_Overflow_With_NoWrap.Output.verified.txt",
    "content": "﻿foo              Short text     \npneumonoultram…                 \nbar                             \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_ExplicitPadding.Output.verified.txt",
    "content": "   Foo   Bar   Baz     \n   Qux   Corgi Waldo   \n   GraultGarplyFred    \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Grid/Render_Padding.Output.verified.txt",
    "content": "Foo     Bar     Baz  \nQux     Corgi   Waldo\nGrault  Garply  Fred \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Compact_Json.Output.verified.txt",
    "content": "﻿┌─Some JSON─────────────────────────────┐\n│ {                                     │\n│  \"id\": \"0001\",                        │\n│  \"type\": \"donut\",                     │\n│  \"name\": \"Cake\",                      │\n│  \"ppu\": 0.55,                         │\n│  \"foo\": true,                         │\n│  \"bar\": false,                        │\n│  \"qux\": 32,                           │\n│  \"corgi\": null,                       │\n│  \"batters\": {                         │\n│   \"batter\": [                         │\n│    {                                  │\n│     \"id\": \"1001\",                     │\n│     \"type\": \"Regular\",                │\n│     \"min\": 0                          │\n│    },                                 │\n│    {                                  │\n│     \"id\": \"1002\",                     │\n│     \"type\": \"Chocolate\",              │\n│     \"min\": 0.32                       │\n│    },                                 │\n│    {                                  │\n│     \"id\": \"1003\",                     │\n│     \"min\": 12.32,                     │\n│     \"type\": \"Blueberry\"               │\n│    },                                 │\n│    {                                  │\n│     \"id\": \"1004\",                     │\n│     \"min\": 0.32E-12,                  │\n│     \"type\": \"Devil's Food\"            │\n│    }                                  │\n│   ]                                   │\n│  },                                   │\n│  \"topping\": [                         │\n│   {                                   │\n│    \"id\": \"5001\",                      │\n│    \"min\": 0.32e-12,                   │\n│    \"type\": \"None\"                     │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5002\",                      │\n│    \"min\": 0.32E+12,                   │\n│    \"type\": \"Glazed\"                   │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5005\",                      │\n│    \"min\": 0.32e+12,                   │\n│    \"type\": \"Sugar\"                    │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5007\",                      │\n│    \"min\": 0.32e12,                    │\n│    \"type\": \"Powdered Sugar\"           │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5006\",                      │\n│    \"type\": \"Chocolate with Sprinkles\" │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5003\",                      │\n│    \"type\": \"Chocolate\"                │\n│   },                                  │\n│   {                                   │\n│    \"id\": \"5004\",                      │\n│    \"type\": \"Maple\"                    │\n│   }                                   │\n│  ]                                    │\n│ }                                     │\n└───────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Json/Render_Json.Output.verified.txt",
    "content": "﻿┌─Some JSON───────────────────────────────────┐\n│ {                                           │\n│    \"id\": \"0001\",                            │\n│    \"type\": \"donut\",                         │\n│    \"name\": \"Cake\",                          │\n│    \"ppu\": 0.55,                             │\n│    \"foo\": true,                             │\n│    \"bar\": false,                            │\n│    \"qux\": 32,                               │\n│    \"corgi\": null,                           │\n│    \"batters\": {                             │\n│       \"batter\": [                           │\n│          {                                  │\n│             \"id\": \"1001\",                   │\n│             \"type\": \"Regular\",              │\n│             \"min\": 0                        │\n│          },                                 │\n│          {                                  │\n│             \"id\": \"1002\",                   │\n│             \"type\": \"Chocolate\",            │\n│             \"min\": 0.32                     │\n│          },                                 │\n│          {                                  │\n│             \"id\": \"1003\",                   │\n│             \"min\": 12.32,                   │\n│             \"type\": \"Blueberry\"             │\n│          },                                 │\n│          {                                  │\n│             \"id\": \"1004\",                   │\n│             \"min\": 0.32E-12,                │\n│             \"type\": \"Devil's Food\"          │\n│          }                                  │\n│       ]                                     │\n│    },                                       │\n│    \"topping\": [                             │\n│       {                                     │\n│          \"id\": \"5001\",                      │\n│          \"min\": 0.32e-12,                   │\n│          \"type\": \"None\"                     │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5002\",                      │\n│          \"min\": 0.32E+12,                   │\n│          \"type\": \"Glazed\"                   │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5005\",                      │\n│          \"min\": 0.32e+12,                   │\n│          \"type\": \"Sugar\"                    │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5007\",                      │\n│          \"min\": 0.32e12,                    │\n│          \"type\": \"Powdered Sugar\"           │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5006\",                      │\n│          \"type\": \"Chocolate with Sprinkles\" │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5003\",                      │\n│          \"type\": \"Chocolate\"                │\n│       },                                    │\n│       {                                     │\n│          \"id\": \"5004\",                      │\n│          \"type\": \"Maple\"                    │\n│       }                                     │\n│    ]                                        │\n│ }                                           │\n└─────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Empty_Layout.Output.verified.txt",
    "content": "﻿╭─40 x 15──────────────────────────────╮\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n│             Placeholder              │\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n│                                      │\n╰──────────────────────────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Fallback_Layout.Output.verified.txt",
    "content": "﻿╭─T1 (40 x 7)──────────────────────────╮\n│                                      │\n│                                      │\n│             Placeholder              │\n│                                      │\n│                                      │\n╰──────────────────────────────────────╯\n╭─T2 (40 x 8)──────────────────────────╮\n│                                      │\n│                                      │\n│             Placeholder              │\n│                                      │\n│                                      │\n│                                      │\n╰──────────────────────────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout.Output.verified.txt",
    "content": "﻿╔══════════════════════════════════════╗\n║ Hello                                ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n║                                      ║\n╚══════════════════════════════════════╝"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Columns.Output.verified.txt",
    "content": "﻿╭─Left (20 x 15)───╮╭─Right (20 x 15)──╮\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Columns.Output.verified.txt",
    "content": "﻿╭─L1…────╮╭─L2…────╮╭─R1…────╮╭─R2…────╮\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│ Placeh ││ Placeh ││ Placeh ││ Placeh │\n│ older  ││ older  ││ older  ││ older  │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n│        ││        ││        ││        │\n╰────────╯╰────────╯╰────────╯╰────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows.Output.verified.txt",
    "content": "﻿╭─T1 (40 x 3)──────────────────────────╮\n│             Placeholder              │\n╰──────────────────────────────────────╯\n╭─T2 (40 x 4)──────────────────────────╮\n│             Placeholder              │\n│                                      │\n╰──────────────────────────────────────╯\n╭─B1 (40 x 4)──────────────────────────╮\n│             Placeholder              │\n│                                      │\n╰──────────────────────────────────────╯\n╭─B2 (40 x 4)──────────────────────────╮\n│             Placeholder              │\n│                                      │\n╰──────────────────────────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Rows_And_Columns.Output.verified.txt",
    "content": "﻿╭─A (20 x 3)───────╮╭─B (20 x 3)───────╮\n│   Placeholder    ││   Placeholder    │\n╰──────────────────╯╰──────────────────╯\n╭─C (20 x 4)───────╮╭─D (20 x 4)───────╮\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯\n╭─E (20 x 4)───────╮╭─F (20 x 4)───────╮\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯\n╭─G (20 x 4)───────╮╭─H (20 x 4)───────╮\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_17.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_20.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_23.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_28.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_30.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Nested_Three_Rows_In_One_Column.Output_31.verified.txt",
    "content": "﻿┌──────────────────┐┌──────────────────┐\n│ Hello, World!    ││ Hello, World!    │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘│                  │\n┌──────────────────┐│                  │\n│ Hello, World!    ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n│                  ││                  │\n└──────────────────┘└──────────────────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Minimum_Size.Output.verified.txt",
    "content": "﻿╭─Left (30 x 15)─────────────╮╭─Right…─╮\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││ Placeh │\n│        Placeholder         ││ older  │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n╰────────────────────────────╯╰────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Ratio.Output.verified.txt",
    "content": "﻿╭─Left (30 x 15)─────────────╮╭─Right…─╮\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││ Placeh │\n│        Placeholder         ││ older  │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n│                            ││        │\n╰────────────────────────────╯╰────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Respect_To_Size.Output.verified.txt",
    "content": "﻿╭─Left (28 x 15)───────────╮╭─Right…───╮\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││ Placehol │\n│       Placeholder        ││   der    │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n│                          ││          │\n╰──────────────────────────╯╰──────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_With_Rows.Output.verified.txt",
    "content": "﻿╭─Top (40 x 7)─────────────────────────╮\n│                                      │\n│                                      │\n│             Placeholder              │\n│                                      │\n│                                      │\n╰──────────────────────────────────────╯\n╭─Bottom (40 x 8)──────────────────────╮\n│                                      │\n│                                      │\n│             Placeholder              │\n│                                      │\n│                                      │\n│                                      │\n╰──────────────────────────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Layout/Render_Layout_Without_Invisible_Children.Output.verified.txt",
    "content": "﻿╭─B (40 x 3)───────────────────────────╮\n│             Placeholder              │\n╰──────────────────────────────────────╯\n╭─C (20 x 4)───────╮╭─D (20 x 4)───────╮\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯\n╭─E (20 x 4)───────╮╭─F (20 x 4)───────╮\n│   Placeholder    ││   Placeholder    │\n│                  ││                  │\n╰──────────────────╯╰──────────────────╯\n╭─G (40 x 4)───────────────────────────╮\n│             Placeholder              │\n│                                      │\n╰──────────────────────────────────────╯"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Padder/Render.Output.verified.txt",
    "content": "                     \n                     \n ┌───────┬───────┐   \n │ Foo   │ Bar   │   \n ├───────┼───────┤   \n │ Baz   │ Qux   │   \n │ Corgi │ Waldo │   \n └───────┴───────┘   \n                     \n                     \n                     \n                     \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Expanded.Output.verified.txt",
    "content": "                                                            \n                                                            \n ┌───────┬───────┐                                          \n │ Foo   │ Bar   │                                          \n ├───────┼───────┤                                          \n │ Baz   │ Qux   │                                          \n │ Corgi │ Waldo │                                          \n └───────┴───────┘                                          \n                                                            \n                                                            \n                                                            \n                                                            \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Padder/Render_Nested.Output.verified.txt",
    "content": "                                                            \n                                                            \n ┌───────┬─────────────┐                                    \n │ Foo   │Bar          │                                    \n ├───────┼─────────────┤                                    \n │ Baz   │Qux          │                                    \n │ Corgi │             │                                    \n │       │  ┌───────┐  │                                    \n │       │  │ Waldo │  │                                    \n │       │  └───────┘  │                                    \n │       │             │                                    \n └───────┴─────────────┘                                    \n                                                            \n                                                            \n                                                            \n                                                            \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render.Output.verified.txt",
    "content": "┌─────────────┐\n│ Hello World │\n└─────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_CJK.Output.verified.txt",
    "content": "┌──────────┐\n│ ┌──────┐ │\n│ │ 测试 │ │\n│ ├──────┤ │\n│ │ 测试 │ │\n│ └──────┘ │\n└──────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Centered.Output.verified.txt",
    "content": "┌───────────────────────┐\n│      Hello World      │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_Panel.Output.verified.txt",
    "content": "┌─────────────────┐\n│ ┌─────────────┐ │\n│ │ Hello World │ │\n│ └─────────────┘ │\n└─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Child_RightAligned.Output.verified.txt",
    "content": "┌───────────────────────┐\n│           Hello World │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Expand.Output.verified.txt",
    "content": "┌──────────────────────────────────────────────────────────────────────────────┐\n│ Hello World                                                                  │\n└──────────────────────────────────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header.Output.verified.txt",
    "content": "┌─Greeting─────────────────────────────────────────────────────────────────────┐\n│  Hello World                                                                 │\n└──────────────────────────────────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Centered.Output.verified.txt",
    "content": "┌───────────────────────────────────Greeting───────────────────────────────────┐\n│ Hello World                                                                  │\n└──────────────────────────────────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_Collapse.Output.verified.txt",
    "content": "┌─Greet…─┐\n│ Hello  │\n│ World  │\n└────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_LeftAligned.Output.verified.txt",
    "content": "┌─Greeting─────────────────────────────────────────────────────────────────────┐\n│ Hello World                                                                  │\n└──────────────────────────────────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Header_RightAligned.Output.verified.txt",
    "content": "┌─────────────────────────────────────────────────────────────────────Greeting─┐\n│ Hello World                                                                  │\n└──────────────────────────────────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Height.Output.verified.txt",
    "content": "﻿┌───────────────────┐\n│ Hello World       │\n│ Hello Hello Hello │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n│                   │\n└───────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_LineEndings.Output.verified.txt",
    "content": "┌───────────────────────┐\n│ I heard you like 📦   │\n│                       │\n│                       │\n│                       │\n│ So I put a 📦 in a 📦 │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Markup_Overflow_Ellipsis.Output.verified.txt",
    "content": "﻿┌──────────────────┐\n│ foo              │\n│ pneumonoultrami… │\n│ bar qux          │\n└──────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Multiline.Output.verified.txt",
    "content": "┌─────────────┐\n│ Hello World │\n│ Foo Bar     │\n└─────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Nested_Panel_With_Overflow.Output.verified.txt",
    "content": "﻿┌───────────────────────┐\n│ ┌─────────────┐       │\n│ │ foo         │       │\n│ │ pneumonoult │       │\n│ │ bar qux     │       │\n│ └─────────────┘       │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Padding.Output.verified.txt",
    "content": "┌───────────────────┐\n│                   │\n│   Hello World     │\n│                   │\n│                   │\n└───────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Text_Overflow_Crop.Output.verified.txt",
    "content": "﻿┌──────────────────┐\n│ foo              │\n│ pneumonoultramic │\n│ bar qux          │\n└──────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Text_Overflow_Ellipsis.Output.verified.txt",
    "content": "﻿┌──────────────────┐\n│ foo              │\n│ pneumonoultrami… │\n│ bar qux          │\n└──────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Text_Overflow_Fold.Output.verified.txt",
    "content": "﻿┌──────────────────┐\n│ foo              │\n│ pneumonoultramic │\n│ roscopicsilicovo │\n│ lcanoconiosis    │\n│ bar qux          │\n└──────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Text_Overflow_With_Padding.Output.verified.txt",
    "content": "﻿┌───────────────────────┐\n│  foo                  │\n│  pneumonoultramicro…  │\n│  bar qux              │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Unicode.Output.verified.txt",
    "content": "┌────┐\n│    │\n│ 💩 │\n│    │\n└────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width.Output.verified.txt",
    "content": "┌───────────────────────┐\n│ Hello World           │\n└───────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_Height.Output.verified.txt",
    "content": "┌────────────────────────────────────────────────┐\n│ Hello World                                    │\n│ Hello Hello Hello                              │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n│                                                │\n└────────────────────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Width_MaxWidth.Output.verified.txt",
    "content": "┌──────────────────┐\n│ Hello World      │\n└──────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_Wrap.Output.verified.txt",
    "content": "╭─Short paths──────────────────────────────────────────────────────────────────────╮\n│   at System.Runtime.CompilerServices.TaskAwaiter.                                │\n│      HandleNonSuccessAndDebuggerNotification(Task task)                          │\n╰──────────────────────────────────────────────────────────────────────────────────╯\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Panel/Render_ZeroPadding.Output.verified.txt",
    "content": "┌───────────┐\n│Hello World│\n└───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Formatted.Output.verified.txt",
    "content": "﻿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9,000\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/ProgressBar/Render.Output.verified.txt",
    "content": "﻿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9000"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Recorder/Html.Output.verified.txt",
    "content": "<pre style=\"font-size:90%;font-family:consolas,'Courier New',monospace\">\n<span>┌─────────────────┬───────┬─────┐</span>\n<span>│</span><span> </span><span style=\"color: #FF0000;background-color: #000000\">Foo</span><span>            </span><span> </span><span>│</span><span> </span><span style=\"color: #008000;font-weight: bold\">Bar</span><span>  </span><span> </span><span>│</span><span> </span><span style=\"color: #0000FF;font-style: italic\">Qux</span><span> </span><span>│</span>\n<span>├─────────────────┼───────┼─────┤</span>\n<span>│</span><span> </span><span style=\"text-decoration: underline\">Corgi</span><span>          </span><span> </span><span>│</span><span> </span><span style=\"font-weight: bold;text-decoration: line-through\">Waldo</span><span> </span><span>│</span><span> </span><span style=\"color: #7F7F7F\">Zap</span><span> </span><span>│</span>\n<span>│</span><span> </span><span style=\"color: #FF0000\">╭</span><span style=\"color: #FF0000\">─────────────</span><span style=\"color: #FF0000\">╮</span><span> </span><span>│</span><span> </span><span>     </span><span> </span><span>│</span><span> </span><span>   </span><span> </span><span>│</span>\n<span>│</span><span> </span><span style=\"color: #FF0000\">│</span><span> </span><span style=\"color: #0000FF\">Hello</span><span style=\"color: #0000FF\"> </span><span style=\"color: #0000FF\">World</span><span> </span><span style=\"color: #FF0000\">│</span><span> </span><span>│</span><span> </span><span>     </span><span> </span><span>│</span><span> </span><span>   </span><span> </span><span>│</span>\n<span>│</span><span> </span><span style=\"color: #FF0000\">╰</span><span style=\"color: #FF0000\">─────────────</span><span style=\"color: #FF0000\">╯</span><span> </span><span>│</span><span> </span><span>     </span><span> </span><span>│</span><span> </span><span>   </span><span> </span><span>│</span>\n<span>└─────────────────┴───────┴─────┘</span>\n</pre>"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Recorder/Text.Output.verified.txt",
    "content": "┌─────────────────┬───────┬─────┐\n│ Foo             │ Bar   │ Qux │\n├─────────────────┼───────┼─────┤\n│ Corgi           │ Waldo │ Zap │\n│ ╭─────────────╮ │       │     │\n│ │ Hello World │ │       │     │\n│ ╰─────────────╯ │       │     │\n└─────────────────┴───────┴─────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rows/GH-1188-Rows.Output.verified.txt",
    "content": "﻿┌─────┐\n│ 1   │\n│ 22  │\n│ 333 │\n└─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rows/Render.Output.verified.txt",
    "content": "Hello\n┌─────┬─────┐\n│ Foo │ Bar │\n├─────┼─────┤\n│ Baz │ Qux │\n└─────┴─────┘\nWorld\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Empty.Output.verified.txt",
    "content": "﻿┌─────────────┬─────┐\n│ Foo         │ Bar │\n├─────────────┼─────┤\n│ HELLO WORLD │     │\n│             │ Qux │\n└─────────────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Expanded_And_Nested.Output.verified.txt",
    "content": "┌────────────────────────────────────────────────────┬─────┐\n│ Foo                                                │ Bar │\n├────────────────────────────────────────────────────┼─────┤\n│ HELLO WORLD                                        │     │\n│ Hello                                              │ Qux │\n│ World                                              │     │\n└────────────────────────────────────────────────────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rows/Render_Nested.Output.verified.txt",
    "content": "┌─────────────┬─────┐\n│ Foo         │ Bar │\n├─────────────┼─────┤\n│ HELLO WORLD │     │\n│ Hello       │ Qux │\n│ World       │     │\n└─────────────┴─────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render.Output.verified.txt",
    "content": "────────────────────────────────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_Header.Output.verified.txt",
    "content": "═════════════ Hello World ══════════════\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Border_NoHeader.Output.verified.txt",
    "content": "════════════════════════════════════════\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_DefaultAlignment.Output.verified.txt",
    "content": "───────────── Hello World ──────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_LeftAligned.Output.verified.txt",
    "content": "── Hello World ─────────────────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Header_RightAligned.Output.verified.txt",
    "content": "───────────────────────── Hello World ──\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Linebreaks.Output.verified.txt",
    "content": "──────────── Hello World ! ─────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Rule/Render_Truncate.Output.verified.txt",
    "content": "───────────── Hello World ──────────────\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/AddEmptyRow.Output.verified.txt",
    "content": "┌────────┬────────┬───────┐\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│        │        │       │\n│ Grault │ Garply │ Fred  │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render.Output.verified.txt",
    "content": "┌────────┬────────┬───────┐\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_CellPadding.Output.verified.txt",
    "content": "┌────────┬────────┬──────────┐\n│ Foo    │ Bar    │   Baz    │\n├────────┼────────┼──────────┤\n│ Qux    │ Corgi  │   Waldo  │\n│ Quuux  │        │          │\n│ Grault │ Garply │   Fred   │\n└────────┴────────┴──────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Markup_Overflow.Output.verified.txt",
    "content": "﻿┌────────────────────┬─────────────────┐\n│ Column1            │ Column2         │\n├────────────────────┼─────────────────┤\n│ foo                │ Short text      │\n│ pneumonoultramicr… │                 │\n│ bar                │                 │\n└────────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Overflow_Crop.Output.verified.txt",
    "content": "﻿┌─────────────────┬─────────────────┐\n│ Column1         │ Column2         │\n├─────────────────┼─────────────────┤\n│ foo             │ Short text      │\n│ pneumonoultrami │                 │\n│ bar             │                 │\n└─────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Overflow_Ellipsis.Output.verified.txt",
    "content": "﻿┌─────────────────┬─────────────────┐\n│ Column1         │ Column2         │\n├─────────────────┼─────────────────┤\n│ foo             │ Short text      │\n│ pneumonoultram… │                 │\n│ bar             │                 │\n└─────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Overflow_Fold.Output.verified.txt",
    "content": "﻿┌─────────────────┬─────────────────┐\n│ Column1         │ Column2         │\n├─────────────────┼─────────────────┤\n│ foo             │ Short text      │\n│ pneumonoultrami │                 │\n│ croscopicsilico │                 │\n│ volcanoconiosis │                 │\n│ bar             │                 │\n└─────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Overflow_Multiple_Rows.Output.verified.txt",
    "content": "﻿┌─────────────────┬─────────────────┐\n│ Column1         │ Column2         │\n├─────────────────┼─────────────────┤\n│ foo             │ First row       │\n│ pneumonoultrami │                 │\n│ bar             │ Second row      │\n│ supercalifragi… │                 │\n│ qux             │ Third row       │\n│ antidisestablis │                 │\n│ hmentarianism   │                 │\n└─────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Cell_Overflow_With_NoWrap.Output.verified.txt",
    "content": "﻿┌─────────────────┬─────────────────┐\n│ Column1         │ Column2         │\n├─────────────────┼─────────────────┤\n│ foo             │ Short text      │\n│ pneumonoultram… │                 │\n│ bar             │                 │\n└─────────────────┴─────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Align_Widget.verified.txt",
    "content": "﻿                          ┌────────┬────────┬───────┐                           \n                          │ Foo    │ Bar    │ Baz   │                           \n                          ├────────┼────────┼───────┤                           \n                          │ Qux    │ Corgi  │ Waldo │                           \n                          │ Grault │ Garply │ Fred  │                           \n                          └────────┴────────┴───────┘                           "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Centered.Output.verified.txt",
    "content": "                          ┌────────┬────────┬───────┐                           \n                          │ Foo    │ Bar    │ Baz   │                           \n                          ├────────┼────────┼───────┤                           \n                          │ Qux    │ Corgi  │ Waldo │                           \n                          │ Grault │ Garply │ Fred  │                           \n                          └────────┴────────┴───────┘                           \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnJustification.Output.verified.txt",
    "content": "┌────────┬────────┬────────────────────────────┐\n│ Foo    │    Bar │            Baz             │\n├────────┼────────┼────────────────────────────┤\n│ Qux    │  Corgi │           Waldo            │\n│ Grault │ Garply │ Lorem ipsum dolor sit amet │\n└────────┴────────┴────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_2.Output.verified.txt",
    "content": "﻿┌──────┬──────┬──────┬──────┐\n│ Col1 │ Col2 │ Col3 │ Col4 │\n├──────┼──────┼──────┼──────┤\n│ A    │ B spans 2   │ D    │\n│ E    │ F    │ G    │ H    │\n└──────┴──────┴──────┴──────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_3.Output.verified.txt",
    "content": "﻿┌────────┬─────────┬────────────┬─────────┐\n│ Item   │ Qty     │ Unit Price │ Total   │\n├────────┼─────────┼────────────┼─────────┤\n│ Item A │ 5       │ 20         │ 100     │\n│ Item B │ Note: deliver after 5pm        │\n│ Item C │ 3       │ 15         │ 45      │\n└────────┴─────────┴────────────┴─────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_All.Output.verified.txt",
    "content": "﻿┌──────────┬──────────┬──────────┐\n│ Col1     │ Col2     │ Col3     │\n├──────────┼──────────┼──────────┤\n│ A        │ B        │ C        │\n│ Full width spanning cell       │\n│ D        │ E        │ F        │\n└──────────┴──────────┴──────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_LeftAligned.Output.verified.txt",
    "content": "﻿┌──────┬────────┬───────┐\n│ Left │ Center │ Right │\n├──────┼────────┼───────┤\n│ A    │    Spanned     │\n│ D    │   E    │     F │\n└──────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_Multiline.Output.verified.txt",
    "content": "﻿┌──────┬──────┬──────┐\n│ Col1 │ Col2 │ Col3 │\n├──────┼──────┼──────┤\n│ A    │ Line 1      │\n│      │ Line 2      │\n│      │ Line 3      │\n│ D    │ E    │ F    │\n└──────┴──────┴──────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_Multiple.Output.verified.txt",
    "content": "﻿┌──────┬──────┬──────┬──────┬──────┐\n│ Col1 │ Col2 │ Col3 │ Col4 │ Col5 │\n├──────┼──────┼──────┼──────┼──────┤\n│ Span1       │ Span2       │ E    │\n│ A    │ B    │ C    │ D    │ E    │\n└──────┴──────┴──────┴──────┴──────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_ColumnSpan_NoBorder.Output.verified.txt",
    "content": "﻿Col1 Col2 Col3\nA    Spanned \nD    E    F   \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_EA_Character.Output.verified.txt",
    "content": "┌───────────────┬───────────────┬──────────────┐\n│ Foo           │ Bar           │ Baz          │\n├───────────────┼───────────────┼──────────────┤\n│ 中文          │ 日本語        │ 한국어       │\n│ 这是中文测试  │ これは日本語  │ 이것은한국어 │\n│ 字符串        │ のテスト文字  │ 테스트문자열 │\n│               │ 列です        │ 입니다       │\n└───────────────┴───────────────┴──────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Empty_Column.Output.verified.txt",
    "content": "﻿┌──┬───┐\n│  │   │\n├──┼───┤\n│  │ A │\n│  │ B │\n└──┴───┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Expand.Output.verified.txt",
    "content": "┌───────────────────────────┬───────────────────────────┬──────────────────────┐\n│ Foo                       │ Bar                       │ Baz                  │\n├───────────────────────────┼───────────────────────────┼──────────────────────┤\n│ Qux                       │ Corgi                     │ Waldo                │\n│ Grault                    │ Garply                    │ Fred                 │\n└───────────────────────────┴───────────────────────────┴──────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Fold.Output.verified.txt",
    "content": "╔════════════════════════════╗\n║ ┌────────┬───────┬───────┐ ║\n║ │ Foo    │ Bar   │ Baz   │ ║\n║ ├────────┼───────┼───────┤ ║\n║ │ Qux    │ Corgi │ Waldo │ ║\n║ │ With A │       │       │ ║\n║ │ Long   │       │       │ ║\n║ │ Descri │       │       │ ║\n║ │ ption  │       │       │ ║\n║ │ Grault │ Garpl │ Fred  │ ║\n║ │        │ y     │ On A  │ ║\n║ │        │       │ Long  │ ║\n║ │        │       │ Long  │ ║\n║ │        │       │ Walk  │ ║\n║ └────────┴───────┴───────┘ ║\n╚════════════════════════════╝\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Footers.Output.verified.txt",
    "content": "┌────────┬────────┬───────┐\n│    Foo │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│    Qux │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n├────────┼────────┼───────┤\n│    Oof │        │ Zab   │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Impossible.Output.verified.txt",
    "content": "╭───────┬───────┬───────╮\n│ ┌───┐ │ ┌───┐ │ ┌───┐ │\n│ │ A │ │ │ D │ │ │ G │ │\n│ │ B │ │ │ E │ │ │ H │ │\n│ │ C │ │ │ F │ │ │ I │ │\n│ └───┘ │ └───┘ │ └───┘ │\n├───────┼───────┼───────┤\n│ Hello │ World │       │\n│ …     │ Whaat │   Lol │\n│ Hej   │ Värld │       │\n│       │ en    │       │\n╰───────┴───────┴───────╯\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Align_Widget.verified.txt",
    "content": "﻿┌────────┬────────┬───────┐                                                     \n│ Foo    │ Bar    │ Baz   │                                                     \n├────────┼────────┼───────┤                                                     \n│ Qux    │ Corgi  │ Waldo │                                                     \n│ Grault │ Garply │ Fred  │                                                     \n└────────┴────────┴───────┘                                                     "
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_LeftAligned.Output.verified.txt",
    "content": "┌────────┬────────┬───────┐\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Multiline.Output.verified.txt",
    "content": "┌────────┬────────┬───────┐\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Quuux  │        │       │\n│ Grault │ Garply │ Fred  │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Nested.Output.verified.txt",
    "content": "┌───────────────────────────────────┐\n│ +-------------------------------+ │\n│ | ╭──────────┬────────┬───────╮ | │\n│ | │ Foo      │ Bar    │   Baz │ | │\n│ | ├──────────┼────────┼───────┤ | │\n│ | │ Qux      │ Corgi  │ Waldo │ | │\n│ | │ Quuuuuux │        │       │ | │\n│ | │ Grault   │ Garply │  Fred │ | │\n│ | ╰──────────┴────────┴───────╯ | │\n│ +-------------------------------+ │\n└───────────────────────────────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_NoRows.Output.verified.txt",
    "content": "┌─────┬─────┬────────┐\n│ Foo │ Bar │   Baz  │\n└─────┴─────┴────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Align_Widget.verified.txt",
    "content": "﻿                                                     ┌────────┬────────┬───────┐\n                                                     │ Foo    │ Bar    │ Baz   │\n                                                     ├────────┼────────┼───────┤\n                                                     │ Qux    │ Corgi  │ Waldo │\n                                                     │ Grault │ Garply │ Fred  │\n                                                     └────────┴────────┴───────┘"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_RightAligned.Output.verified.txt",
    "content": "                                                     ┌────────┬────────┬───────┐\n                                                     │ Foo    │ Bar    │ Baz   │\n                                                     ├────────┼────────┼───────┤\n                                                     │ Qux    │ Corgi  │ Waldo │\n                                                     │ Grault │ Garply │ Fred  │\n                                                     └────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators.Output.verified.txt",
    "content": "﻿┌────────┬────────┬───────┐\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n├────────┼────────┼───────┤\n│ Grault │ Garply │ Fred  │\n└────────┴────────┴───────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Row_Separators_No_Header.Output.verified.txt",
    "content": "﻿┌────────┬────────┐\n│ Qux    │ Corgi  │\n├────────┼────────┤\n│ Waldo  │ Grault │\n├────────┼────────┤\n│ Garply │ Fred   │\n└────────┴────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption.Output.verified.txt",
    "content": "        Hello World        \n╭────────┬────────┬───────╮\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n╰────────┴────────┴───────╯\n       Goodbye World       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_Centered.Output.verified.txt",
    "content": "                                  Hello World                                   \n                          ╭────────┬────────┬───────╮                           \n                          │ Foo    │ Bar    │ Baz   │                           \n                          ├────────┼────────┼───────┤                           \n                          │ Qux    │ Corgi  │ Waldo │                           \n                          │ Grault │ Garply │ Fred  │                           \n                          ╰────────┴────────┴───────╯                           \n                                 Goodbye World                                  \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LeftAligned.Output.verified.txt",
    "content": "        Hello World        \n╭────────┬────────┬───────╮\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n╰────────┴────────┴───────╯\n       Goodbye World       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_LowerCase.Output.verified.txt",
    "content": "        hello world        \n╭────────┬────────┬───────╮\n│ Foo    │ Bar    │ Baz   │\n├────────┼────────┼───────┤\n│ Qux    │ Corgi  │ Waldo │\n│ Grault │ Garply │ Fred  │\n╰────────┴────────┴───────╯\n       goodbye world       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Render_Title_Caption_RightAligned.Output.verified.txt",
    "content": "                                                             Hello World        \n                                                     ╭────────┬────────┬───────╮\n                                                     │ Foo    │ Bar    │ Baz   │\n                                                     ├────────┼────────┼───────┤\n                                                     │ Qux    │ Corgi  │ Waldo │\n                                                     │ Grault │ Garply │ Fred  │\n                                                     ╰────────┴────────┴───────╯\n                                                            Goodbye World       \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Add.Output.verified.txt",
    "content": "┌───────────┐\n│ Column #1 │\n├───────────┤\n│ 1         │\n│ 2         │\n│ 3         │\n└───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Renderables.verified.txt",
    "content": "┌───────────┬───────────┐\n│ Column #1 │ Column #2 │\n├───────────┼───────────┤\n│ 1         │ 1-2       │\n│ 2         │ 2-2       │\n│ 3         │ 3-2       │\n└───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Add.Strings.verified.txt",
    "content": "┌───────────┬───────────┐\n│ Column #1 │ Column #2 │\n├───────────┼───────────┤\n│ 1         │ 1-2       │\n│ 2         │ 2-2       │\n│ 3         │ 3-2       │\n└───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Renderables.verified.txt",
    "content": "┌───────────┬───────────┐\n│ Column #1 │ Column #2 │\n├───────────┼───────────┤\n│ 1         │ 1-2       │\n│ 3         │ 3-2       │\n│ 2         │ 2-2       │\n└───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Insert.Strings.verified.txt",
    "content": "┌───────────┬───────────┐\n│ Column #1 │ Column #2 │\n├───────────┼───────────┤\n│ 1         │ 1-2       │\n│ 3         │ 3-2       │\n│ 2         │ 2-2       │\n└───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Extensions/Remove.Output.verified.txt",
    "content": "┌───────────┬───────────┐\n│ Column #1 │ Column #2 │\n├───────────┼───────────┤\n│ 1         │ 1-2       │\n│ 3         │ 3-2       │\n└───────────┴───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Insert.Output.verified.txt",
    "content": "┌───────────┐\n│ Column #1 │\n├───────────┤\n│ 1         │\n│ 3         │\n│ 2         │\n└───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Table/Rows/Remove.Output.verified.txt",
    "content": "┌───────────┐\n│ Column #1 │\n├───────────┤\n│ 1         │\n│ 3         │\n└───────────┘\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/TextPath/GH-1307.Output.verified.txt",
    "content": "﻿┌─────┐              ┌─────┐            \n│ Baz │              │ Qux │            \n└─────┘              └─────┘            \n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Tree/Render.Output.verified.txt",
    "content": "Root node\n╠══ child1\n║   ╠══ multiple\n║   ║   line 0\n║   ╠══ multiple\n║   ║   line 1\n║   ╠══ multiple\n║   ║   line 2\n║   ╠══ multiple\n║   ║   line 3\n║   ╠══ multiple\n║   ║   line 4\n║   ╠══ multiple\n║   ║   line 5\n║   ╠══ multiple\n║   ║   line 6\n║   ╠══ multiple\n║   ║   line 7\n║   ╠══ multiple\n║   ║   line 8\n║   ╚══ multiple\n║       line 9\n╠══ child2\n║   ╚══ child2-1\n║       ╚══ Child2-1-1\n║           child\n╠══ child3\n║   ╚══ single leaf\n║       multiline\n║       ╚══                2021 January                \n║           ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐\n║           │ Sun │ Mon │ Tue │ Wed │ Thu │ Fri │ Sat │\n║           ├─────┼─────┼─────┼─────┼─────┼─────┼─────┤\n║           │     │     │     │     │     │ 1   │ 2   │\n║           │ 3   │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │\n║           │ 10  │ 11  │ 12  │ 13  │ 14  │ 15  │ 16  │\n║           │ 17  │ 18  │ 19  │ 20  │ 21  │ 22  │ 23  │\n║           │ 24  │ 25  │ 26  │ 27  │ 28  │ 29  │ 30  │\n║           │ 31  │     │     │     │     │     │     │\n║           └─────┴─────┴─────┴─────┴─────┴─────┴─────┘\n╚══ child4\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Expectations/Widgets/Tree/Render_NoChildren.Output.verified.txt",
    "content": "Root node\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Extensions/ConsoleKeyExtensions.cs",
    "content": "namespace Spectre.Console.Tests;\n\npublic static class ConsoleKeyExtensions\n{\n    public static ConsoleKeyInfo ToConsoleKeyInfo(this ConsoleKey key)\n    {\n        var ch = (char)key;\n        if (char.IsControl(ch))\n        {\n            ch = '\\0';\n        }\n\n        return new ConsoleKeyInfo(ch, key, false, false, false);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Extensions/StreamExtensions.cs",
    "content": "namespace Spectre.Console.Tests;\n\npublic static class StreamExtensions\n{\n    public static string ReadText(this Stream stream)\n    {\n        ArgumentNullException.ThrowIfNull(stream);\n\n        using (var reader = new StreamReader(stream))\n        {\n            return reader.ReadToEnd();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Legacy/Color.Generated.cs",
    "content": "using System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace Spectre.Console.Tests.Legacy\n{\n    public partial struct Color : IEquatable<Color>\n    {\n        /// <summary>\n        /// Gets the default color.\n        /// </summary>\n        public static Color Default { get; }\n\n        static Color()\n        {\n            Default = new Color(0, 0, 0, 0, true);\n        }\n\n        /// <summary>\n        /// Gets the red component.\n        /// </summary>\n        public byte R { get; }\n\n        /// <summary>\n        /// Gets the green component.\n        /// </summary>\n        public byte G { get; }\n\n        /// <summary>\n        /// Gets the blue component.\n        /// </summary>\n        public byte B { get; }\n\n        /// <summary>\n        /// Gets the number of the color, if any.\n        /// </summary>\n        internal byte? Number { get; }\n\n        /// <summary>\n        /// Gets a value indicating whether or not this is the default color.\n        /// </summary>\n        internal bool IsDefault { get; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"Color\"/> struct.\n        /// </summary>\n        /// <param name=\"red\">The red component.</param>\n        /// <param name=\"green\">The green component.</param>\n        /// <param name=\"blue\">The blue component.</param>\n        public Color(byte red, byte green, byte blue)\n        {\n            R = red;\n            G = green;\n            B = blue;\n            IsDefault = false;\n            Number = null;\n        }\n\n        /// <inheritdoc/>\n        public bool Equals(Color other)\n        {\n            return (IsDefault && other.IsDefault) ||\n                   (IsDefault == other.IsDefault && R == other.R && G == other.G && B == other.B);\n        }\n    }\n\n    /// <summary>\n    /// Represents a color.\n    /// </summary>\n    public partial struct Color\n    {\n        internal Color(byte number, byte red, byte green, byte blue, bool isDefault = false)\n            : this(red, green, blue)\n        {\n            Number = number;\n            IsDefault = isDefault;\n        }\n\n        /// <summary>\n        /// Gets the color \"Black\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Black { get; } = new Color(0, 0, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"Maroon\" (RGB 128,0,0).\n        /// </summary>\n        public static Color Maroon { get; } = new Color(1, 128, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"Green\" (RGB 0,128,0).\n        /// </summary>\n        public static Color Green { get; } = new Color(2, 0, 128, 0);\n\n        /// <summary>\n        /// Gets the color \"Olive\" (RGB 128,128,0).\n        /// </summary>\n        public static Color Olive { get; } = new Color(3, 128, 128, 0);\n\n        /// <summary>\n        /// Gets the color \"Navy\" (RGB 0,0,128).\n        /// </summary>\n        public static Color Navy { get; } = new Color(4, 0, 0, 128);\n\n        /// <summary>\n        /// Gets the color \"Purple\" (RGB 128,0,128).\n        /// </summary>\n        public static Color Purple { get; } = new Color(5, 128, 0, 128);\n\n        /// <summary>\n        /// Gets the color \"Teal\" (RGB 0,128,128).\n        /// </summary>\n        public static Color Teal { get; } = new Color(6, 0, 128, 128);\n\n        /// <summary>\n        /// Gets the color \"Silver\" (RGB 192,192,192).\n        /// </summary>\n        public static Color Silver { get; } = new Color(7, 192, 192, 192);\n\n        /// <summary>\n        /// Gets the color \"Grey\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey { get; } = new Color(8, 128, 128, 128);\n\n        /// <summary>\n        /// Gets the color \"Gray\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray { get; } = new Color(8, 128, 128, 128);\n\n        /// <summary>\n        /// Gets the color \"Red\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red { get; } = new Color(9, 255, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"Lime\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Lime { get; } = new Color(10, 0, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"Yellow\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow { get; } = new Color(11, 255, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"Blue\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue { get; } = new Color(12, 0, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"Fuchsia\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Fuchsia { get; } = new Color(13, 255, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"Magenta\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta { get; } = new Color(13, 255, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"Aqua\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Aqua { get; } = new Color(14, 0, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Cyan\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan { get; } = new Color(14, 0, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"White\" (RGB 255,255,255).\n        /// </summary>\n        public static Color White { get; } = new Color(15, 255, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Grey0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Grey0 { get; } = new Color(16, 0, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"Gray0\" (RGB 0,0,0).\n        /// </summary>\n        public static Color Gray0 { get; } = new Color(16, 0, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"NavyBlue\" (RGB 0,0,95).\n        /// </summary>\n        public static Color NavyBlue { get; } = new Color(17, 0, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkBlue\" (RGB 0,0,135).\n        /// </summary>\n        public static Color DarkBlue { get; } = new Color(18, 0, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"Blue3\" (RGB 0,0,175).\n        /// </summary>\n        public static Color Blue3 { get; } = new Color(19, 0, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"Blue3_1\" (RGB 0,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Blue3_1 { get; } = new Color(20, 0, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"Blue1\" (RGB 0,0,255).\n        /// </summary>\n        public static Color Blue1 { get; } = new Color(21, 0, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkGreen\" (RGB 0,95,0).\n        /// </summary>\n        public static Color DarkGreen { get; } = new Color(22, 0, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4\" (RGB 0,95,95).\n        /// </summary>\n        public static Color DeepSkyBlue4 { get; } = new Color(23, 0, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_1\" (RGB 0,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_1 { get; } = new Color(24, 0, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue4_2\" (RGB 0,95,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue4_2 { get; } = new Color(25, 0, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"DodgerBlue3\" (RGB 0,95,215).\n        /// </summary>\n        public static Color DodgerBlue3 { get; } = new Color(26, 0, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"DodgerBlue2\" (RGB 0,95,255).\n        /// </summary>\n        public static Color DodgerBlue2 { get; } = new Color(27, 0, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"Green4\" (RGB 0,135,0).\n        /// </summary>\n        public static Color Green4 { get; } = new Color(28, 0, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen4\" (RGB 0,135,95).\n        /// </summary>\n        public static Color SpringGreen4 { get; } = new Color(29, 0, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"Turquoise4\" (RGB 0,135,135).\n        /// </summary>\n        public static Color Turquoise4 { get; } = new Color(30, 0, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3\" (RGB 0,135,175).\n        /// </summary>\n        public static Color DeepSkyBlue3 { get; } = new Color(31, 0, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue3_1\" (RGB 0,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepSkyBlue3_1 { get; } = new Color(32, 0, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"DodgerBlue1\" (RGB 0,135,255).\n        /// </summary>\n        public static Color DodgerBlue1 { get; } = new Color(33, 0, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Green3\" (RGB 0,175,0).\n        /// </summary>\n        public static Color Green3 { get; } = new Color(34, 0, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen3\" (RGB 0,175,95).\n        /// </summary>\n        public static Color SpringGreen3 { get; } = new Color(35, 0, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkCyan\" (RGB 0,175,135).\n        /// </summary>\n        public static Color DarkCyan { get; } = new Color(36, 0, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"LightSeaGreen\" (RGB 0,175,175).\n        /// </summary>\n        public static Color LightSeaGreen { get; } = new Color(37, 0, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue2\" (RGB 0,175,215).\n        /// </summary>\n        public static Color DeepSkyBlue2 { get; } = new Color(38, 0, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"DeepSkyBlue1\" (RGB 0,175,255).\n        /// </summary>\n        public static Color DeepSkyBlue1 { get; } = new Color(39, 0, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Green3_1\" (RGB 0,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Green3_1 { get; } = new Color(40, 0, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen3_1\" (RGB 0,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen3_1 { get; } = new Color(41, 0, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen2\" (RGB 0,215,135).\n        /// </summary>\n        public static Color SpringGreen2 { get; } = new Color(42, 0, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"Cyan3\" (RGB 0,215,175).\n        /// </summary>\n        public static Color Cyan3 { get; } = new Color(43, 0, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"DarkTurquoise\" (RGB 0,215,215).\n        /// </summary>\n        public static Color DarkTurquoise { get; } = new Color(44, 0, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"Turquoise2\" (RGB 0,215,255).\n        /// </summary>\n        public static Color Turquoise2 { get; } = new Color(45, 0, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"Green1\" (RGB 0,255,0).\n        /// </summary>\n        public static Color Green1 { get; } = new Color(46, 0, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen2_1\" (RGB 0,255,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SpringGreen2_1 { get; } = new Color(47, 0, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"SpringGreen1\" (RGB 0,255,135).\n        /// </summary>\n        public static Color SpringGreen1 { get; } = new Color(48, 0, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"MediumSpringGreen\" (RGB 0,255,175).\n        /// </summary>\n        public static Color MediumSpringGreen { get; } = new Color(49, 0, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"Cyan2\" (RGB 0,255,215).\n        /// </summary>\n        public static Color Cyan2 { get; } = new Color(50, 0, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"Cyan1\" (RGB 0,255,255).\n        /// </summary>\n        public static Color Cyan1 { get; } = new Color(51, 0, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkRed\" (RGB 95,0,0).\n        /// </summary>\n        public static Color DarkRed { get; } = new Color(52, 95, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepPink4\" (RGB 95,0,95).\n        /// </summary>\n        public static Color DeepPink4 { get; } = new Color(53, 95, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"Purple4\" (RGB 95,0,135).\n        /// </summary>\n        public static Color Purple4 { get; } = new Color(54, 95, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"Purple4_1\" (RGB 95,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple4_1 { get; } = new Color(55, 95, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"Purple3\" (RGB 95,0,215).\n        /// </summary>\n        public static Color Purple3 { get; } = new Color(56, 95, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"BlueViolet\" (RGB 95,0,255).\n        /// </summary>\n        public static Color BlueViolet { get; } = new Color(57, 95, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"Orange4\" (RGB 95,95,0).\n        /// </summary>\n        public static Color Orange4 { get; } = new Color(58, 95, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"Grey37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Grey37 { get; } = new Color(59, 95, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"Gray37\" (RGB 95,95,95).\n        /// </summary>\n        public static Color Gray37 { get; } = new Color(59, 95, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple4\" (RGB 95,95,135).\n        /// </summary>\n        public static Color MediumPurple4 { get; } = new Color(60, 95, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"SlateBlue3\" (RGB 95,95,175).\n        /// </summary>\n        public static Color SlateBlue3 { get; } = new Color(61, 95, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"SlateBlue3_1\" (RGB 95,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SlateBlue3_1 { get; } = new Color(62, 95, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"RoyalBlue1\" (RGB 95,95,255).\n        /// </summary>\n        public static Color RoyalBlue1 { get; } = new Color(63, 95, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse4\" (RGB 95,135,0).\n        /// </summary>\n        public static Color Chartreuse4 { get; } = new Color(64, 95, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4\" (RGB 95,135,95).\n        /// </summary>\n        public static Color DarkSeaGreen4 { get; } = new Color(65, 95, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"PaleTurquoise4\" (RGB 95,135,135).\n        /// </summary>\n        public static Color PaleTurquoise4 { get; } = new Color(66, 95, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"SteelBlue\" (RGB 95,135,175).\n        /// </summary>\n        public static Color SteelBlue { get; } = new Color(67, 95, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"SteelBlue3\" (RGB 95,135,215).\n        /// </summary>\n        public static Color SteelBlue3 { get; } = new Color(68, 95, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"CornflowerBlue\" (RGB 95,135,255).\n        /// </summary>\n        public static Color CornflowerBlue { get; } = new Color(69, 95, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse3\" (RGB 95,175,0).\n        /// </summary>\n        public static Color Chartreuse3 { get; } = new Color(70, 95, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen4_1\" (RGB 95,175,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen4_1 { get; } = new Color(71, 95, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"CadetBlue\" (RGB 95,175,135).\n        /// </summary>\n        public static Color CadetBlue { get; } = new Color(72, 95, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"CadetBlue_1\" (RGB 95,175,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color CadetBlue_1 { get; } = new Color(73, 95, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"SkyBlue3\" (RGB 95,175,215).\n        /// </summary>\n        public static Color SkyBlue3 { get; } = new Color(74, 95, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"SteelBlue1\" (RGB 95,175,255).\n        /// </summary>\n        public static Color SteelBlue1 { get; } = new Color(75, 95, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse3_1\" (RGB 95,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse3_1 { get; } = new Color(76, 95, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"PaleGreen3\" (RGB 95,215,95).\n        /// </summary>\n        public static Color PaleGreen3 { get; } = new Color(77, 95, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"SeaGreen3\" (RGB 95,215,135).\n        /// </summary>\n        public static Color SeaGreen3 { get; } = new Color(78, 95, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"Aquamarine3\" (RGB 95,215,175).\n        /// </summary>\n        public static Color Aquamarine3 { get; } = new Color(79, 95, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"MediumTurquoise\" (RGB 95,215,215).\n        /// </summary>\n        public static Color MediumTurquoise { get; } = new Color(80, 95, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"SteelBlue1_1\" (RGB 95,215,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SteelBlue1_1 { get; } = new Color(81, 95, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse2\" (RGB 95,255,0).\n        /// </summary>\n        public static Color Chartreuse2 { get; } = new Color(82, 95, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"SeaGreen2\" (RGB 95,255,95).\n        /// </summary>\n        public static Color SeaGreen2 { get; } = new Color(83, 95, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"SeaGreen1\" (RGB 95,255,135).\n        /// </summary>\n        public static Color SeaGreen1 { get; } = new Color(84, 95, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"SeaGreen1_1\" (RGB 95,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color SeaGreen1_1 { get; } = new Color(85, 95, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"Aquamarine1\" (RGB 95,255,215).\n        /// </summary>\n        public static Color Aquamarine1 { get; } = new Color(86, 95, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"DarkSlateGray2\" (RGB 95,255,255).\n        /// </summary>\n        public static Color DarkSlateGray2 { get; } = new Color(87, 95, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkRed_1\" (RGB 135,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkRed_1 { get; } = new Color(88, 135, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepPink4_1\" (RGB 135,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_1 { get; } = new Color(89, 135, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkMagenta\" (RGB 135,0,135).\n        /// </summary>\n        public static Color DarkMagenta { get; } = new Color(90, 135, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"DarkMagenta_1\" (RGB 135,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkMagenta_1 { get; } = new Color(91, 135, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"DarkViolet\" (RGB 135,0,215).\n        /// </summary>\n        public static Color DarkViolet { get; } = new Color(92, 135, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"Purple_1\" (RGB 135,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_1 { get; } = new Color(93, 135, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"Orange4_1\" (RGB 135,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Orange4_1 { get; } = new Color(94, 135, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"LightPink4\" (RGB 135,95,95).\n        /// </summary>\n        public static Color LightPink4 { get; } = new Color(95, 135, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"Plum4\" (RGB 135,95,135).\n        /// </summary>\n        public static Color Plum4 { get; } = new Color(96, 135, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple3\" (RGB 135,95,175).\n        /// </summary>\n        public static Color MediumPurple3 { get; } = new Color(97, 135, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple3_1\" (RGB 135,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple3_1 { get; } = new Color(98, 135, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"SlateBlue1\" (RGB 135,95,255).\n        /// </summary>\n        public static Color SlateBlue1 { get; } = new Color(99, 135, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow4\" (RGB 135,135,0).\n        /// </summary>\n        public static Color Yellow4 { get; } = new Color(100, 135, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"Wheat4\" (RGB 135,135,95).\n        /// </summary>\n        public static Color Wheat4 { get; } = new Color(101, 135, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"Grey53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Grey53 { get; } = new Color(102, 135, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"Gray53\" (RGB 135,135,135).\n        /// </summary>\n        public static Color Gray53 { get; } = new Color(102, 135, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"LightSlateGrey\" (RGB 135,135,175).\n        /// </summary>\n        public static Color LightSlateGrey { get; } = new Color(103, 135, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple\" (RGB 135,135,215).\n        /// </summary>\n        public static Color MediumPurple { get; } = new Color(104, 135, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"LightSlateBlue\" (RGB 135,135,255).\n        /// </summary>\n        public static Color LightSlateBlue { get; } = new Color(105, 135, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow4_1\" (RGB 135,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow4_1 { get; } = new Color(106, 135, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3\" (RGB 135,175,95).\n        /// </summary>\n        public static Color DarkOliveGreen3 { get; } = new Color(107, 135, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen\" (RGB 135,175,135).\n        /// </summary>\n        public static Color DarkSeaGreen { get; } = new Color(108, 135, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"LightSkyBlue3\" (RGB 135,175,175).\n        /// </summary>\n        public static Color LightSkyBlue3 { get; } = new Color(109, 135, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"LightSkyBlue3_1\" (RGB 135,175,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSkyBlue3_1 { get; } = new Color(110, 135, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"SkyBlue2\" (RGB 135,175,255).\n        /// </summary>\n        public static Color SkyBlue2 { get; } = new Color(111, 135, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse2_1\" (RGB 135,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Chartreuse2_1 { get; } = new Color(112, 135, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_1\" (RGB 135,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_1 { get; } = new Color(113, 135, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"PaleGreen3_1\" (RGB 135,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen3_1 { get; } = new Color(114, 135, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3\" (RGB 135,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen3 { get; } = new Color(115, 135, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"DarkSlateGray3\" (RGB 135,215,215).\n        /// </summary>\n        public static Color DarkSlateGray3 { get; } = new Color(116, 135, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"SkyBlue1\" (RGB 135,215,255).\n        /// </summary>\n        public static Color SkyBlue1 { get; } = new Color(117, 135, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"Chartreuse1\" (RGB 135,255,0).\n        /// </summary>\n        public static Color Chartreuse1 { get; } = new Color(118, 135, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"LightGreen\" (RGB 135,255,95).\n        /// </summary>\n        public static Color LightGreen { get; } = new Color(119, 135, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"LightGreen_1\" (RGB 135,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGreen_1 { get; } = new Color(120, 135, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"PaleGreen1\" (RGB 135,255,175).\n        /// </summary>\n        public static Color PaleGreen1 { get; } = new Color(121, 135, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"Aquamarine1_1\" (RGB 135,255,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Aquamarine1_1 { get; } = new Color(122, 135, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"DarkSlateGray1\" (RGB 135,255,255).\n        /// </summary>\n        public static Color DarkSlateGray1 { get; } = new Color(123, 135, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Red3\" (RGB 175,0,0).\n        /// </summary>\n        public static Color Red3 { get; } = new Color(124, 175, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepPink4_2\" (RGB 175,0,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink4_2 { get; } = new Color(125, 175, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"MediumVioletRed\" (RGB 175,0,135).\n        /// </summary>\n        public static Color MediumVioletRed { get; } = new Color(126, 175, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"Magenta3\" (RGB 175,0,175).\n        /// </summary>\n        public static Color Magenta3 { get; } = new Color(127, 175, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"DarkViolet_1\" (RGB 175,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkViolet_1 { get; } = new Color(128, 175, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"Purple_2\" (RGB 175,0,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Purple_2 { get; } = new Color(129, 175, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkOrange3\" (RGB 175,95,0).\n        /// </summary>\n        public static Color DarkOrange3 { get; } = new Color(130, 175, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"IndianRed\" (RGB 175,95,95).\n        /// </summary>\n        public static Color IndianRed { get; } = new Color(131, 175, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"HotPink3\" (RGB 175,95,135).\n        /// </summary>\n        public static Color HotPink3 { get; } = new Color(132, 175, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"MediumOrchid3\" (RGB 175,95,175).\n        /// </summary>\n        public static Color MediumOrchid3 { get; } = new Color(133, 175, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"MediumOrchid\" (RGB 175,95,215).\n        /// </summary>\n        public static Color MediumOrchid { get; } = new Color(134, 175, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple2\" (RGB 175,95,255).\n        /// </summary>\n        public static Color MediumPurple2 { get; } = new Color(135, 175, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkGoldenrod\" (RGB 175,135,0).\n        /// </summary>\n        public static Color DarkGoldenrod { get; } = new Color(136, 175, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"LightSalmon3\" (RGB 175,135,95).\n        /// </summary>\n        public static Color LightSalmon3 { get; } = new Color(137, 175, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"RosyBrown\" (RGB 175,135,135).\n        /// </summary>\n        public static Color RosyBrown { get; } = new Color(138, 175, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"Grey63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Grey63 { get; } = new Color(139, 175, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"Gray63\" (RGB 175,135,175).\n        /// </summary>\n        public static Color Gray63 { get; } = new Color(139, 175, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple2_1\" (RGB 175,135,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumPurple2_1 { get; } = new Color(140, 175, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"MediumPurple1\" (RGB 175,135,255).\n        /// </summary>\n        public static Color MediumPurple1 { get; } = new Color(141, 175, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Gold3\" (RGB 175,175,0).\n        /// </summary>\n        public static Color Gold3 { get; } = new Color(142, 175, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkKhaki\" (RGB 175,175,95).\n        /// </summary>\n        public static Color DarkKhaki { get; } = new Color(143, 175, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"NavajoWhite3\" (RGB 175,175,135).\n        /// </summary>\n        public static Color NavajoWhite3 { get; } = new Color(144, 175, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"Grey69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Grey69 { get; } = new Color(145, 175, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"Gray69\" (RGB 175,175,175).\n        /// </summary>\n        public static Color Gray69 { get; } = new Color(145, 175, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"LightSteelBlue3\" (RGB 175,175,215).\n        /// </summary>\n        public static Color LightSteelBlue3 { get; } = new Color(146, 175, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"LightSteelBlue\" (RGB 175,175,255).\n        /// </summary>\n        public static Color LightSteelBlue { get; } = new Color(147, 175, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow3\" (RGB 175,215,0).\n        /// </summary>\n        public static Color Yellow3 { get; } = new Color(148, 175, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen3_2\" (RGB 175,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen3_2 { get; } = new Color(149, 175, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen3_1\" (RGB 175,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen3_1 { get; } = new Color(150, 175, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2\" (RGB 175,215,175).\n        /// </summary>\n        public static Color DarkSeaGreen2 { get; } = new Color(151, 175, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"LightCyan3\" (RGB 175,215,215).\n        /// </summary>\n        public static Color LightCyan3 { get; } = new Color(152, 175, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"LightSkyBlue1\" (RGB 175,215,255).\n        /// </summary>\n        public static Color LightSkyBlue1 { get; } = new Color(153, 175, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"GreenYellow\" (RGB 175,255,0).\n        /// </summary>\n        public static Color GreenYellow { get; } = new Color(154, 175, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen2\" (RGB 175,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen2 { get; } = new Color(155, 175, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"PaleGreen1_1\" (RGB 175,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color PaleGreen1_1 { get; } = new Color(156, 175, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen2_1\" (RGB 175,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen2_1 { get; } = new Color(157, 175, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1\" (RGB 175,255,215).\n        /// </summary>\n        public static Color DarkSeaGreen1 { get; } = new Color(158, 175, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"PaleTurquoise1\" (RGB 175,255,255).\n        /// </summary>\n        public static Color PaleTurquoise1 { get; } = new Color(159, 175, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Red3_1\" (RGB 215,0,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Red3_1 { get; } = new Color(160, 215, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepPink3\" (RGB 215,0,95).\n        /// </summary>\n        public static Color DeepPink3 { get; } = new Color(161, 215, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"DeepPink3_1\" (RGB 215,0,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink3_1 { get; } = new Color(162, 215, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"Magenta3_1\" (RGB 215,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_1 { get; } = new Color(163, 215, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"Magenta3_2\" (RGB 215,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta3_2 { get; } = new Color(164, 215, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"Magenta2\" (RGB 215,0,255).\n        /// </summary>\n        public static Color Magenta2 { get; } = new Color(165, 215, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkOrange3_1\" (RGB 215,95,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOrange3_1 { get; } = new Color(166, 215, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"IndianRed_1\" (RGB 215,95,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed_1 { get; } = new Color(167, 215, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"HotPink3_1\" (RGB 215,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink3_1 { get; } = new Color(168, 215, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"HotPink2\" (RGB 215,95,175).\n        /// </summary>\n        public static Color HotPink2 { get; } = new Color(169, 215, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"Orchid\" (RGB 215,95,215).\n        /// </summary>\n        public static Color Orchid { get; } = new Color(170, 215, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"MediumOrchid1\" (RGB 215,95,255).\n        /// </summary>\n        public static Color MediumOrchid1 { get; } = new Color(171, 215, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"Orange3\" (RGB 215,135,0).\n        /// </summary>\n        public static Color Orange3 { get; } = new Color(172, 215, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"LightSalmon3_1\" (RGB 215,135,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightSalmon3_1 { get; } = new Color(173, 215, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"LightPink3\" (RGB 215,135,135).\n        /// </summary>\n        public static Color LightPink3 { get; } = new Color(174, 215, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"Pink3\" (RGB 215,135,175).\n        /// </summary>\n        public static Color Pink3 { get; } = new Color(175, 215, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"Plum3\" (RGB 215,135,215).\n        /// </summary>\n        public static Color Plum3 { get; } = new Color(176, 215, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"Violet\" (RGB 215,135,255).\n        /// </summary>\n        public static Color Violet { get; } = new Color(177, 215, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Gold3_1\" (RGB 215,175,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Gold3_1 { get; } = new Color(178, 215, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"LightGoldenrod3\" (RGB 215,175,95).\n        /// </summary>\n        public static Color LightGoldenrod3 { get; } = new Color(179, 215, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"Tan\" (RGB 215,175,135).\n        /// </summary>\n        public static Color Tan { get; } = new Color(180, 215, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"MistyRose3\" (RGB 215,175,175).\n        /// </summary>\n        public static Color MistyRose3 { get; } = new Color(181, 215, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"Thistle3\" (RGB 215,175,215).\n        /// </summary>\n        public static Color Thistle3 { get; } = new Color(182, 215, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"Plum2\" (RGB 215,175,255).\n        /// </summary>\n        public static Color Plum2 { get; } = new Color(183, 215, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow3_1\" (RGB 215,215,0).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Yellow3_1 { get; } = new Color(184, 215, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"Khaki3\" (RGB 215,215,95).\n        /// </summary>\n        public static Color Khaki3 { get; } = new Color(185, 215, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"LightGoldenrod2\" (RGB 215,215,135).\n        /// </summary>\n        public static Color LightGoldenrod2 { get; } = new Color(186, 215, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"LightYellow3\" (RGB 215,215,175).\n        /// </summary>\n        public static Color LightYellow3 { get; } = new Color(187, 215, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"Grey84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Grey84 { get; } = new Color(188, 215, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"Gray84\" (RGB 215,215,215).\n        /// </summary>\n        public static Color Gray84 { get; } = new Color(188, 215, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"LightSteelBlue1\" (RGB 215,215,255).\n        /// </summary>\n        public static Color LightSteelBlue1 { get; } = new Color(189, 215, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow2\" (RGB 215,255,0).\n        /// </summary>\n        public static Color Yellow2 { get; } = new Color(190, 215, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1\" (RGB 215,255,95).\n        /// </summary>\n        public static Color DarkOliveGreen1 { get; } = new Color(191, 215, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"DarkOliveGreen1_1\" (RGB 215,255,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkOliveGreen1_1 { get; } = new Color(192, 215, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"DarkSeaGreen1_1\" (RGB 215,255,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DarkSeaGreen1_1 { get; } = new Color(193, 215, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"Honeydew2\" (RGB 215,255,215).\n        /// </summary>\n        public static Color Honeydew2 { get; } = new Color(194, 215, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"LightCyan1\" (RGB 215,255,255).\n        /// </summary>\n        public static Color LightCyan1 { get; } = new Color(195, 215, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Red1\" (RGB 255,0,0).\n        /// </summary>\n        public static Color Red1 { get; } = new Color(196, 255, 0, 0);\n\n        /// <summary>\n        /// Gets the color \"DeepPink2\" (RGB 255,0,95).\n        /// </summary>\n        public static Color DeepPink2 { get; } = new Color(197, 255, 0, 95);\n\n        /// <summary>\n        /// Gets the color \"DeepPink1\" (RGB 255,0,135).\n        /// </summary>\n        public static Color DeepPink1 { get; } = new Color(198, 255, 0, 135);\n\n        /// <summary>\n        /// Gets the color \"DeepPink1_1\" (RGB 255,0,175).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color DeepPink1_1 { get; } = new Color(199, 255, 0, 175);\n\n        /// <summary>\n        /// Gets the color \"Magenta2_1\" (RGB 255,0,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color Magenta2_1 { get; } = new Color(200, 255, 0, 215);\n\n        /// <summary>\n        /// Gets the color \"Magenta1\" (RGB 255,0,255).\n        /// </summary>\n        public static Color Magenta1 { get; } = new Color(201, 255, 0, 255);\n\n        /// <summary>\n        /// Gets the color \"OrangeRed1\" (RGB 255,95,0).\n        /// </summary>\n        public static Color OrangeRed1 { get; } = new Color(202, 255, 95, 0);\n\n        /// <summary>\n        /// Gets the color \"IndianRed1\" (RGB 255,95,95).\n        /// </summary>\n        public static Color IndianRed1 { get; } = new Color(203, 255, 95, 95);\n\n        /// <summary>\n        /// Gets the color \"IndianRed1_1\" (RGB 255,95,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color IndianRed1_1 { get; } = new Color(204, 255, 95, 135);\n\n        /// <summary>\n        /// Gets the color \"HotPink\" (RGB 255,95,175).\n        /// </summary>\n        public static Color HotPink { get; } = new Color(205, 255, 95, 175);\n\n        /// <summary>\n        /// Gets the color \"HotPink_1\" (RGB 255,95,215).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color HotPink_1 { get; } = new Color(206, 255, 95, 215);\n\n        /// <summary>\n        /// Gets the color \"MediumOrchid1_1\" (RGB 255,95,255).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color MediumOrchid1_1 { get; } = new Color(207, 255, 95, 255);\n\n        /// <summary>\n        /// Gets the color \"DarkOrange\" (RGB 255,135,0).\n        /// </summary>\n        public static Color DarkOrange { get; } = new Color(208, 255, 135, 0);\n\n        /// <summary>\n        /// Gets the color \"Salmon1\" (RGB 255,135,95).\n        /// </summary>\n        public static Color Salmon1 { get; } = new Color(209, 255, 135, 95);\n\n        /// <summary>\n        /// Gets the color \"LightCoral\" (RGB 255,135,135).\n        /// </summary>\n        public static Color LightCoral { get; } = new Color(210, 255, 135, 135);\n\n        /// <summary>\n        /// Gets the color \"PaleVioletRed1\" (RGB 255,135,175).\n        /// </summary>\n        public static Color PaleVioletRed1 { get; } = new Color(211, 255, 135, 175);\n\n        /// <summary>\n        /// Gets the color \"Orchid2\" (RGB 255,135,215).\n        /// </summary>\n        public static Color Orchid2 { get; } = new Color(212, 255, 135, 215);\n\n        /// <summary>\n        /// Gets the color \"Orchid1\" (RGB 255,135,255).\n        /// </summary>\n        public static Color Orchid1 { get; } = new Color(213, 255, 135, 255);\n\n        /// <summary>\n        /// Gets the color \"Orange1\" (RGB 255,175,0).\n        /// </summary>\n        public static Color Orange1 { get; } = new Color(214, 255, 175, 0);\n\n        /// <summary>\n        /// Gets the color \"SandyBrown\" (RGB 255,175,95).\n        /// </summary>\n        public static Color SandyBrown { get; } = new Color(215, 255, 175, 95);\n\n        /// <summary>\n        /// Gets the color \"LightSalmon1\" (RGB 255,175,135).\n        /// </summary>\n        public static Color LightSalmon1 { get; } = new Color(216, 255, 175, 135);\n\n        /// <summary>\n        /// Gets the color \"LightPink1\" (RGB 255,175,175).\n        /// </summary>\n        public static Color LightPink1 { get; } = new Color(217, 255, 175, 175);\n\n        /// <summary>\n        /// Gets the color \"Pink1\" (RGB 255,175,215).\n        /// </summary>\n        public static Color Pink1 { get; } = new Color(218, 255, 175, 215);\n\n        /// <summary>\n        /// Gets the color \"Plum1\" (RGB 255,175,255).\n        /// </summary>\n        public static Color Plum1 { get; } = new Color(219, 255, 175, 255);\n\n        /// <summary>\n        /// Gets the color \"Gold1\" (RGB 255,215,0).\n        /// </summary>\n        public static Color Gold1 { get; } = new Color(220, 255, 215, 0);\n\n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_1\" (RGB 255,215,95).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_1 { get; } = new Color(221, 255, 215, 95);\n\n        /// <summary>\n        /// Gets the color \"LightGoldenrod2_2\" (RGB 255,215,135).\n        /// </summary>\n        [SuppressMessage(\"Naming\", \"CA1707:Identifiers should not contain underscores\")]\n        public static Color LightGoldenrod2_2 { get; } = new Color(222, 255, 215, 135);\n\n        /// <summary>\n        /// Gets the color \"NavajoWhite1\" (RGB 255,215,175).\n        /// </summary>\n        public static Color NavajoWhite1 { get; } = new Color(223, 255, 215, 175);\n\n        /// <summary>\n        /// Gets the color \"MistyRose1\" (RGB 255,215,215).\n        /// </summary>\n        public static Color MistyRose1 { get; } = new Color(224, 255, 215, 215);\n\n        /// <summary>\n        /// Gets the color \"Thistle1\" (RGB 255,215,255).\n        /// </summary>\n        public static Color Thistle1 { get; } = new Color(225, 255, 215, 255);\n\n        /// <summary>\n        /// Gets the color \"Yellow1\" (RGB 255,255,0).\n        /// </summary>\n        public static Color Yellow1 { get; } = new Color(226, 255, 255, 0);\n\n        /// <summary>\n        /// Gets the color \"LightGoldenrod1\" (RGB 255,255,95).\n        /// </summary>\n        public static Color LightGoldenrod1 { get; } = new Color(227, 255, 255, 95);\n\n        /// <summary>\n        /// Gets the color \"Khaki1\" (RGB 255,255,135).\n        /// </summary>\n        public static Color Khaki1 { get; } = new Color(228, 255, 255, 135);\n\n        /// <summary>\n        /// Gets the color \"Wheat1\" (RGB 255,255,175).\n        /// </summary>\n        public static Color Wheat1 { get; } = new Color(229, 255, 255, 175);\n\n        /// <summary>\n        /// Gets the color \"Cornsilk1\" (RGB 255,255,215).\n        /// </summary>\n        public static Color Cornsilk1 { get; } = new Color(230, 255, 255, 215);\n\n        /// <summary>\n        /// Gets the color \"Grey100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Grey100 { get; } = new Color(231, 255, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Gray100\" (RGB 255,255,255).\n        /// </summary>\n        public static Color Gray100 { get; } = new Color(231, 255, 255, 255);\n\n        /// <summary>\n        /// Gets the color \"Grey3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Grey3 { get; } = new Color(232, 8, 8, 8);\n\n        /// <summary>\n        /// Gets the color \"Gray3\" (RGB 8,8,8).\n        /// </summary>\n        public static Color Gray3 { get; } = new Color(232, 8, 8, 8);\n\n        /// <summary>\n        /// Gets the color \"Grey7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Grey7 { get; } = new Color(233, 18, 18, 18);\n\n        /// <summary>\n        /// Gets the color \"Gray7\" (RGB 18,18,18).\n        /// </summary>\n        public static Color Gray7 { get; } = new Color(233, 18, 18, 18);\n\n        /// <summary>\n        /// Gets the color \"Grey11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Grey11 { get; } = new Color(234, 28, 28, 28);\n\n        /// <summary>\n        /// Gets the color \"Gray11\" (RGB 28,28,28).\n        /// </summary>\n        public static Color Gray11 { get; } = new Color(234, 28, 28, 28);\n\n        /// <summary>\n        /// Gets the color \"Grey15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Grey15 { get; } = new Color(235, 38, 38, 38);\n\n        /// <summary>\n        /// Gets the color \"Gray15\" (RGB 38,38,38).\n        /// </summary>\n        public static Color Gray15 { get; } = new Color(235, 38, 38, 38);\n\n        /// <summary>\n        /// Gets the color \"Grey19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Grey19 { get; } = new Color(236, 48, 48, 48);\n\n        /// <summary>\n        /// Gets the color \"Gray19\" (RGB 48,48,48).\n        /// </summary>\n        public static Color Gray19 { get; } = new Color(236, 48, 48, 48);\n\n        /// <summary>\n        /// Gets the color \"Grey23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Grey23 { get; } = new Color(237, 58, 58, 58);\n\n        /// <summary>\n        /// Gets the color \"Gray23\" (RGB 58,58,58).\n        /// </summary>\n        public static Color Gray23 { get; } = new Color(237, 58, 58, 58);\n\n        /// <summary>\n        /// Gets the color \"Grey27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Grey27 { get; } = new Color(238, 68, 68, 68);\n\n        /// <summary>\n        /// Gets the color \"Gray27\" (RGB 68,68,68).\n        /// </summary>\n        public static Color Gray27 { get; } = new Color(238, 68, 68, 68);\n\n        /// <summary>\n        /// Gets the color \"Grey30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Grey30 { get; } = new Color(239, 78, 78, 78);\n\n        /// <summary>\n        /// Gets the color \"Gray30\" (RGB 78,78,78).\n        /// </summary>\n        public static Color Gray30 { get; } = new Color(239, 78, 78, 78);\n\n        /// <summary>\n        /// Gets the color \"Grey35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Grey35 { get; } = new Color(240, 88, 88, 88);\n\n        /// <summary>\n        /// Gets the color \"Gray35\" (RGB 88,88,88).\n        /// </summary>\n        public static Color Gray35 { get; } = new Color(240, 88, 88, 88);\n\n        /// <summary>\n        /// Gets the color \"Grey39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Grey39 { get; } = new Color(241, 98, 98, 98);\n\n        /// <summary>\n        /// Gets the color \"Gray39\" (RGB 98,98,98).\n        /// </summary>\n        public static Color Gray39 { get; } = new Color(241, 98, 98, 98);\n\n        /// <summary>\n        /// Gets the color \"Grey42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Grey42 { get; } = new Color(242, 108, 108, 108);\n\n        /// <summary>\n        /// Gets the color \"Gray42\" (RGB 108,108,108).\n        /// </summary>\n        public static Color Gray42 { get; } = new Color(242, 108, 108, 108);\n\n        /// <summary>\n        /// Gets the color \"Grey46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Grey46 { get; } = new Color(243, 118, 118, 118);\n\n        /// <summary>\n        /// Gets the color \"Gray46\" (RGB 118,118,118).\n        /// </summary>\n        public static Color Gray46 { get; } = new Color(243, 118, 118, 118);\n\n        /// <summary>\n        /// Gets the color \"Grey50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Grey50 { get; } = new Color(244, 128, 128, 128);\n\n        /// <summary>\n        /// Gets the color \"Gray50\" (RGB 128,128,128).\n        /// </summary>\n        public static Color Gray50 { get; } = new Color(244, 128, 128, 128);\n\n        /// <summary>\n        /// Gets the color \"Grey54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Grey54 { get; } = new Color(245, 138, 138, 138);\n\n        /// <summary>\n        /// Gets the color \"Gray54\" (RGB 138,138,138).\n        /// </summary>\n        public static Color Gray54 { get; } = new Color(245, 138, 138, 138);\n\n        /// <summary>\n        /// Gets the color \"Grey58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Grey58 { get; } = new Color(246, 148, 148, 148);\n\n        /// <summary>\n        /// Gets the color \"Gray58\" (RGB 148,148,148).\n        /// </summary>\n        public static Color Gray58 { get; } = new Color(246, 148, 148, 148);\n\n        /// <summary>\n        /// Gets the color \"Grey62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Grey62 { get; } = new Color(247, 158, 158, 158);\n\n        /// <summary>\n        /// Gets the color \"Gray62\" (RGB 158,158,158).\n        /// </summary>\n        public static Color Gray62 { get; } = new Color(247, 158, 158, 158);\n\n        /// <summary>\n        /// Gets the color \"Grey66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Grey66 { get; } = new Color(248, 168, 168, 168);\n\n        /// <summary>\n        /// Gets the color \"Gray66\" (RGB 168,168,168).\n        /// </summary>\n        public static Color Gray66 { get; } = new Color(248, 168, 168, 168);\n\n        /// <summary>\n        /// Gets the color \"Grey70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Grey70 { get; } = new Color(249, 178, 178, 178);\n\n        /// <summary>\n        /// Gets the color \"Gray70\" (RGB 178,178,178).\n        /// </summary>\n        public static Color Gray70 { get; } = new Color(249, 178, 178, 178);\n\n        /// <summary>\n        /// Gets the color \"Grey74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Grey74 { get; } = new Color(250, 188, 188, 188);\n\n        /// <summary>\n        /// Gets the color \"Gray74\" (RGB 188,188,188).\n        /// </summary>\n        public static Color Gray74 { get; } = new Color(250, 188, 188, 188);\n\n        /// <summary>\n        /// Gets the color \"Grey78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Grey78 { get; } = new Color(251, 198, 198, 198);\n\n        /// <summary>\n        /// Gets the color \"Gray78\" (RGB 198,198,198).\n        /// </summary>\n        public static Color Gray78 { get; } = new Color(251, 198, 198, 198);\n\n        /// <summary>\n        /// Gets the color \"Grey82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Grey82 { get; } = new Color(252, 208, 208, 208);\n\n        /// <summary>\n        /// Gets the color \"Gray82\" (RGB 208,208,208).\n        /// </summary>\n        public static Color Gray82 { get; } = new Color(252, 208, 208, 208);\n\n        /// <summary>\n        /// Gets the color \"Grey85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Grey85 { get; } = new Color(253, 218, 218, 218);\n\n        /// <summary>\n        /// Gets the color \"Gray85\" (RGB 218,218,218).\n        /// </summary>\n        public static Color Gray85 { get; } = new Color(253, 218, 218, 218);\n\n        /// <summary>\n        /// Gets the color \"Grey89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Grey89 { get; } = new Color(254, 228, 228, 228);\n\n        /// <summary>\n        /// Gets the color \"Gray89\" (RGB 228,228,228).\n        /// </summary>\n        public static Color Gray89 { get; } = new Color(254, 228, 228, 228);\n\n        /// <summary>\n        /// Gets the color \"Grey93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Grey93 { get; } = new Color(255, 238, 238, 238);\n\n        /// <summary>\n        /// Gets the color \"Gray93\" (RGB 238,238,238).\n        /// </summary>\n        public static Color Gray93 { get; } = new Color(255, 238, 238, 238);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Legacy/Emoji.Generated.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console.Tests.Legacy\n{\n    /// <summary>\n    /// Utility for working with emojis.\n    /// </summary>\n    public static partial class Emoji\n    {\n        private static readonly Dictionary<string, string> _emojis\n            = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)\n        {\n            { \"abacus\", Emoji.Known.Abacus },\n            { \"ab_button_blood_type\", Emoji.Known.AbButtonBloodType },\n            { \"a_button_blood_type\", Emoji.Known.AButtonBloodType },\n            { \"accordion\", Emoji.Known.Accordion },\n            { \"adhesive_bandage\", Emoji.Known.AdhesiveBandage },\n            { \"admission_tickets\", Emoji.Known.AdmissionTickets },\n            { \"aerial_tramway\", Emoji.Known.AerialTramway },\n            { \"airplane\", Emoji.Known.Airplane },\n            { \"airplane_arrival\", Emoji.Known.AirplaneArrival },\n            { \"airplane_departure\", Emoji.Known.AirplaneDeparture },\n            { \"alarm_clock\", Emoji.Known.AlarmClock },\n            { \"alembic\", Emoji.Known.Alembic },\n            { \"alien\", Emoji.Known.Alien },\n            { \"alien_monster\", Emoji.Known.AlienMonster },\n            { \"ambulance\", Emoji.Known.Ambulance },\n            { \"american_football\", Emoji.Known.AmericanFootball },\n            { \"amphora\", Emoji.Known.Amphora },\n            { \"anatomical_heart\", Emoji.Known.AnatomicalHeart },\n            { \"anchor\", Emoji.Known.Anchor },\n            { \"anger_symbol\", Emoji.Known.AngerSymbol },\n            { \"angry_face\", Emoji.Known.AngryFace },\n            { \"angry_face_with_horns\", Emoji.Known.AngryFaceWithHorns },\n            { \"anguished_face\", Emoji.Known.AnguishedFace },\n            { \"ant\", Emoji.Known.Ant },\n            { \"antenna_bars\", Emoji.Known.AntennaBars },\n            { \"anxious_face_with_sweat\", Emoji.Known.AnxiousFaceWithSweat },\n            { \"aquarius\", Emoji.Known.Aquarius },\n            { \"aries\", Emoji.Known.Aries },\n            { \"articulated_lorry\", Emoji.Known.ArticulatedLorry },\n            { \"artist_palette\", Emoji.Known.ArtistPalette },\n            { \"astonished_face\", Emoji.Known.AstonishedFace },\n            { \"atm_sign\", Emoji.Known.AtmSign },\n            { \"atom_symbol\", Emoji.Known.AtomSymbol },\n            { \"automobile\", Emoji.Known.Automobile },\n            { \"auto_rickshaw\", Emoji.Known.AutoRickshaw },\n            { \"avocado\", Emoji.Known.Avocado },\n            { \"axe\", Emoji.Known.Axe },\n            { \"baby\", Emoji.Known.Baby },\n            { \"baby_angel\", Emoji.Known.BabyAngel },\n            { \"baby_bottle\", Emoji.Known.BabyBottle },\n            { \"baby_chick\", Emoji.Known.BabyChick },\n            { \"baby_symbol\", Emoji.Known.BabySymbol },\n            { \"back_arrow\", Emoji.Known.BackArrow },\n            { \"backhand_index_pointing_down\", Emoji.Known.BackhandIndexPointingDown },\n            { \"backhand_index_pointing_left\", Emoji.Known.BackhandIndexPointingLeft },\n            { \"backhand_index_pointing_right\", Emoji.Known.BackhandIndexPointingRight },\n            { \"backhand_index_pointing_up\", Emoji.Known.BackhandIndexPointingUp },\n            { \"backpack\", Emoji.Known.Backpack },\n            { \"bacon\", Emoji.Known.Bacon },\n            { \"badger\", Emoji.Known.Badger },\n            { \"badminton\", Emoji.Known.Badminton },\n            { \"bagel\", Emoji.Known.Bagel },\n            { \"baggage_claim\", Emoji.Known.BaggageClaim },\n            { \"baguette_bread\", Emoji.Known.BaguetteBread },\n            { \"balance_scale\", Emoji.Known.BalanceScale },\n            { \"bald\", Emoji.Known.Bald },\n            { \"ballet_shoes\", Emoji.Known.BalletShoes },\n            { \"balloon\", Emoji.Known.Balloon },\n            { \"ballot_box_with_ballot\", Emoji.Known.BallotBoxWithBallot },\n            { \"banana\", Emoji.Known.Banana },\n            { \"banjo\", Emoji.Known.Banjo },\n            { \"bank\", Emoji.Known.Bank },\n            { \"barber_pole\", Emoji.Known.BarberPole },\n            { \"bar_chart\", Emoji.Known.BarChart },\n            { \"baseball\", Emoji.Known.Baseball },\n            { \"basket\", Emoji.Known.Basket },\n            { \"basketball\", Emoji.Known.Basketball },\n            { \"bat\", Emoji.Known.Bat },\n            { \"bathtub\", Emoji.Known.Bathtub },\n            { \"battery\", Emoji.Known.Battery },\n            { \"b_button_blood_type\", Emoji.Known.BButtonBloodType },\n            { \"beach_with_umbrella\", Emoji.Known.BeachWithUmbrella },\n            { \"beaming_face_with_smiling_eyes\", Emoji.Known.BeamingFaceWithSmilingEyes },\n            { \"bear\", Emoji.Known.Bear },\n            { \"beating_heart\", Emoji.Known.BeatingHeart },\n            { \"beaver\", Emoji.Known.Beaver },\n            { \"bed\", Emoji.Known.Bed },\n            { \"beer_mug\", Emoji.Known.BeerMug },\n            { \"beetle\", Emoji.Known.Beetle },\n            { \"bell\", Emoji.Known.Bell },\n            { \"bellhop_bell\", Emoji.Known.BellhopBell },\n            { \"bell_pepper\", Emoji.Known.BellPepper },\n            { \"bell_with_slash\", Emoji.Known.BellWithSlash },\n            { \"bento_box\", Emoji.Known.BentoBox },\n            { \"beverage_box\", Emoji.Known.BeverageBox },\n            { \"bicycle\", Emoji.Known.Bicycle },\n            { \"bikini\", Emoji.Known.Bikini },\n            { \"billed_cap\", Emoji.Known.BilledCap },\n            { \"biohazard\", Emoji.Known.Biohazard },\n            { \"bird\", Emoji.Known.Bird },\n            { \"birthday_cake\", Emoji.Known.BirthdayCake },\n            { \"bison\", Emoji.Known.Bison },\n            { \"black_circle\", Emoji.Known.BlackCircle },\n            { \"black_flag\", Emoji.Known.BlackFlag },\n            { \"black_heart\", Emoji.Known.BlackHeart },\n            { \"black_large_square\", Emoji.Known.BlackLargeSquare },\n            { \"black_medium_small_square\", Emoji.Known.BlackMediumSmallSquare },\n            { \"black_medium_square\", Emoji.Known.BlackMediumSquare },\n            { \"black_nib\", Emoji.Known.BlackNib },\n            { \"black_small_square\", Emoji.Known.BlackSmallSquare },\n            { \"black_square_button\", Emoji.Known.BlackSquareButton },\n            { \"blossom\", Emoji.Known.Blossom },\n            { \"blowfish\", Emoji.Known.Blowfish },\n            { \"blueberries\", Emoji.Known.Blueberries },\n            { \"blue_book\", Emoji.Known.BlueBook },\n            { \"blue_circle\", Emoji.Known.BlueCircle },\n            { \"blue_heart\", Emoji.Known.BlueHeart },\n            { \"blue_square\", Emoji.Known.BlueSquare },\n            { \"boar\", Emoji.Known.Boar },\n            { \"bomb\", Emoji.Known.Bomb },\n            { \"bone\", Emoji.Known.Bone },\n            { \"bookmark\", Emoji.Known.Bookmark },\n            { \"bookmark_tabs\", Emoji.Known.BookmarkTabs },\n            { \"books\", Emoji.Known.Books },\n            { \"boomerang\", Emoji.Known.Boomerang },\n            { \"bottle_with_popping_cork\", Emoji.Known.BottleWithPoppingCork },\n            { \"bouquet\", Emoji.Known.Bouquet },\n            { \"bow_and_arrow\", Emoji.Known.BowAndArrow },\n            { \"bowling\", Emoji.Known.Bowling },\n            { \"bowl_with_spoon\", Emoji.Known.BowlWithSpoon },\n            { \"boxing_glove\", Emoji.Known.BoxingGlove },\n            { \"boy\", Emoji.Known.Boy },\n            { \"brain\", Emoji.Known.Brain },\n            { \"bread\", Emoji.Known.Bread },\n            { \"breast_feeding\", Emoji.Known.BreastFeeding },\n            { \"brick\", Emoji.Known.Brick },\n            { \"bridge_at_night\", Emoji.Known.BridgeAtNight },\n            { \"briefcase\", Emoji.Known.Briefcase },\n            { \"briefs\", Emoji.Known.Briefs },\n            { \"bright_button\", Emoji.Known.BrightButton },\n            { \"broccoli\", Emoji.Known.Broccoli },\n            { \"broken_heart\", Emoji.Known.BrokenHeart },\n            { \"broom\", Emoji.Known.Broom },\n            { \"brown_circle\", Emoji.Known.BrownCircle },\n            { \"brown_heart\", Emoji.Known.BrownHeart },\n            { \"brown_square\", Emoji.Known.BrownSquare },\n            { \"bubble_tea\", Emoji.Known.BubbleTea },\n            { \"bucket\", Emoji.Known.Bucket },\n            { \"bug\", Emoji.Known.Bug },\n            { \"building_construction\", Emoji.Known.BuildingConstruction },\n            { \"bullet_train\", Emoji.Known.BulletTrain },\n            { \"bullseye\", Emoji.Known.Bullseye },\n            { \"burrito\", Emoji.Known.Burrito },\n            { \"bus\", Emoji.Known.Bus },\n            { \"bus_stop\", Emoji.Known.BusStop },\n            { \"bust_in_silhouette\", Emoji.Known.BustInSilhouette },\n            { \"busts_in_silhouette\", Emoji.Known.BustsInSilhouette },\n            { \"butter\", Emoji.Known.Butter },\n            { \"butterfly\", Emoji.Known.Butterfly },\n            { \"cactus\", Emoji.Known.Cactus },\n            { \"calendar\", Emoji.Known.Calendar },\n            { \"call_me_hand\", Emoji.Known.CallMeHand },\n            { \"camel\", Emoji.Known.Camel },\n            { \"camera\", Emoji.Known.Camera },\n            { \"camera_with_flash\", Emoji.Known.CameraWithFlash },\n            { \"camping\", Emoji.Known.Camping },\n            { \"cancer\", Emoji.Known.Cancer },\n            { \"candle\", Emoji.Known.Candle },\n            { \"candy\", Emoji.Known.Candy },\n            { \"canned_food\", Emoji.Known.CannedFood },\n            { \"canoe\", Emoji.Known.Canoe },\n            { \"capricorn\", Emoji.Known.Capricorn },\n            { \"card_file_box\", Emoji.Known.CardFileBox },\n            { \"card_index\", Emoji.Known.CardIndex },\n            { \"card_index_dividers\", Emoji.Known.CardIndexDividers },\n            { \"carousel_horse\", Emoji.Known.CarouselHorse },\n            { \"carpentry_saw\", Emoji.Known.CarpentrySaw },\n            { \"carp_streamer\", Emoji.Known.CarpStreamer },\n            { \"carrot\", Emoji.Known.Carrot },\n            { \"castle\", Emoji.Known.Castle },\n            { \"cat\", Emoji.Known.Cat },\n            { \"cat_face\", Emoji.Known.CatFace },\n            { \"cat_with_tears_of_joy\", Emoji.Known.CatWithTearsOfJoy },\n            { \"cat_with_wry_smile\", Emoji.Known.CatWithWrySmile },\n            { \"chains\", Emoji.Known.Chains },\n            { \"chair\", Emoji.Known.Chair },\n            { \"chart_decreasing\", Emoji.Known.ChartDecreasing },\n            { \"chart_increasing\", Emoji.Known.ChartIncreasing },\n            { \"chart_increasing_with_yen\", Emoji.Known.ChartIncreasingWithYen },\n            { \"check_box_with_check\", Emoji.Known.CheckBoxWithCheck },\n            { \"check_mark\", Emoji.Known.CheckMark },\n            { \"check_mark_button\", Emoji.Known.CheckMarkButton },\n            { \"cheese_wedge\", Emoji.Known.CheeseWedge },\n            { \"chequered_flag\", Emoji.Known.ChequeredFlag },\n            { \"cherries\", Emoji.Known.Cherries },\n            { \"cherry_blossom\", Emoji.Known.CherryBlossom },\n            { \"chess_pawn\", Emoji.Known.ChessPawn },\n            { \"chestnut\", Emoji.Known.Chestnut },\n            { \"chicken\", Emoji.Known.Chicken },\n            { \"child\", Emoji.Known.Child },\n            { \"children_crossing\", Emoji.Known.ChildrenCrossing },\n            { \"chipmunk\", Emoji.Known.Chipmunk },\n            { \"chocolate_bar\", Emoji.Known.ChocolateBar },\n            { \"chopsticks\", Emoji.Known.Chopsticks },\n            { \"christmas_tree\", Emoji.Known.ChristmasTree },\n            { \"church\", Emoji.Known.Church },\n            { \"cigarette\", Emoji.Known.Cigarette },\n            { \"cinema\", Emoji.Known.Cinema },\n            { \"circled_m\", Emoji.Known.CircledM },\n            { \"circus_tent\", Emoji.Known.CircusTent },\n            { \"cityscape\", Emoji.Known.Cityscape },\n            { \"cityscape_at_dusk\", Emoji.Known.CityscapeAtDusk },\n            { \"clamp\", Emoji.Known.Clamp },\n            { \"clapper_board\", Emoji.Known.ClapperBoard },\n            { \"clapping_hands\", Emoji.Known.ClappingHands },\n            { \"classical_building\", Emoji.Known.ClassicalBuilding },\n            { \"cl_button\", Emoji.Known.ClButton },\n            { \"clinking_beer_mugs\", Emoji.Known.ClinkingBeerMugs },\n            { \"clinking_glasses\", Emoji.Known.ClinkingGlasses },\n            { \"clipboard\", Emoji.Known.Clipboard },\n            { \"clockwise_vertical_arrows\", Emoji.Known.ClockwiseVerticalArrows },\n            { \"closed_book\", Emoji.Known.ClosedBook },\n            { \"closed_mailbox_with_lowered_flag\", Emoji.Known.ClosedMailboxWithLoweredFlag },\n            { \"closed_mailbox_with_raised_flag\", Emoji.Known.ClosedMailboxWithRaisedFlag },\n            { \"closed_umbrella\", Emoji.Known.ClosedUmbrella },\n            { \"cloud\", Emoji.Known.Cloud },\n            { \"cloud_with_lightning\", Emoji.Known.CloudWithLightning },\n            { \"cloud_with_lightning_and_rain\", Emoji.Known.CloudWithLightningAndRain },\n            { \"cloud_with_rain\", Emoji.Known.CloudWithRain },\n            { \"cloud_with_snow\", Emoji.Known.CloudWithSnow },\n            { \"clown_face\", Emoji.Known.ClownFace },\n            { \"club_suit\", Emoji.Known.ClubSuit },\n            { \"clutch_bag\", Emoji.Known.ClutchBag },\n            { \"coat\", Emoji.Known.Coat },\n            { \"cockroach\", Emoji.Known.Cockroach },\n            { \"cocktail_glass\", Emoji.Known.CocktailGlass },\n            { \"coconut\", Emoji.Known.Coconut },\n            { \"coffin\", Emoji.Known.Coffin },\n            { \"coin\", Emoji.Known.Coin },\n            { \"cold_face\", Emoji.Known.ColdFace },\n            { \"collision\", Emoji.Known.Collision },\n            { \"comet\", Emoji.Known.Comet },\n            { \"compass\", Emoji.Known.Compass },\n            { \"computer_disk\", Emoji.Known.ComputerDisk },\n            { \"computer_mouse\", Emoji.Known.ComputerMouse },\n            { \"confetti_ball\", Emoji.Known.ConfettiBall },\n            { \"confounded_face\", Emoji.Known.ConfoundedFace },\n            { \"confused_face\", Emoji.Known.ConfusedFace },\n            { \"construction\", Emoji.Known.Construction },\n            { \"construction_worker\", Emoji.Known.ConstructionWorker },\n            { \"control_knobs\", Emoji.Known.ControlKnobs },\n            { \"convenience_store\", Emoji.Known.ConvenienceStore },\n            { \"cooked_rice\", Emoji.Known.CookedRice },\n            { \"cookie\", Emoji.Known.Cookie },\n            { \"cooking\", Emoji.Known.Cooking },\n            { \"cool_button\", Emoji.Known.CoolButton },\n            { \"copyright\", Emoji.Known.Copyright },\n            { \"couch_and_lamp\", Emoji.Known.CouchAndLamp },\n            { \"counterclockwise_arrows_button\", Emoji.Known.CounterclockwiseArrowsButton },\n            { \"couple_with_heart\", Emoji.Known.CoupleWithHeart },\n            { \"cow\", Emoji.Known.Cow },\n            { \"cowboy_hat_face\", Emoji.Known.CowboyHatFace },\n            { \"cow_face\", Emoji.Known.CowFace },\n            { \"crab\", Emoji.Known.Crab },\n            { \"crayon\", Emoji.Known.Crayon },\n            { \"credit_card\", Emoji.Known.CreditCard },\n            { \"crescent_moon\", Emoji.Known.CrescentMoon },\n            { \"cricket\", Emoji.Known.Cricket },\n            { \"cricket_game\", Emoji.Known.CricketGame },\n            { \"crocodile\", Emoji.Known.Crocodile },\n            { \"croissant\", Emoji.Known.Croissant },\n            { \"crossed_fingers\", Emoji.Known.CrossedFingers },\n            { \"crossed_flags\", Emoji.Known.CrossedFlags },\n            { \"crossed_swords\", Emoji.Known.CrossedSwords },\n            { \"cross_mark\", Emoji.Known.CrossMark },\n            { \"cross_mark_button\", Emoji.Known.CrossMarkButton },\n            { \"crown\", Emoji.Known.Crown },\n            { \"crying_cat\", Emoji.Known.CryingCat },\n            { \"crying_face\", Emoji.Known.CryingFace },\n            { \"crystal_ball\", Emoji.Known.CrystalBall },\n            { \"cucumber\", Emoji.Known.Cucumber },\n            { \"cupcake\", Emoji.Known.Cupcake },\n            { \"cup_with_straw\", Emoji.Known.CupWithStraw },\n            { \"curling_stone\", Emoji.Known.CurlingStone },\n            { \"curly_hair\", Emoji.Known.CurlyHair },\n            { \"curly_loop\", Emoji.Known.CurlyLoop },\n            { \"currency_exchange\", Emoji.Known.CurrencyExchange },\n            { \"curry_rice\", Emoji.Known.CurryRice },\n            { \"custard\", Emoji.Known.Custard },\n            { \"customs\", Emoji.Known.Customs },\n            { \"cut_of_meat\", Emoji.Known.CutOfMeat },\n            { \"cyclone\", Emoji.Known.Cyclone },\n            { \"dagger\", Emoji.Known.Dagger },\n            { \"dango\", Emoji.Known.Dango },\n            { \"dashing_away\", Emoji.Known.DashingAway },\n            { \"deaf_person\", Emoji.Known.DeafPerson },\n            { \"deciduous_tree\", Emoji.Known.DeciduousTree },\n            { \"deer\", Emoji.Known.Deer },\n            { \"delivery_truck\", Emoji.Known.DeliveryTruck },\n            { \"department_store\", Emoji.Known.DepartmentStore },\n            { \"derelict_house\", Emoji.Known.DerelictHouse },\n            { \"desert\", Emoji.Known.Desert },\n            { \"desert_island\", Emoji.Known.DesertIsland },\n            { \"desktop_computer\", Emoji.Known.DesktopComputer },\n            { \"detective\", Emoji.Known.Detective },\n            { \"diamond_suit\", Emoji.Known.DiamondSuit },\n            { \"diamond_with_a_dot\", Emoji.Known.DiamondWithADot },\n            { \"dim_button\", Emoji.Known.DimButton },\n            { \"disappointed_face\", Emoji.Known.DisappointedFace },\n            { \"disguised_face\", Emoji.Known.DisguisedFace },\n            { \"divide\", Emoji.Known.Divide },\n            { \"diving_mask\", Emoji.Known.DivingMask },\n            { \"diya_lamp\", Emoji.Known.DiyaLamp },\n            { \"dizzy\", Emoji.Known.Dizzy },\n            { \"dna\", Emoji.Known.Dna },\n            { \"dodo\", Emoji.Known.Dodo },\n            { \"dog\", Emoji.Known.Dog },\n            { \"dog_face\", Emoji.Known.DogFace },\n            { \"dollar_banknote\", Emoji.Known.DollarBanknote },\n            { \"dolphin\", Emoji.Known.Dolphin },\n            { \"door\", Emoji.Known.Door },\n            { \"dotted_six_pointed_star\", Emoji.Known.DottedSixPointedStar },\n            { \"double_curly_loop\", Emoji.Known.DoubleCurlyLoop },\n            { \"double_exclamation_mark\", Emoji.Known.DoubleExclamationMark },\n            { \"doughnut\", Emoji.Known.Doughnut },\n            { \"dove\", Emoji.Known.Dove },\n            { \"down_arrow\", Emoji.Known.DownArrow },\n            { \"downcast_face_with_sweat\", Emoji.Known.DowncastFaceWithSweat },\n            { \"down_left_arrow\", Emoji.Known.DownLeftArrow },\n            { \"down_right_arrow\", Emoji.Known.DownRightArrow },\n            { \"downwards_button\", Emoji.Known.DownwardsButton },\n            { \"dragon\", Emoji.Known.Dragon },\n            { \"dragon_face\", Emoji.Known.DragonFace },\n            { \"dress\", Emoji.Known.Dress },\n            { \"drooling_face\", Emoji.Known.DroolingFace },\n            { \"droplet\", Emoji.Known.Droplet },\n            { \"drop_of_blood\", Emoji.Known.DropOfBlood },\n            { \"drum\", Emoji.Known.Drum },\n            { \"duck\", Emoji.Known.Duck },\n            { \"dumpling\", Emoji.Known.Dumpling },\n            { \"dvd\", Emoji.Known.Dvd },\n            { \"eagle\", Emoji.Known.Eagle },\n            { \"ear\", Emoji.Known.Ear },\n            { \"ear_of_corn\", Emoji.Known.EarOfCorn },\n            { \"ear_with_hearing_aid\", Emoji.Known.EarWithHearingAid },\n            { \"egg\", Emoji.Known.Egg },\n            { \"eggplant\", Emoji.Known.Eggplant },\n            { \"eight_o_clock\", Emoji.Known.EightOClock },\n            { \"eight_pointed_star\", Emoji.Known.EightPointedStar },\n            { \"eight_spoked_asterisk\", Emoji.Known.EightSpokedAsterisk },\n            { \"eight_thirty\", Emoji.Known.EightThirty },\n            { \"eject_button\", Emoji.Known.EjectButton },\n            { \"electric_plug\", Emoji.Known.ElectricPlug },\n            { \"elephant\", Emoji.Known.Elephant },\n            { \"elevator\", Emoji.Known.Elevator },\n            { \"eleven_o_clock\", Emoji.Known.ElevenOClock },\n            { \"eleven_thirty\", Emoji.Known.ElevenThirty },\n            { \"elf\", Emoji.Known.Elf },\n            { \"e_mail\", Emoji.Known.EMail },\n            { \"end_arrow\", Emoji.Known.EndArrow },\n            { \"envelope\", Emoji.Known.Envelope },\n            { \"envelope_with_arrow\", Emoji.Known.EnvelopeWithArrow },\n            { \"euro_banknote\", Emoji.Known.EuroBanknote },\n            { \"evergreen_tree\", Emoji.Known.EvergreenTree },\n            { \"ewe\", Emoji.Known.Ewe },\n            { \"exclamation_question_mark\", Emoji.Known.ExclamationQuestionMark },\n            { \"exploding_head\", Emoji.Known.ExplodingHead },\n            { \"expressionless_face\", Emoji.Known.ExpressionlessFace },\n            { \"eye\", Emoji.Known.Eye },\n            { \"eyes\", Emoji.Known.Eyes },\n            { \"face_blowing_a_kiss\", Emoji.Known.FaceBlowingAKiss },\n            { \"face_savoring_food\", Emoji.Known.FaceSavoringFood },\n            { \"face_screaming_in_fear\", Emoji.Known.FaceScreamingInFear },\n            { \"face_vomiting\", Emoji.Known.FaceVomiting },\n            { \"face_with_hand_over_mouth\", Emoji.Known.FaceWithHandOverMouth },\n            { \"face_with_head_bandage\", Emoji.Known.FaceWithHeadBandage },\n            { \"face_with_medical_mask\", Emoji.Known.FaceWithMedicalMask },\n            { \"face_with_monocle\", Emoji.Known.FaceWithMonocle },\n            { \"face_with_open_mouth\", Emoji.Known.FaceWithOpenMouth },\n            { \"face_without_mouth\", Emoji.Known.FaceWithoutMouth },\n            { \"face_with_raised_eyebrow\", Emoji.Known.FaceWithRaisedEyebrow },\n            { \"face_with_rolling_eyes\", Emoji.Known.FaceWithRollingEyes },\n            { \"face_with_steam_from_nose\", Emoji.Known.FaceWithSteamFromNose },\n            { \"face_with_symbols_on_mouth\", Emoji.Known.FaceWithSymbolsOnMouth },\n            { \"face_with_tears_of_joy\", Emoji.Known.FaceWithTearsOfJoy },\n            { \"face_with_thermometer\", Emoji.Known.FaceWithThermometer },\n            { \"face_with_tongue\", Emoji.Known.FaceWithTongue },\n            { \"factory\", Emoji.Known.Factory },\n            { \"fairy\", Emoji.Known.Fairy },\n            { \"falafel\", Emoji.Known.Falafel },\n            { \"fallen_leaf\", Emoji.Known.FallenLeaf },\n            { \"family\", Emoji.Known.Family },\n            { \"fast_down_button\", Emoji.Known.FastDownButton },\n            { \"fast_forward_button\", Emoji.Known.FastForwardButton },\n            { \"fast_reverse_button\", Emoji.Known.FastReverseButton },\n            { \"fast_up_button\", Emoji.Known.FastUpButton },\n            { \"fax_machine\", Emoji.Known.FaxMachine },\n            { \"fearful_face\", Emoji.Known.FearfulFace },\n            { \"feather\", Emoji.Known.Feather },\n            { \"female_sign\", Emoji.Known.FemaleSign },\n            { \"ferris_wheel\", Emoji.Known.FerrisWheel },\n            { \"ferry\", Emoji.Known.Ferry },\n            { \"field_hockey\", Emoji.Known.FieldHockey },\n            { \"file_cabinet\", Emoji.Known.FileCabinet },\n            { \"file_folder\", Emoji.Known.FileFolder },\n            { \"film_frames\", Emoji.Known.FilmFrames },\n            { \"film_projector\", Emoji.Known.FilmProjector },\n            { \"fire\", Emoji.Known.Fire },\n            { \"firecracker\", Emoji.Known.Firecracker },\n            { \"fire_engine\", Emoji.Known.FireEngine },\n            { \"fire_extinguisher\", Emoji.Known.FireExtinguisher },\n            { \"fireworks\", Emoji.Known.Fireworks },\n            { \"1st_place_medal\", Emoji.Known.FirstPlaceMedal },\n            { \"first_quarter_moon\", Emoji.Known.FirstQuarterMoon },\n            { \"first_quarter_moon_face\", Emoji.Known.FirstQuarterMoonFace },\n            { \"fish\", Emoji.Known.Fish },\n            { \"fish_cake_with_swirl\", Emoji.Known.FishCakeWithSwirl },\n            { \"fishing_pole\", Emoji.Known.FishingPole },\n            { \"five_o_clock\", Emoji.Known.FiveOClock },\n            { \"five_thirty\", Emoji.Known.FiveThirty },\n            { \"flag_in_hole\", Emoji.Known.FlagInHole },\n            { \"flamingo\", Emoji.Known.Flamingo },\n            { \"flashlight\", Emoji.Known.Flashlight },\n            { \"flatbread\", Emoji.Known.Flatbread },\n            { \"flat_shoe\", Emoji.Known.FlatShoe },\n            { \"fleur_de_lis\", Emoji.Known.FleurDeLis },\n            { \"flexed_biceps\", Emoji.Known.FlexedBiceps },\n            { \"floppy_disk\", Emoji.Known.FloppyDisk },\n            { \"flower_playing_cards\", Emoji.Known.FlowerPlayingCards },\n            { \"flushed_face\", Emoji.Known.FlushedFace },\n            { \"fly\", Emoji.Known.Fly },\n            { \"flying_disc\", Emoji.Known.FlyingDisc },\n            { \"flying_saucer\", Emoji.Known.FlyingSaucer },\n            { \"fog\", Emoji.Known.Fog },\n            { \"foggy\", Emoji.Known.Foggy },\n            { \"folded_hands\", Emoji.Known.FoldedHands },\n            { \"fondue\", Emoji.Known.Fondue },\n            { \"foot\", Emoji.Known.Foot },\n            { \"footprints\", Emoji.Known.Footprints },\n            { \"fork_and_knife\", Emoji.Known.ForkAndKnife },\n            { \"fork_and_knife_with_plate\", Emoji.Known.ForkAndKnifeWithPlate },\n            { \"fortune_cookie\", Emoji.Known.FortuneCookie },\n            { \"fountain\", Emoji.Known.Fountain },\n            { \"fountain_pen\", Emoji.Known.FountainPen },\n            { \"four_leaf_clover\", Emoji.Known.FourLeafClover },\n            { \"four_o_clock\", Emoji.Known.FourOClock },\n            { \"four_thirty\", Emoji.Known.FourThirty },\n            { \"fox\", Emoji.Known.Fox },\n            { \"framed_picture\", Emoji.Known.FramedPicture },\n            { \"free_button\", Emoji.Known.FreeButton },\n            { \"french_fries\", Emoji.Known.FrenchFries },\n            { \"fried_shrimp\", Emoji.Known.FriedShrimp },\n            { \"frog\", Emoji.Known.Frog },\n            { \"front_facing_baby_chick\", Emoji.Known.FrontFacingBabyChick },\n            { \"frowning_face\", Emoji.Known.FrowningFace },\n            { \"frowning_face_with_open_mouth\", Emoji.Known.FrowningFaceWithOpenMouth },\n            { \"fuel_pump\", Emoji.Known.FuelPump },\n            { \"full_moon\", Emoji.Known.FullMoon },\n            { \"full_moon_face\", Emoji.Known.FullMoonFace },\n            { \"funeral_urn\", Emoji.Known.FuneralUrn },\n            { \"game_die\", Emoji.Known.GameDie },\n            { \"garlic\", Emoji.Known.Garlic },\n            { \"gear\", Emoji.Known.Gear },\n            { \"gemini\", Emoji.Known.Gemini },\n            { \"gem_stone\", Emoji.Known.GemStone },\n            { \"genie\", Emoji.Known.Genie },\n            { \"ghost\", Emoji.Known.Ghost },\n            { \"giraffe\", Emoji.Known.Giraffe },\n            { \"girl\", Emoji.Known.Girl },\n            { \"glasses\", Emoji.Known.Glasses },\n            { \"glass_of_milk\", Emoji.Known.GlassOfMilk },\n            { \"globe_showing_americas\", Emoji.Known.GlobeShowingAmericas },\n            { \"globe_showing_asia_australia\", Emoji.Known.GlobeShowingAsiaAustralia },\n            { \"globe_showing_europe_africa\", Emoji.Known.GlobeShowingEuropeAfrica },\n            { \"globe_with_meridians\", Emoji.Known.GlobeWithMeridians },\n            { \"gloves\", Emoji.Known.Gloves },\n            { \"glowing_star\", Emoji.Known.GlowingStar },\n            { \"goal_net\", Emoji.Known.GoalNet },\n            { \"goat\", Emoji.Known.Goat },\n            { \"goblin\", Emoji.Known.Goblin },\n            { \"goggles\", Emoji.Known.Goggles },\n            { \"gorilla\", Emoji.Known.Gorilla },\n            { \"graduation_cap\", Emoji.Known.GraduationCap },\n            { \"grapes\", Emoji.Known.Grapes },\n            { \"green_apple\", Emoji.Known.GreenApple },\n            { \"green_book\", Emoji.Known.GreenBook },\n            { \"green_circle\", Emoji.Known.GreenCircle },\n            { \"green_heart\", Emoji.Known.GreenHeart },\n            { \"green_salad\", Emoji.Known.GreenSalad },\n            { \"green_square\", Emoji.Known.GreenSquare },\n            { \"grimacing_face\", Emoji.Known.GrimacingFace },\n            { \"grinning_cat\", Emoji.Known.GrinningCat },\n            { \"grinning_cat_with_smiling_eyes\", Emoji.Known.GrinningCatWithSmilingEyes },\n            { \"grinning_face\", Emoji.Known.GrinningFace },\n            { \"grinning_face_with_big_eyes\", Emoji.Known.GrinningFaceWithBigEyes },\n            { \"grinning_face_with_smiling_eyes\", Emoji.Known.GrinningFaceWithSmilingEyes },\n            { \"grinning_face_with_sweat\", Emoji.Known.GrinningFaceWithSweat },\n            { \"grinning_squinting_face\", Emoji.Known.GrinningSquintingFace },\n            { \"growing_heart\", Emoji.Known.GrowingHeart },\n            { \"guard\", Emoji.Known.Guard },\n            { \"guide_dog\", Emoji.Known.GuideDog },\n            { \"guitar\", Emoji.Known.Guitar },\n            { \"hamburger\", Emoji.Known.Hamburger },\n            { \"hammer\", Emoji.Known.Hammer },\n            { \"hammer_and_pick\", Emoji.Known.HammerAndPick },\n            { \"hammer_and_wrench\", Emoji.Known.HammerAndWrench },\n            { \"hamster\", Emoji.Known.Hamster },\n            { \"handbag\", Emoji.Known.Handbag },\n            { \"handshake\", Emoji.Known.Handshake },\n            { \"hand_with_fingers_splayed\", Emoji.Known.HandWithFingersSplayed },\n            { \"hatching_chick\", Emoji.Known.HatchingChick },\n            { \"headphone\", Emoji.Known.Headphone },\n            { \"headstone\", Emoji.Known.Headstone },\n            { \"hear_no_evil_monkey\", Emoji.Known.HearNoEvilMonkey },\n            { \"heart_decoration\", Emoji.Known.HeartDecoration },\n            { \"heart_exclamation\", Emoji.Known.HeartExclamation },\n            { \"heart_suit\", Emoji.Known.HeartSuit },\n            { \"heart_with_arrow\", Emoji.Known.HeartWithArrow },\n            { \"heart_with_ribbon\", Emoji.Known.HeartWithRibbon },\n            { \"heavy_dollar_sign\", Emoji.Known.HeavyDollarSign },\n            { \"hedgehog\", Emoji.Known.Hedgehog },\n            { \"helicopter\", Emoji.Known.Helicopter },\n            { \"herb\", Emoji.Known.Herb },\n            { \"hibiscus\", Emoji.Known.Hibiscus },\n            { \"high_heeled_shoe\", Emoji.Known.HighHeeledShoe },\n            { \"high_speed_train\", Emoji.Known.HighSpeedTrain },\n            { \"high_voltage\", Emoji.Known.HighVoltage },\n            { \"hiking_boot\", Emoji.Known.HikingBoot },\n            { \"hindu_temple\", Emoji.Known.HinduTemple },\n            { \"hippopotamus\", Emoji.Known.Hippopotamus },\n            { \"hole\", Emoji.Known.Hole },\n            { \"hollow_red_circle\", Emoji.Known.HollowRedCircle },\n            { \"honeybee\", Emoji.Known.Honeybee },\n            { \"honey_pot\", Emoji.Known.HoneyPot },\n            { \"hook\", Emoji.Known.Hook },\n            { \"horizontal_traffic_light\", Emoji.Known.HorizontalTrafficLight },\n            { \"horse\", Emoji.Known.Horse },\n            { \"horse_face\", Emoji.Known.HorseFace },\n            { \"horse_racing\", Emoji.Known.HorseRacing },\n            { \"hospital\", Emoji.Known.Hospital },\n            { \"hot_beverage\", Emoji.Known.HotBeverage },\n            { \"hot_dog\", Emoji.Known.HotDog },\n            { \"hotel\", Emoji.Known.Hotel },\n            { \"hot_face\", Emoji.Known.HotFace },\n            { \"hot_pepper\", Emoji.Known.HotPepper },\n            { \"hot_springs\", Emoji.Known.HotSprings },\n            { \"hourglass_done\", Emoji.Known.HourglassDone },\n            { \"hourglass_not_done\", Emoji.Known.HourglassNotDone },\n            { \"house\", Emoji.Known.House },\n            { \"houses\", Emoji.Known.Houses },\n            { \"house_with_garden\", Emoji.Known.HouseWithGarden },\n            { \"hugging_face\", Emoji.Known.HuggingFace },\n            { \"hundred_points\", Emoji.Known.HundredPoints },\n            { \"hushed_face\", Emoji.Known.HushedFace },\n            { \"hut\", Emoji.Known.Hut },\n            { \"ice\", Emoji.Known.Ice },\n            { \"ice_cream\", Emoji.Known.IceCream },\n            { \"ice_hockey\", Emoji.Known.IceHockey },\n            { \"ice_skate\", Emoji.Known.IceSkate },\n            { \"id_button\", Emoji.Known.IdButton },\n            { \"inbox_tray\", Emoji.Known.InboxTray },\n            { \"incoming_envelope\", Emoji.Known.IncomingEnvelope },\n            { \"index_pointing_up\", Emoji.Known.IndexPointingUp },\n            { \"infinity\", Emoji.Known.Infinity },\n            { \"information\", Emoji.Known.Information },\n            { \"input_latin_letters\", Emoji.Known.InputLatinLetters },\n            { \"input_latin_lowercase\", Emoji.Known.InputLatinLowercase },\n            { \"input_latin_uppercase\", Emoji.Known.InputLatinUppercase },\n            { \"input_numbers\", Emoji.Known.InputNumbers },\n            { \"input_symbols\", Emoji.Known.InputSymbols },\n            { \"jack_o_lantern\", Emoji.Known.JackOLantern },\n            { \"japanese_acceptable_button\", Emoji.Known.JapaneseAcceptableButton },\n            { \"japanese_application_button\", Emoji.Known.JapaneseApplicationButton },\n            { \"japanese_bargain_button\", Emoji.Known.JapaneseBargainButton },\n            { \"japanese_castle\", Emoji.Known.JapaneseCastle },\n            { \"japanese_congratulations_button\", Emoji.Known.JapaneseCongratulationsButton },\n            { \"japanese_discount_button\", Emoji.Known.JapaneseDiscountButton },\n            { \"japanese_dolls\", Emoji.Known.JapaneseDolls },\n            { \"japanese_free_of_charge_button\", Emoji.Known.JapaneseFreeOfChargeButton },\n            { \"japanese_here_button\", Emoji.Known.JapaneseHereButton },\n            { \"japanese_monthly_amount_button\", Emoji.Known.JapaneseMonthlyAmountButton },\n            { \"japanese_not_free_of_charge_button\", Emoji.Known.JapaneseNotFreeOfChargeButton },\n            { \"japanese_no_vacancy_button\", Emoji.Known.JapaneseNoVacancyButton },\n            { \"japanese_open_for_business_button\", Emoji.Known.JapaneseOpenForBusinessButton },\n            { \"japanese_passing_grade_button\", Emoji.Known.JapanesePassingGradeButton },\n            { \"japanese_post_office\", Emoji.Known.JapanesePostOffice },\n            { \"japanese_prohibited_button\", Emoji.Known.JapaneseProhibitedButton },\n            { \"japanese_reserved_button\", Emoji.Known.JapaneseReservedButton },\n            { \"japanese_secret_button\", Emoji.Known.JapaneseSecretButton },\n            { \"japanese_service_charge_button\", Emoji.Known.JapaneseServiceChargeButton },\n            { \"japanese_symbol_for_beginner\", Emoji.Known.JapaneseSymbolForBeginner },\n            { \"japanese_vacancy_button\", Emoji.Known.JapaneseVacancyButton },\n            { \"jeans\", Emoji.Known.Jeans },\n            { \"joker\", Emoji.Known.Joker },\n            { \"joystick\", Emoji.Known.Joystick },\n            { \"kaaba\", Emoji.Known.Kaaba },\n            { \"kangaroo\", Emoji.Known.Kangaroo },\n            { \"key\", Emoji.Known.Key },\n            { \"keyboard\", Emoji.Known.Keyboard },\n            { \"keycap_10\", Emoji.Known.Keycap10 },\n            { \"kick_scooter\", Emoji.Known.KickScooter },\n            { \"kimono\", Emoji.Known.Kimono },\n            { \"kiss\", Emoji.Known.Kiss },\n            { \"kissing_cat\", Emoji.Known.KissingCat },\n            { \"kissing_face\", Emoji.Known.KissingFace },\n            { \"kissing_face_with_closed_eyes\", Emoji.Known.KissingFaceWithClosedEyes },\n            { \"kissing_face_with_smiling_eyes\", Emoji.Known.KissingFaceWithSmilingEyes },\n            { \"kiss_mark\", Emoji.Known.KissMark },\n            { \"kitchen_knife\", Emoji.Known.KitchenKnife },\n            { \"kite\", Emoji.Known.Kite },\n            { \"kiwi_fruit\", Emoji.Known.KiwiFruit },\n            { \"knocked_out_face\", Emoji.Known.KnockedOutFace },\n            { \"knot\", Emoji.Known.Knot },\n            { \"koala\", Emoji.Known.Koala },\n            { \"lab_coat\", Emoji.Known.LabCoat },\n            { \"label\", Emoji.Known.Label },\n            { \"lacrosse\", Emoji.Known.Lacrosse },\n            { \"ladder\", Emoji.Known.Ladder },\n            { \"lady_beetle\", Emoji.Known.LadyBeetle },\n            { \"laptop\", Emoji.Known.Laptop },\n            { \"large_blue_diamond\", Emoji.Known.LargeBlueDiamond },\n            { \"large_orange_diamond\", Emoji.Known.LargeOrangeDiamond },\n            { \"last_quarter_moon\", Emoji.Known.LastQuarterMoon },\n            { \"last_quarter_moon_face\", Emoji.Known.LastQuarterMoonFace },\n            { \"last_track_button\", Emoji.Known.LastTrackButton },\n            { \"latin_cross\", Emoji.Known.LatinCross },\n            { \"leaf_fluttering_in_wind\", Emoji.Known.LeafFlutteringInWind },\n            { \"leafy_green\", Emoji.Known.LeafyGreen },\n            { \"ledger\", Emoji.Known.Ledger },\n            { \"left_arrow\", Emoji.Known.LeftArrow },\n            { \"left_arrow_curving_right\", Emoji.Known.LeftArrowCurvingRight },\n            { \"left_facing_fist\", Emoji.Known.LeftFacingFist },\n            { \"left_luggage\", Emoji.Known.LeftLuggage },\n            { \"left_right_arrow\", Emoji.Known.LeftRightArrow },\n            { \"left_speech_bubble\", Emoji.Known.LeftSpeechBubble },\n            { \"leg\", Emoji.Known.Leg },\n            { \"lemon\", Emoji.Known.Lemon },\n            { \"leo\", Emoji.Known.Leo },\n            { \"leopard\", Emoji.Known.Leopard },\n            { \"level_slider\", Emoji.Known.LevelSlider },\n            { \"libra\", Emoji.Known.Libra },\n            { \"light_bulb\", Emoji.Known.LightBulb },\n            { \"light_rail\", Emoji.Known.LightRail },\n            { \"link\", Emoji.Known.Link },\n            { \"linked_paperclips\", Emoji.Known.LinkedPaperclips },\n            { \"lion\", Emoji.Known.Lion },\n            { \"lipstick\", Emoji.Known.Lipstick },\n            { \"litter_in_bin_sign\", Emoji.Known.LitterInBinSign },\n            { \"lizard\", Emoji.Known.Lizard },\n            { \"llama\", Emoji.Known.Llama },\n            { \"lobster\", Emoji.Known.Lobster },\n            { \"locked\", Emoji.Known.Locked },\n            { \"locked_with_key\", Emoji.Known.LockedWithKey },\n            { \"locked_with_pen\", Emoji.Known.LockedWithPen },\n            { \"locomotive\", Emoji.Known.Locomotive },\n            { \"lollipop\", Emoji.Known.Lollipop },\n            { \"long_drum\", Emoji.Known.LongDrum },\n            { \"lotion_bottle\", Emoji.Known.LotionBottle },\n            { \"loudly_crying_face\", Emoji.Known.LoudlyCryingFace },\n            { \"loudspeaker\", Emoji.Known.Loudspeaker },\n            { \"love_hotel\", Emoji.Known.LoveHotel },\n            { \"love_letter\", Emoji.Known.LoveLetter },\n            { \"love_you_gesture\", Emoji.Known.LoveYouGesture },\n            { \"luggage\", Emoji.Known.Luggage },\n            { \"lungs\", Emoji.Known.Lungs },\n            { \"lying_face\", Emoji.Known.LyingFace },\n            { \"mage\", Emoji.Known.Mage },\n            { \"magic_wand\", Emoji.Known.MagicWand },\n            { \"magnet\", Emoji.Known.Magnet },\n            { \"magnifying_glass_tilted_left\", Emoji.Known.MagnifyingGlassTiltedLeft },\n            { \"magnifying_glass_tilted_right\", Emoji.Known.MagnifyingGlassTiltedRight },\n            { \"mahjong_red_dragon\", Emoji.Known.MahjongRedDragon },\n            { \"male_sign\", Emoji.Known.MaleSign },\n            { \"mammoth\", Emoji.Known.Mammoth },\n            { \"man\", Emoji.Known.Man },\n            { \"man_dancing\", Emoji.Known.ManDancing },\n            { \"mango\", Emoji.Known.Mango },\n            { \"mans_shoe\", Emoji.Known.MansShoe },\n            { \"mantelpiece_clock\", Emoji.Known.MantelpieceClock },\n            { \"manual_wheelchair\", Emoji.Known.ManualWheelchair },\n            { \"maple_leaf\", Emoji.Known.MapleLeaf },\n            { \"map_of_japan\", Emoji.Known.MapOfJapan },\n            { \"martial_arts_uniform\", Emoji.Known.MartialArtsUniform },\n            { \"mate\", Emoji.Known.Mate },\n            { \"meat_on_bone\", Emoji.Known.MeatOnBone },\n            { \"mechanical_arm\", Emoji.Known.MechanicalArm },\n            { \"mechanical_leg\", Emoji.Known.MechanicalLeg },\n            { \"medical_symbol\", Emoji.Known.MedicalSymbol },\n            { \"megaphone\", Emoji.Known.Megaphone },\n            { \"melon\", Emoji.Known.Melon },\n            { \"memo\", Emoji.Known.Memo },\n            { \"men_holding_hands\", Emoji.Known.MenHoldingHands },\n            { \"menorah\", Emoji.Known.Menorah },\n            { \"mens_room\", Emoji.Known.MensRoom },\n            { \"merperson\", Emoji.Known.Merperson },\n            { \"metro\", Emoji.Known.Metro },\n            { \"microbe\", Emoji.Known.Microbe },\n            { \"microphone\", Emoji.Known.Microphone },\n            { \"microscope\", Emoji.Known.Microscope },\n            { \"middle_finger\", Emoji.Known.MiddleFinger },\n            { \"military_helmet\", Emoji.Known.MilitaryHelmet },\n            { \"military_medal\", Emoji.Known.MilitaryMedal },\n            { \"milky_way\", Emoji.Known.MilkyWay },\n            { \"minibus\", Emoji.Known.Minibus },\n            { \"minus\", Emoji.Known.Minus },\n            { \"mirror\", Emoji.Known.Mirror },\n            { \"moai\", Emoji.Known.Moai },\n            { \"mobile_phone\", Emoji.Known.MobilePhone },\n            { \"mobile_phone_off\", Emoji.Known.MobilePhoneOff },\n            { \"mobile_phone_with_arrow\", Emoji.Known.MobilePhoneWithArrow },\n            { \"money_bag\", Emoji.Known.MoneyBag },\n            { \"money_mouth_face\", Emoji.Known.MoneyMouthFace },\n            { \"money_with_wings\", Emoji.Known.MoneyWithWings },\n            { \"monkey\", Emoji.Known.Monkey },\n            { \"monkey_face\", Emoji.Known.MonkeyFace },\n            { \"monorail\", Emoji.Known.Monorail },\n            { \"moon_cake\", Emoji.Known.MoonCake },\n            { \"moon_viewing_ceremony\", Emoji.Known.MoonViewingCeremony },\n            { \"mosque\", Emoji.Known.Mosque },\n            { \"mosquito\", Emoji.Known.Mosquito },\n            { \"motor_boat\", Emoji.Known.MotorBoat },\n            { \"motorcycle\", Emoji.Known.Motorcycle },\n            { \"motorized_wheelchair\", Emoji.Known.MotorizedWheelchair },\n            { \"motor_scooter\", Emoji.Known.MotorScooter },\n            { \"motorway\", Emoji.Known.Motorway },\n            { \"mountain\", Emoji.Known.Mountain },\n            { \"mountain_cableway\", Emoji.Known.MountainCableway },\n            { \"mountain_railway\", Emoji.Known.MountainRailway },\n            { \"mount_fuji\", Emoji.Known.MountFuji },\n            { \"mouse\", Emoji.Known.Mouse },\n            { \"mouse_face\", Emoji.Known.MouseFace },\n            { \"mouse_trap\", Emoji.Known.MouseTrap },\n            { \"mouth\", Emoji.Known.Mouth },\n            { \"movie_camera\", Emoji.Known.MovieCamera },\n            { \"mrs_claus\", Emoji.Known.MrsClaus },\n            { \"multiply\", Emoji.Known.Multiply },\n            { \"mushroom\", Emoji.Known.Mushroom },\n            { \"musical_keyboard\", Emoji.Known.MusicalKeyboard },\n            { \"musical_note\", Emoji.Known.MusicalNote },\n            { \"musical_notes\", Emoji.Known.MusicalNotes },\n            { \"musical_score\", Emoji.Known.MusicalScore },\n            { \"muted_speaker\", Emoji.Known.MutedSpeaker },\n            { \"nail_polish\", Emoji.Known.NailPolish },\n            { \"name_badge\", Emoji.Known.NameBadge },\n            { \"national_park\", Emoji.Known.NationalPark },\n            { \"nauseated_face\", Emoji.Known.NauseatedFace },\n            { \"nazar_amulet\", Emoji.Known.NazarAmulet },\n            { \"necktie\", Emoji.Known.Necktie },\n            { \"nerd_face\", Emoji.Known.NerdFace },\n            { \"nesting_dolls\", Emoji.Known.NestingDolls },\n            { \"neutral_face\", Emoji.Known.NeutralFace },\n            { \"new_button\", Emoji.Known.NewButton },\n            { \"new_moon\", Emoji.Known.NewMoon },\n            { \"new_moon_face\", Emoji.Known.NewMoonFace },\n            { \"newspaper\", Emoji.Known.Newspaper },\n            { \"next_track_button\", Emoji.Known.NextTrackButton },\n            { \"ng_button\", Emoji.Known.NgButton },\n            { \"night_with_stars\", Emoji.Known.NightWithStars },\n            { \"nine_o_clock\", Emoji.Known.NineOClock },\n            { \"nine_thirty\", Emoji.Known.NineThirty },\n            { \"ninja\", Emoji.Known.Ninja },\n            { \"no_bicycles\", Emoji.Known.NoBicycles },\n            { \"no_entry\", Emoji.Known.NoEntry },\n            { \"no_littering\", Emoji.Known.NoLittering },\n            { \"no_mobile_phones\", Emoji.Known.NoMobilePhones },\n            { \"non_potable_water\", Emoji.Known.NonPotableWater },\n            { \"no_one_under_eighteen\", Emoji.Known.NoOneUnderEighteen },\n            { \"no_pedestrians\", Emoji.Known.NoPedestrians },\n            { \"nose\", Emoji.Known.Nose },\n            { \"no_smoking\", Emoji.Known.NoSmoking },\n            { \"notebook\", Emoji.Known.Notebook },\n            { \"notebook_with_decorative_cover\", Emoji.Known.NotebookWithDecorativeCover },\n            { \"nut_and_bolt\", Emoji.Known.NutAndBolt },\n            { \"o_button_blood_type\", Emoji.Known.OButtonBloodType },\n            { \"octopus\", Emoji.Known.Octopus },\n            { \"oden\", Emoji.Known.Oden },\n            { \"office_building\", Emoji.Known.OfficeBuilding },\n            { \"ogre\", Emoji.Known.Ogre },\n            { \"oil_drum\", Emoji.Known.OilDrum },\n            { \"ok_button\", Emoji.Known.OkButton },\n            { \"ok_hand\", Emoji.Known.OkHand },\n            { \"older_person\", Emoji.Known.OlderPerson },\n            { \"old_key\", Emoji.Known.OldKey },\n            { \"old_man\", Emoji.Known.OldMan },\n            { \"old_woman\", Emoji.Known.OldWoman },\n            { \"olive\", Emoji.Known.Olive },\n            { \"om\", Emoji.Known.Om },\n            { \"on_arrow\", Emoji.Known.OnArrow },\n            { \"oncoming_automobile\", Emoji.Known.OncomingAutomobile },\n            { \"oncoming_bus\", Emoji.Known.OncomingBus },\n            { \"oncoming_fist\", Emoji.Known.OncomingFist },\n            { \"oncoming_police_car\", Emoji.Known.OncomingPoliceCar },\n            { \"oncoming_taxi\", Emoji.Known.OncomingTaxi },\n            { \"one_o_clock\", Emoji.Known.OneOClock },\n            { \"one_piece_swimsuit\", Emoji.Known.OnePieceSwimsuit },\n            { \"one_thirty\", Emoji.Known.OneThirty },\n            { \"onion\", Emoji.Known.Onion },\n            { \"open_book\", Emoji.Known.OpenBook },\n            { \"open_file_folder\", Emoji.Known.OpenFileFolder },\n            { \"open_hands\", Emoji.Known.OpenHands },\n            { \"open_mailbox_with_lowered_flag\", Emoji.Known.OpenMailboxWithLoweredFlag },\n            { \"open_mailbox_with_raised_flag\", Emoji.Known.OpenMailboxWithRaisedFlag },\n            { \"ophiuchus\", Emoji.Known.Ophiuchus },\n            { \"optical_disk\", Emoji.Known.OpticalDisk },\n            { \"orange_book\", Emoji.Known.OrangeBook },\n            { \"orange_circle\", Emoji.Known.OrangeCircle },\n            { \"orange_heart\", Emoji.Known.OrangeHeart },\n            { \"orange_square\", Emoji.Known.OrangeSquare },\n            { \"orangutan\", Emoji.Known.Orangutan },\n            { \"orthodox_cross\", Emoji.Known.OrthodoxCross },\n            { \"otter\", Emoji.Known.Otter },\n            { \"outbox_tray\", Emoji.Known.OutboxTray },\n            { \"owl\", Emoji.Known.Owl },\n            { \"ox\", Emoji.Known.Ox },\n            { \"oyster\", Emoji.Known.Oyster },\n            { \"package\", Emoji.Known.Package },\n            { \"page_facing_up\", Emoji.Known.PageFacingUp },\n            { \"pager\", Emoji.Known.Pager },\n            { \"page_with_curl\", Emoji.Known.PageWithCurl },\n            { \"paintbrush\", Emoji.Known.Paintbrush },\n            { \"palms_up_together\", Emoji.Known.PalmsUpTogether },\n            { \"palm_tree\", Emoji.Known.PalmTree },\n            { \"pancakes\", Emoji.Known.Pancakes },\n            { \"panda\", Emoji.Known.Panda },\n            { \"paperclip\", Emoji.Known.Paperclip },\n            { \"parachute\", Emoji.Known.Parachute },\n            { \"parrot\", Emoji.Known.Parrot },\n            { \"part_alternation_mark\", Emoji.Known.PartAlternationMark },\n            { \"partying_face\", Emoji.Known.PartyingFace },\n            { \"party_popper\", Emoji.Known.PartyPopper },\n            { \"passenger_ship\", Emoji.Known.PassengerShip },\n            { \"passport_control\", Emoji.Known.PassportControl },\n            { \"pause_button\", Emoji.Known.PauseButton },\n            { \"paw_prints\", Emoji.Known.PawPrints },\n            { \"p_button\", Emoji.Known.PButton },\n            { \"peace_symbol\", Emoji.Known.PeaceSymbol },\n            { \"peach\", Emoji.Known.Peach },\n            { \"peacock\", Emoji.Known.Peacock },\n            { \"peanuts\", Emoji.Known.Peanuts },\n            { \"pear\", Emoji.Known.Pear },\n            { \"pen\", Emoji.Known.Pen },\n            { \"pencil\", Emoji.Known.Pencil },\n            { \"penguin\", Emoji.Known.Penguin },\n            { \"pensive_face\", Emoji.Known.PensiveFace },\n            { \"people_hugging\", Emoji.Known.PeopleHugging },\n            { \"people_with_bunny_ears\", Emoji.Known.PeopleWithBunnyEars },\n            { \"people_wrestling\", Emoji.Known.PeopleWrestling },\n            { \"performing_arts\", Emoji.Known.PerformingArts },\n            { \"persevering_face\", Emoji.Known.PerseveringFace },\n            { \"person\", Emoji.Known.Person },\n            { \"person_beard\", Emoji.Known.PersonBeard },\n            { \"person_biking\", Emoji.Known.PersonBiking },\n            { \"person_blond_hair\", Emoji.Known.PersonBlondHair },\n            { \"person_bouncing_ball\", Emoji.Known.PersonBouncingBall },\n            { \"person_bowing\", Emoji.Known.PersonBowing },\n            { \"person_cartwheeling\", Emoji.Known.PersonCartwheeling },\n            { \"person_climbing\", Emoji.Known.PersonClimbing },\n            { \"person_facepalming\", Emoji.Known.PersonFacepalming },\n            { \"person_fencing\", Emoji.Known.PersonFencing },\n            { \"person_frowning\", Emoji.Known.PersonFrowning },\n            { \"person_gesturing_no\", Emoji.Known.PersonGesturingNo },\n            { \"person_gesturing_ok\", Emoji.Known.PersonGesturingOk },\n            { \"person_getting_haircut\", Emoji.Known.PersonGettingHaircut },\n            { \"person_getting_massage\", Emoji.Known.PersonGettingMassage },\n            { \"person_golfing\", Emoji.Known.PersonGolfing },\n            { \"person_in_bed\", Emoji.Known.PersonInBed },\n            { \"person_in_lotus_position\", Emoji.Known.PersonInLotusPosition },\n            { \"person_in_steamy_room\", Emoji.Known.PersonInSteamyRoom },\n            { \"person_in_suit_levitating\", Emoji.Known.PersonInSuitLevitating },\n            { \"person_in_tuxedo\", Emoji.Known.PersonInTuxedo },\n            { \"person_juggling\", Emoji.Known.PersonJuggling },\n            { \"person_kneeling\", Emoji.Known.PersonKneeling },\n            { \"person_lifting_weights\", Emoji.Known.PersonLiftingWeights },\n            { \"person_mountain_biking\", Emoji.Known.PersonMountainBiking },\n            { \"person_playing_handball\", Emoji.Known.PersonPlayingHandball },\n            { \"person_playing_water_polo\", Emoji.Known.PersonPlayingWaterPolo },\n            { \"person_pouting\", Emoji.Known.PersonPouting },\n            { \"person_raising_hand\", Emoji.Known.PersonRaisingHand },\n            { \"person_rowing_boat\", Emoji.Known.PersonRowingBoat },\n            { \"person_running\", Emoji.Known.PersonRunning },\n            { \"person_shrugging\", Emoji.Known.PersonShrugging },\n            { \"person_standing\", Emoji.Known.PersonStanding },\n            { \"person_surfing\", Emoji.Known.PersonSurfing },\n            { \"person_swimming\", Emoji.Known.PersonSwimming },\n            { \"person_taking_bath\", Emoji.Known.PersonTakingBath },\n            { \"person_tipping_hand\", Emoji.Known.PersonTippingHand },\n            { \"person_walking\", Emoji.Known.PersonWalking },\n            { \"person_wearing_turban\", Emoji.Known.PersonWearingTurban },\n            { \"person_with_skullcap\", Emoji.Known.PersonWithSkullcap },\n            { \"person_with_veil\", Emoji.Known.PersonWithVeil },\n            { \"petri_dish\", Emoji.Known.PetriDish },\n            { \"pick\", Emoji.Known.Pick },\n            { \"pickup_truck\", Emoji.Known.PickupTruck },\n            { \"pie\", Emoji.Known.Pie },\n            { \"pig\", Emoji.Known.Pig },\n            { \"pig_face\", Emoji.Known.PigFace },\n            { \"pig_nose\", Emoji.Known.PigNose },\n            { \"pile_of_poo\", Emoji.Known.PileOfPoo },\n            { \"pill\", Emoji.Known.Pill },\n            { \"piñata\", Emoji.Known.Piñata },\n            { \"pinched_fingers\", Emoji.Known.PinchedFingers },\n            { \"pinching_hand\", Emoji.Known.PinchingHand },\n            { \"pineapple\", Emoji.Known.Pineapple },\n            { \"pine_decoration\", Emoji.Known.PineDecoration },\n            { \"ping_pong\", Emoji.Known.PingPong },\n            { \"pisces\", Emoji.Known.Pisces },\n            { \"pizza\", Emoji.Known.Pizza },\n            { \"placard\", Emoji.Known.Placard },\n            { \"place_of_worship\", Emoji.Known.PlaceOfWorship },\n            { \"play_button\", Emoji.Known.PlayButton },\n            { \"play_or_pause_button\", Emoji.Known.PlayOrPauseButton },\n            { \"pleading_face\", Emoji.Known.PleadingFace },\n            { \"plunger\", Emoji.Known.Plunger },\n            { \"plus\", Emoji.Known.Plus },\n            { \"police_car\", Emoji.Known.PoliceCar },\n            { \"police_car_light\", Emoji.Known.PoliceCarLight },\n            { \"police_officer\", Emoji.Known.PoliceOfficer },\n            { \"poodle\", Emoji.Known.Poodle },\n            { \"pool_8_ball\", Emoji.Known.Pool8Ball },\n            { \"popcorn\", Emoji.Known.Popcorn },\n            { \"postal_horn\", Emoji.Known.PostalHorn },\n            { \"postbox\", Emoji.Known.Postbox },\n            { \"post_office\", Emoji.Known.PostOffice },\n            { \"potable_water\", Emoji.Known.PotableWater },\n            { \"potato\", Emoji.Known.Potato },\n            { \"pot_of_food\", Emoji.Known.PotOfFood },\n            { \"potted_plant\", Emoji.Known.PottedPlant },\n            { \"poultry_leg\", Emoji.Known.PoultryLeg },\n            { \"pound_banknote\", Emoji.Known.PoundBanknote },\n            { \"pouting_cat\", Emoji.Known.PoutingCat },\n            { \"pouting_face\", Emoji.Known.PoutingFace },\n            { \"prayer_beads\", Emoji.Known.PrayerBeads },\n            { \"pregnant_woman\", Emoji.Known.PregnantWoman },\n            { \"pretzel\", Emoji.Known.Pretzel },\n            { \"prince\", Emoji.Known.Prince },\n            { \"princess\", Emoji.Known.Princess },\n            { \"printer\", Emoji.Known.Printer },\n            { \"prohibited\", Emoji.Known.Prohibited },\n            { \"purple_circle\", Emoji.Known.PurpleCircle },\n            { \"purple_heart\", Emoji.Known.PurpleHeart },\n            { \"purple_square\", Emoji.Known.PurpleSquare },\n            { \"purse\", Emoji.Known.Purse },\n            { \"pushpin\", Emoji.Known.Pushpin },\n            { \"puzzle_piece\", Emoji.Known.PuzzlePiece },\n            { \"rabbit\", Emoji.Known.Rabbit },\n            { \"rabbit_face\", Emoji.Known.RabbitFace },\n            { \"raccoon\", Emoji.Known.Raccoon },\n            { \"racing_car\", Emoji.Known.RacingCar },\n            { \"radio\", Emoji.Known.Radio },\n            { \"radioactive\", Emoji.Known.Radioactive },\n            { \"radio_button\", Emoji.Known.RadioButton },\n            { \"railway_car\", Emoji.Known.RailwayCar },\n            { \"railway_track\", Emoji.Known.RailwayTrack },\n            { \"rainbow\", Emoji.Known.Rainbow },\n            { \"raised_back_of_hand\", Emoji.Known.RaisedBackOfHand },\n            { \"raised_fist\", Emoji.Known.RaisedFist },\n            { \"raised_hand\", Emoji.Known.RaisedHand },\n            { \"raising_hands\", Emoji.Known.RaisingHands },\n            { \"ram\", Emoji.Known.Ram },\n            { \"rat\", Emoji.Known.Rat },\n            { \"razor\", Emoji.Known.Razor },\n            { \"receipt\", Emoji.Known.Receipt },\n            { \"record_button\", Emoji.Known.RecordButton },\n            { \"recycling_symbol\", Emoji.Known.RecyclingSymbol },\n            { \"red_apple\", Emoji.Known.RedApple },\n            { \"red_circle\", Emoji.Known.RedCircle },\n            { \"red_envelope\", Emoji.Known.RedEnvelope },\n            { \"red_exclamation_mark\", Emoji.Known.RedExclamationMark },\n            { \"red_hair\", Emoji.Known.RedHair },\n            { \"red_heart\", Emoji.Known.RedHeart },\n            { \"red_paper_lantern\", Emoji.Known.RedPaperLantern },\n            { \"red_question_mark\", Emoji.Known.RedQuestionMark },\n            { \"red_square\", Emoji.Known.RedSquare },\n            { \"red_triangle_pointed_down\", Emoji.Known.RedTrianglePointedDown },\n            { \"red_triangle_pointed_up\", Emoji.Known.RedTrianglePointedUp },\n            { \"registered\", Emoji.Known.Registered },\n            { \"relieved_face\", Emoji.Known.RelievedFace },\n            { \"reminder_ribbon\", Emoji.Known.ReminderRibbon },\n            { \"repeat_button\", Emoji.Known.RepeatButton },\n            { \"repeat_single_button\", Emoji.Known.RepeatSingleButton },\n            { \"rescue_workers_helmet\", Emoji.Known.RescueWorkersHelmet },\n            { \"restroom\", Emoji.Known.Restroom },\n            { \"reverse_button\", Emoji.Known.ReverseButton },\n            { \"revolving_hearts\", Emoji.Known.RevolvingHearts },\n            { \"rhinoceros\", Emoji.Known.Rhinoceros },\n            { \"ribbon\", Emoji.Known.Ribbon },\n            { \"rice_ball\", Emoji.Known.RiceBall },\n            { \"rice_cracker\", Emoji.Known.RiceCracker },\n            { \"right_anger_bubble\", Emoji.Known.RightAngerBubble },\n            { \"right_arrow\", Emoji.Known.RightArrow },\n            { \"right_arrow_curving_down\", Emoji.Known.RightArrowCurvingDown },\n            { \"right_arrow_curving_left\", Emoji.Known.RightArrowCurvingLeft },\n            { \"right_arrow_curving_up\", Emoji.Known.RightArrowCurvingUp },\n            { \"right_facing_fist\", Emoji.Known.RightFacingFist },\n            { \"ring\", Emoji.Known.Ring },\n            { \"ringed_planet\", Emoji.Known.RingedPlanet },\n            { \"roasted_sweet_potato\", Emoji.Known.RoastedSweetPotato },\n            { \"robot\", Emoji.Known.Robot },\n            { \"rock\", Emoji.Known.Rock },\n            { \"rocket\", Emoji.Known.Rocket },\n            { \"rolled_up_newspaper\", Emoji.Known.RolledUpNewspaper },\n            { \"roller_coaster\", Emoji.Known.RollerCoaster },\n            { \"roller_skate\", Emoji.Known.RollerSkate },\n            { \"rolling_on_the_floor_laughing\", Emoji.Known.RollingOnTheFloorLaughing },\n            { \"roll_of_paper\", Emoji.Known.RollOfPaper },\n            { \"rooster\", Emoji.Known.Rooster },\n            { \"rose\", Emoji.Known.Rose },\n            { \"rosette\", Emoji.Known.Rosette },\n            { \"round_pushpin\", Emoji.Known.RoundPushpin },\n            { \"rugby_football\", Emoji.Known.RugbyFootball },\n            { \"running_shirt\", Emoji.Known.RunningShirt },\n            { \"running_shoe\", Emoji.Known.RunningShoe },\n            { \"sad_but_relieved_face\", Emoji.Known.SadButRelievedFace },\n            { \"safety_pin\", Emoji.Known.SafetyPin },\n            { \"safety_vest\", Emoji.Known.SafetyVest },\n            { \"sagittarius\", Emoji.Known.Sagittarius },\n            { \"sailboat\", Emoji.Known.Sailboat },\n            { \"sake\", Emoji.Known.Sake },\n            { \"salt\", Emoji.Known.Salt },\n            { \"sandwich\", Emoji.Known.Sandwich },\n            { \"santa_claus\", Emoji.Known.SantaClaus },\n            { \"sari\", Emoji.Known.Sari },\n            { \"satellite\", Emoji.Known.Satellite },\n            { \"satellite_antenna\", Emoji.Known.SatelliteAntenna },\n            { \"sauropod\", Emoji.Known.Sauropod },\n            { \"saxophone\", Emoji.Known.Saxophone },\n            { \"scarf\", Emoji.Known.Scarf },\n            { \"school\", Emoji.Known.School },\n            { \"scissors\", Emoji.Known.Scissors },\n            { \"scorpio\", Emoji.Known.Scorpio },\n            { \"scorpion\", Emoji.Known.Scorpion },\n            { \"screwdriver\", Emoji.Known.Screwdriver },\n            { \"scroll\", Emoji.Known.Scroll },\n            { \"seal\", Emoji.Known.Seal },\n            { \"seat\", Emoji.Known.Seat },\n            { \"2nd_place_medal\", Emoji.Known.SecondPlaceMedal },\n            { \"seedling\", Emoji.Known.Seedling },\n            { \"see_no_evil_monkey\", Emoji.Known.SeeNoEvilMonkey },\n            { \"selfie\", Emoji.Known.Selfie },\n            { \"seven_o_clock\", Emoji.Known.SevenOClock },\n            { \"seven_thirty\", Emoji.Known.SevenThirty },\n            { \"sewing_needle\", Emoji.Known.SewingNeedle },\n            { \"shallow_pan_of_food\", Emoji.Known.ShallowPanOfFood },\n            { \"shamrock\", Emoji.Known.Shamrock },\n            { \"shark\", Emoji.Known.Shark },\n            { \"shaved_ice\", Emoji.Known.ShavedIce },\n            { \"sheaf_of_rice\", Emoji.Known.SheafOfRice },\n            { \"shield\", Emoji.Known.Shield },\n            { \"shinto_shrine\", Emoji.Known.ShintoShrine },\n            { \"ship\", Emoji.Known.Ship },\n            { \"shooting_star\", Emoji.Known.ShootingStar },\n            { \"shopping_bags\", Emoji.Known.ShoppingBags },\n            { \"shopping_cart\", Emoji.Known.ShoppingCart },\n            { \"shortcake\", Emoji.Known.Shortcake },\n            { \"shorts\", Emoji.Known.Shorts },\n            { \"shower\", Emoji.Known.Shower },\n            { \"shrimp\", Emoji.Known.Shrimp },\n            { \"shuffle_tracks_button\", Emoji.Known.ShuffleTracksButton },\n            { \"shushing_face\", Emoji.Known.ShushingFace },\n            { \"sign_of_the_horns\", Emoji.Known.SignOfTheHorns },\n            { \"six_o_clock\", Emoji.Known.SixOClock },\n            { \"six_thirty\", Emoji.Known.SixThirty },\n            { \"skateboard\", Emoji.Known.Skateboard },\n            { \"skier\", Emoji.Known.Skier },\n            { \"skis\", Emoji.Known.Skis },\n            { \"skull\", Emoji.Known.Skull },\n            { \"skull_and_crossbones\", Emoji.Known.SkullAndCrossbones },\n            { \"skunk\", Emoji.Known.Skunk },\n            { \"sled\", Emoji.Known.Sled },\n            { \"sleeping_face\", Emoji.Known.SleepingFace },\n            { \"sleepy_face\", Emoji.Known.SleepyFace },\n            { \"slightly_frowning_face\", Emoji.Known.SlightlyFrowningFace },\n            { \"slightly_smiling_face\", Emoji.Known.SlightlySmilingFace },\n            { \"sloth\", Emoji.Known.Sloth },\n            { \"slot_machine\", Emoji.Known.SlotMachine },\n            { \"small_airplane\", Emoji.Known.SmallAirplane },\n            { \"small_blue_diamond\", Emoji.Known.SmallBlueDiamond },\n            { \"small_orange_diamond\", Emoji.Known.SmallOrangeDiamond },\n            { \"smiling_cat_with_heart_eyes\", Emoji.Known.SmilingCatWithHeartEyes },\n            { \"smiling_face\", Emoji.Known.SmilingFace },\n            { \"smiling_face_with_halo\", Emoji.Known.SmilingFaceWithHalo },\n            { \"smiling_face_with_heart_eyes\", Emoji.Known.SmilingFaceWithHeartEyes },\n            { \"smiling_face_with_hearts\", Emoji.Known.SmilingFaceWithHearts },\n            { \"smiling_face_with_horns\", Emoji.Known.SmilingFaceWithHorns },\n            { \"smiling_face_with_smiling_eyes\", Emoji.Known.SmilingFaceWithSmilingEyes },\n            { \"smiling_face_with_sunglasses\", Emoji.Known.SmilingFaceWithSunglasses },\n            { \"smiling_face_with_tear\", Emoji.Known.SmilingFaceWithTear },\n            { \"smirking_face\", Emoji.Known.SmirkingFace },\n            { \"snail\", Emoji.Known.Snail },\n            { \"snake\", Emoji.Known.Snake },\n            { \"sneezing_face\", Emoji.Known.SneezingFace },\n            { \"snowboarder\", Emoji.Known.Snowboarder },\n            { \"snow_capped_mountain\", Emoji.Known.SnowCappedMountain },\n            { \"snowflake\", Emoji.Known.Snowflake },\n            { \"snowman\", Emoji.Known.Snowman },\n            { \"snowman_without_snow\", Emoji.Known.SnowmanWithoutSnow },\n            { \"soap\", Emoji.Known.Soap },\n            { \"soccer_ball\", Emoji.Known.SoccerBall },\n            { \"socks\", Emoji.Known.Socks },\n            { \"softball\", Emoji.Known.Softball },\n            { \"soft_ice_cream\", Emoji.Known.SoftIceCream },\n            { \"soon_arrow\", Emoji.Known.SoonArrow },\n            { \"sos_button\", Emoji.Known.SosButton },\n            { \"spade_suit\", Emoji.Known.SpadeSuit },\n            { \"spaghetti\", Emoji.Known.Spaghetti },\n            { \"sparkle\", Emoji.Known.Sparkle },\n            { \"sparkler\", Emoji.Known.Sparkler },\n            { \"sparkles\", Emoji.Known.Sparkles },\n            { \"sparkling_heart\", Emoji.Known.SparklingHeart },\n            { \"speaker_high_volume\", Emoji.Known.SpeakerHighVolume },\n            { \"speaker_low_volume\", Emoji.Known.SpeakerLowVolume },\n            { \"speaker_medium_volume\", Emoji.Known.SpeakerMediumVolume },\n            { \"speaking_head\", Emoji.Known.SpeakingHead },\n            { \"speak_no_evil_monkey\", Emoji.Known.SpeakNoEvilMonkey },\n            { \"speech_balloon\", Emoji.Known.SpeechBalloon },\n            { \"speedboat\", Emoji.Known.Speedboat },\n            { \"spider\", Emoji.Known.Spider },\n            { \"spider_web\", Emoji.Known.SpiderWeb },\n            { \"spiral_calendar\", Emoji.Known.SpiralCalendar },\n            { \"spiral_notepad\", Emoji.Known.SpiralNotepad },\n            { \"spiral_shell\", Emoji.Known.SpiralShell },\n            { \"sponge\", Emoji.Known.Sponge },\n            { \"spoon\", Emoji.Known.Spoon },\n            { \"sports_medal\", Emoji.Known.SportsMedal },\n            { \"sport_utility_vehicle\", Emoji.Known.SportUtilityVehicle },\n            { \"spouting_whale\", Emoji.Known.SpoutingWhale },\n            { \"squid\", Emoji.Known.Squid },\n            { \"squinting_face_with_tongue\", Emoji.Known.SquintingFaceWithTongue },\n            { \"stadium\", Emoji.Known.Stadium },\n            { \"star\", Emoji.Known.Star },\n            { \"star_and_crescent\", Emoji.Known.StarAndCrescent },\n            { \"star_of_david\", Emoji.Known.StarOfDavid },\n            { \"star_struck\", Emoji.Known.StarStruck },\n            { \"station\", Emoji.Known.Station },\n            { \"statue_of_liberty\", Emoji.Known.StatueOfLiberty },\n            { \"steaming_bowl\", Emoji.Known.SteamingBowl },\n            { \"stethoscope\", Emoji.Known.Stethoscope },\n            { \"stop_button\", Emoji.Known.StopButton },\n            { \"stop_sign\", Emoji.Known.StopSign },\n            { \"stopwatch\", Emoji.Known.Stopwatch },\n            { \"straight_ruler\", Emoji.Known.StraightRuler },\n            { \"strawberry\", Emoji.Known.Strawberry },\n            { \"studio_microphone\", Emoji.Known.StudioMicrophone },\n            { \"stuffed_flatbread\", Emoji.Known.StuffedFlatbread },\n            { \"sun\", Emoji.Known.Sun },\n            { \"sun_behind_cloud\", Emoji.Known.SunBehindCloud },\n            { \"sun_behind_large_cloud\", Emoji.Known.SunBehindLargeCloud },\n            { \"sun_behind_rain_cloud\", Emoji.Known.SunBehindRainCloud },\n            { \"sun_behind_small_cloud\", Emoji.Known.SunBehindSmallCloud },\n            { \"sunflower\", Emoji.Known.Sunflower },\n            { \"sunglasses\", Emoji.Known.Sunglasses },\n            { \"sunrise\", Emoji.Known.Sunrise },\n            { \"sunrise_over_mountains\", Emoji.Known.SunriseOverMountains },\n            { \"sunset\", Emoji.Known.Sunset },\n            { \"sun_with_face\", Emoji.Known.SunWithFace },\n            { \"superhero\", Emoji.Known.Superhero },\n            { \"supervillain\", Emoji.Known.Supervillain },\n            { \"sushi\", Emoji.Known.Sushi },\n            { \"suspension_railway\", Emoji.Known.SuspensionRailway },\n            { \"swan\", Emoji.Known.Swan },\n            { \"sweat_droplets\", Emoji.Known.SweatDroplets },\n            { \"synagogue\", Emoji.Known.Synagogue },\n            { \"syringe\", Emoji.Known.Syringe },\n            { \"taco\", Emoji.Known.Taco },\n            { \"takeout_box\", Emoji.Known.TakeoutBox },\n            { \"tamale\", Emoji.Known.Tamale },\n            { \"tanabata_tree\", Emoji.Known.TanabataTree },\n            { \"tangerine\", Emoji.Known.Tangerine },\n            { \"taurus\", Emoji.Known.Taurus },\n            { \"taxi\", Emoji.Known.Taxi },\n            { \"teacup_without_handle\", Emoji.Known.TeacupWithoutHandle },\n            { \"teapot\", Emoji.Known.Teapot },\n            { \"tear_off_calendar\", Emoji.Known.TearOffCalendar },\n            { \"teddy_bear\", Emoji.Known.TeddyBear },\n            { \"telephone\", Emoji.Known.Telephone },\n            { \"telephone_receiver\", Emoji.Known.TelephoneReceiver },\n            { \"telescope\", Emoji.Known.Telescope },\n            { \"television\", Emoji.Known.Television },\n            { \"tennis\", Emoji.Known.Tennis },\n            { \"ten_o_clock\", Emoji.Known.TenOClock },\n            { \"tent\", Emoji.Known.Tent },\n            { \"ten_thirty\", Emoji.Known.TenThirty },\n            { \"test_tube\", Emoji.Known.TestTube },\n            { \"thermometer\", Emoji.Known.Thermometer },\n            { \"thinking_face\", Emoji.Known.ThinkingFace },\n            { \"3rd_place_medal\", Emoji.Known.ThirdPlaceMedal },\n            { \"thong_sandal\", Emoji.Known.ThongSandal },\n            { \"thought_balloon\", Emoji.Known.ThoughtBalloon },\n            { \"thread\", Emoji.Known.Thread },\n            { \"three_o_clock\", Emoji.Known.ThreeOClock },\n            { \"three_thirty\", Emoji.Known.ThreeThirty },\n            { \"thumbs_down\", Emoji.Known.ThumbsDown },\n            { \"thumbs_up\", Emoji.Known.ThumbsUp },\n            { \"ticket\", Emoji.Known.Ticket },\n            { \"tiger\", Emoji.Known.Tiger },\n            { \"tiger_face\", Emoji.Known.TigerFace },\n            { \"timer_clock\", Emoji.Known.TimerClock },\n            { \"tired_face\", Emoji.Known.TiredFace },\n            { \"toilet\", Emoji.Known.Toilet },\n            { \"tokyo_tower\", Emoji.Known.TokyoTower },\n            { \"tomato\", Emoji.Known.Tomato },\n            { \"tongue\", Emoji.Known.Tongue },\n            { \"toolbox\", Emoji.Known.Toolbox },\n            { \"tooth\", Emoji.Known.Tooth },\n            { \"toothbrush\", Emoji.Known.Toothbrush },\n            { \"top_arrow\", Emoji.Known.TopArrow },\n            { \"top_hat\", Emoji.Known.TopHat },\n            { \"tornado\", Emoji.Known.Tornado },\n            { \"trackball\", Emoji.Known.Trackball },\n            { \"tractor\", Emoji.Known.Tractor },\n            { \"trade_mark\", Emoji.Known.TradeMark },\n            { \"train\", Emoji.Known.Train },\n            { \"tram\", Emoji.Known.Tram },\n            { \"tram_car\", Emoji.Known.TramCar },\n            { \"transgender_symbol\", Emoji.Known.TransgenderSymbol },\n            { \"t_rex\", Emoji.Known.TRex },\n            { \"triangular_flag\", Emoji.Known.TriangularFlag },\n            { \"triangular_ruler\", Emoji.Known.TriangularRuler },\n            { \"trident_emblem\", Emoji.Known.TridentEmblem },\n            { \"trolleybus\", Emoji.Known.Trolleybus },\n            { \"trophy\", Emoji.Known.Trophy },\n            { \"tropical_drink\", Emoji.Known.TropicalDrink },\n            { \"tropical_fish\", Emoji.Known.TropicalFish },\n            { \"trumpet\", Emoji.Known.Trumpet },\n            { \"t_shirt\", Emoji.Known.TShirt },\n            { \"tulip\", Emoji.Known.Tulip },\n            { \"tumbler_glass\", Emoji.Known.TumblerGlass },\n            { \"turkey\", Emoji.Known.Turkey },\n            { \"turtle\", Emoji.Known.Turtle },\n            { \"twelve_o_clock\", Emoji.Known.TwelveOClock },\n            { \"twelve_thirty\", Emoji.Known.TwelveThirty },\n            { \"two_hearts\", Emoji.Known.TwoHearts },\n            { \"two_hump_camel\", Emoji.Known.TwoHumpCamel },\n            { \"two_o_clock\", Emoji.Known.TwoOClock },\n            { \"two_thirty\", Emoji.Known.TwoThirty },\n            { \"umbrella\", Emoji.Known.Umbrella },\n            { \"umbrella_on_ground\", Emoji.Known.UmbrellaOnGround },\n            { \"umbrella_with_rain_drops\", Emoji.Known.UmbrellaWithRainDrops },\n            { \"unamused_face\", Emoji.Known.UnamusedFace },\n            { \"unicorn\", Emoji.Known.Unicorn },\n            { \"unlocked\", Emoji.Known.Unlocked },\n            { \"up_arrow\", Emoji.Known.UpArrow },\n            { \"up_button\", Emoji.Known.UpButton },\n            { \"up_down_arrow\", Emoji.Known.UpDownArrow },\n            { \"up_left_arrow\", Emoji.Known.UpLeftArrow },\n            { \"up_right_arrow\", Emoji.Known.UpRightArrow },\n            { \"upside_down_face\", Emoji.Known.UpsideDownFace },\n            { \"upwards_button\", Emoji.Known.UpwardsButton },\n            { \"vampire\", Emoji.Known.Vampire },\n            { \"vertical_traffic_light\", Emoji.Known.VerticalTrafficLight },\n            { \"vibration_mode\", Emoji.Known.VibrationMode },\n            { \"victory_hand\", Emoji.Known.VictoryHand },\n            { \"video_camera\", Emoji.Known.VideoCamera },\n            { \"videocassette\", Emoji.Known.Videocassette },\n            { \"video_game\", Emoji.Known.VideoGame },\n            { \"violin\", Emoji.Known.Violin },\n            { \"virgo\", Emoji.Known.Virgo },\n            { \"volcano\", Emoji.Known.Volcano },\n            { \"volleyball\", Emoji.Known.Volleyball },\n            { \"vs_button\", Emoji.Known.VsButton },\n            { \"vulcan_salute\", Emoji.Known.VulcanSalute },\n            { \"waffle\", Emoji.Known.Waffle },\n            { \"waning_crescent_moon\", Emoji.Known.WaningCrescentMoon },\n            { \"waning_gibbous_moon\", Emoji.Known.WaningGibbousMoon },\n            { \"warning\", Emoji.Known.Warning },\n            { \"wastebasket\", Emoji.Known.Wastebasket },\n            { \"watch\", Emoji.Known.Watch },\n            { \"water_buffalo\", Emoji.Known.WaterBuffalo },\n            { \"water_closet\", Emoji.Known.WaterCloset },\n            { \"watermelon\", Emoji.Known.Watermelon },\n            { \"water_pistol\", Emoji.Known.WaterPistol },\n            { \"water_wave\", Emoji.Known.WaterWave },\n            { \"waving_hand\", Emoji.Known.WavingHand },\n            { \"wavy_dash\", Emoji.Known.WavyDash },\n            { \"waxing_crescent_moon\", Emoji.Known.WaxingCrescentMoon },\n            { \"waxing_gibbous_moon\", Emoji.Known.WaxingGibbousMoon },\n            { \"weary_cat\", Emoji.Known.WearyCat },\n            { \"weary_face\", Emoji.Known.WearyFace },\n            { \"wedding\", Emoji.Known.Wedding },\n            { \"whale\", Emoji.Known.Whale },\n            { \"wheelchair_symbol\", Emoji.Known.WheelchairSymbol },\n            { \"wheel_of_dharma\", Emoji.Known.WheelOfDharma },\n            { \"white_cane\", Emoji.Known.WhiteCane },\n            { \"white_circle\", Emoji.Known.WhiteCircle },\n            { \"white_exclamation_mark\", Emoji.Known.WhiteExclamationMark },\n            { \"white_flag\", Emoji.Known.WhiteFlag },\n            { \"white_flower\", Emoji.Known.WhiteFlower },\n            { \"white_hair\", Emoji.Known.WhiteHair },\n            { \"white_heart\", Emoji.Known.WhiteHeart },\n            { \"white_large_square\", Emoji.Known.WhiteLargeSquare },\n            { \"white_medium_small_square\", Emoji.Known.WhiteMediumSmallSquare },\n            { \"white_medium_square\", Emoji.Known.WhiteMediumSquare },\n            { \"white_question_mark\", Emoji.Known.WhiteQuestionMark },\n            { \"white_small_square\", Emoji.Known.WhiteSmallSquare },\n            { \"white_square_button\", Emoji.Known.WhiteSquareButton },\n            { \"wilted_flower\", Emoji.Known.WiltedFlower },\n            { \"wind_chime\", Emoji.Known.WindChime },\n            { \"wind_face\", Emoji.Known.WindFace },\n            { \"window\", Emoji.Known.Window },\n            { \"wine_glass\", Emoji.Known.WineGlass },\n            { \"winking_face\", Emoji.Known.WinkingFace },\n            { \"winking_face_with_tongue\", Emoji.Known.WinkingFaceWithTongue },\n            { \"wolf\", Emoji.Known.Wolf },\n            { \"woman\", Emoji.Known.Woman },\n            { \"woman_and_man_holding_hands\", Emoji.Known.WomanAndManHoldingHands },\n            { \"woman_dancing\", Emoji.Known.WomanDancing },\n            { \"womans_boot\", Emoji.Known.WomansBoot },\n            { \"womans_clothes\", Emoji.Known.WomansClothes },\n            { \"womans_hat\", Emoji.Known.WomansHat },\n            { \"womans_sandal\", Emoji.Known.WomansSandal },\n            { \"woman_with_headscarf\", Emoji.Known.WomanWithHeadscarf },\n            { \"women_holding_hands\", Emoji.Known.WomenHoldingHands },\n            { \"womens_room\", Emoji.Known.WomensRoom },\n            { \"wood\", Emoji.Known.Wood },\n            { \"woozy_face\", Emoji.Known.WoozyFace },\n            { \"world_map\", Emoji.Known.WorldMap },\n            { \"worm\", Emoji.Known.Worm },\n            { \"worried_face\", Emoji.Known.WorriedFace },\n            { \"wrapped_gift\", Emoji.Known.WrappedGift },\n            { \"wrench\", Emoji.Known.Wrench },\n            { \"writing_hand\", Emoji.Known.WritingHand },\n            { \"yarn\", Emoji.Known.Yarn },\n            { \"yawning_face\", Emoji.Known.YawningFace },\n            { \"yellow_circle\", Emoji.Known.YellowCircle },\n            { \"yellow_heart\", Emoji.Known.YellowHeart },\n            { \"yellow_square\", Emoji.Known.YellowSquare },\n            { \"yen_banknote\", Emoji.Known.YenBanknote },\n            { \"yin_yang\", Emoji.Known.YinYang },\n            { \"yo_yo\", Emoji.Known.YoYo },\n            { \"zany_face\", Emoji.Known.ZanyFace },\n            { \"zebra\", Emoji.Known.Zebra },\n            { \"zipper_mouth_face\", Emoji.Known.ZipperMouthFace },\n            { \"zombie\", Emoji.Known.Zombie },\n            { \"zzz\", Emoji.Known.Zzz },\n        };\n\n        /// <summary>\n        /// Contains all predefined emojis.\n        /// </summary>\n        public static class Known\n        {\n            /// <summary>\n            /// Gets the \"abacus\" emoji.\n            /// Description: Abacus.\n            /// </summary>\n            public const string Abacus = \"\\U0001F9EE\";\n\n            /// <summary>\n            /// Gets the \"ab_button_blood_type\" emoji.\n            /// Description: AB button blood type.\n            /// </summary>\n            public const string AbButtonBloodType = \"\\U0001F18E\";\n\n            /// <summary>\n            /// Gets the \"a_button_blood_type\" emoji.\n            /// Description: A button blood type.\n            /// </summary>\n            public const string AButtonBloodType = \"\\U0001F170\";\n\n            /// <summary>\n            /// Gets the \"accordion\" emoji.\n            /// Description: Accordion.\n            /// </summary>\n            public const string Accordion = \"\\U0001FA97\";\n\n            /// <summary>\n            /// Gets the \"adhesive_bandage\" emoji.\n            /// Description: Adhesive bandage.\n            /// </summary>\n            public const string AdhesiveBandage = \"\\U0001FA79\";\n\n            /// <summary>\n            /// Gets the \"admission_tickets\" emoji.\n            /// Description: Admission tickets.\n            /// </summary>\n            public const string AdmissionTickets = \"\\U0001F39F\";\n\n            /// <summary>\n            /// Gets the \"aerial_tramway\" emoji.\n            /// Description: Aerial tramway.\n            /// </summary>\n            public const string AerialTramway = \"\\U0001F6A1\";\n\n            /// <summary>\n            /// Gets the \"airplane\" emoji.\n            /// Description: Airplane.\n            /// </summary>\n            public const string Airplane = \"\\U00002708\";\n\n            /// <summary>\n            /// Gets the \"airplane_arrival\" emoji.\n            /// Description: Airplane arrival.\n            /// </summary>\n            public const string AirplaneArrival = \"\\U0001F6EC\";\n\n            /// <summary>\n            /// Gets the \"airplane_departure\" emoji.\n            /// Description: Airplane departure.\n            /// </summary>\n            public const string AirplaneDeparture = \"\\U0001F6EB\";\n\n            /// <summary>\n            /// Gets the \"alarm_clock\" emoji.\n            /// Description: Alarm clock.\n            /// </summary>\n            public const string AlarmClock = \"\\U000023F0\";\n\n            /// <summary>\n            /// Gets the \"alembic\" emoji.\n            /// Description: Alembic.\n            /// </summary>\n            public const string Alembic = \"\\U00002697\";\n\n            /// <summary>\n            /// Gets the \"alien\" emoji.\n            /// Description: Alien.\n            /// </summary>\n            public const string Alien = \"\\U0001F47D\";\n\n            /// <summary>\n            /// Gets the \"alien_monster\" emoji.\n            /// Description: Alien monster.\n            /// </summary>\n            public const string AlienMonster = \"\\U0001F47E\";\n\n            /// <summary>\n            /// Gets the \"ambulance\" emoji.\n            /// Description: Ambulance.\n            /// </summary>\n            public const string Ambulance = \"\\U0001F691\";\n\n            /// <summary>\n            /// Gets the \"american_football\" emoji.\n            /// Description: American football.\n            /// </summary>\n            public const string AmericanFootball = \"\\U0001F3C8\";\n\n            /// <summary>\n            /// Gets the \"amphora\" emoji.\n            /// Description: Amphora.\n            /// </summary>\n            public const string Amphora = \"\\U0001F3FA\";\n\n            /// <summary>\n            /// Gets the \"anatomical_heart\" emoji.\n            /// Description: Anatomical heart.\n            /// </summary>\n            public const string AnatomicalHeart = \"\\U0001FAC0\";\n\n            /// <summary>\n            /// Gets the \"anchor\" emoji.\n            /// Description: Anchor.\n            /// </summary>\n            public const string Anchor = \"\\U00002693\";\n\n            /// <summary>\n            /// Gets the \"anger_symbol\" emoji.\n            /// Description: Anger symbol.\n            /// </summary>\n            public const string AngerSymbol = \"\\U0001F4A2\";\n\n            /// <summary>\n            /// Gets the \"angry_face\" emoji.\n            /// Description: Angry face.\n            /// </summary>\n            public const string AngryFace = \"\\U0001F620\";\n\n            /// <summary>\n            /// Gets the \"angry_face_with_horns\" emoji.\n            /// Description: Angry face with horns.\n            /// </summary>\n            public const string AngryFaceWithHorns = \"\\U0001F47F\";\n\n            /// <summary>\n            /// Gets the \"anguished_face\" emoji.\n            /// Description: Anguished face.\n            /// </summary>\n            public const string AnguishedFace = \"\\U0001F627\";\n\n            /// <summary>\n            /// Gets the \"ant\" emoji.\n            /// Description: Ant.\n            /// </summary>\n            public const string Ant = \"\\U0001F41C\";\n\n            /// <summary>\n            /// Gets the \"antenna_bars\" emoji.\n            /// Description: Antenna bars.\n            /// </summary>\n            public const string AntennaBars = \"\\U0001F4F6\";\n\n            /// <summary>\n            /// Gets the \"anxious_face_with_sweat\" emoji.\n            /// Description: Anxious face with sweat.\n            /// </summary>\n            public const string AnxiousFaceWithSweat = \"\\U0001F630\";\n\n            /// <summary>\n            /// Gets the \"aquarius\" emoji.\n            /// Description: Aquarius.\n            /// </summary>\n            public const string Aquarius = \"\\U00002652\";\n\n            /// <summary>\n            /// Gets the \"aries\" emoji.\n            /// Description: Aries.\n            /// </summary>\n            public const string Aries = \"\\U00002648\";\n\n            /// <summary>\n            /// Gets the \"articulated_lorry\" emoji.\n            /// Description: Articulated lorry.\n            /// </summary>\n            public const string ArticulatedLorry = \"\\U0001F69B\";\n\n            /// <summary>\n            /// Gets the \"artist_palette\" emoji.\n            /// Description: Artist palette.\n            /// </summary>\n            public const string ArtistPalette = \"\\U0001F3A8\";\n\n            /// <summary>\n            /// Gets the \"astonished_face\" emoji.\n            /// Description: Astonished face.\n            /// </summary>\n            public const string AstonishedFace = \"\\U0001F632\";\n\n            /// <summary>\n            /// Gets the \"atm_sign\" emoji.\n            /// Description: ATM sign.\n            /// </summary>\n            public const string AtmSign = \"\\U0001F3E7\";\n\n            /// <summary>\n            /// Gets the \"atom_symbol\" emoji.\n            /// Description: Atom symbol.\n            /// </summary>\n            public const string AtomSymbol = \"\\U0000269B\";\n\n            /// <summary>\n            /// Gets the \"automobile\" emoji.\n            /// Description: Automobile.\n            /// </summary>\n            public const string Automobile = \"\\U0001F697\";\n\n            /// <summary>\n            /// Gets the \"auto_rickshaw\" emoji.\n            /// Description: Auto rickshaw.\n            /// </summary>\n            public const string AutoRickshaw = \"\\U0001F6FA\";\n\n            /// <summary>\n            /// Gets the \"avocado\" emoji.\n            /// Description: Avocado.\n            /// </summary>\n            public const string Avocado = \"\\U0001F951\";\n\n            /// <summary>\n            /// Gets the \"axe\" emoji.\n            /// Description: Axe.\n            /// </summary>\n            public const string Axe = \"\\U0001FA93\";\n\n            /// <summary>\n            /// Gets the \"baby\" emoji.\n            /// Description: Baby.\n            /// </summary>\n            public const string Baby = \"\\U0001F476\";\n\n            /// <summary>\n            /// Gets the \"baby_angel\" emoji.\n            /// Description: Baby angel.\n            /// </summary>\n            public const string BabyAngel = \"\\U0001F47C\";\n\n            /// <summary>\n            /// Gets the \"baby_bottle\" emoji.\n            /// Description: Baby bottle.\n            /// </summary>\n            public const string BabyBottle = \"\\U0001F37C\";\n\n            /// <summary>\n            /// Gets the \"baby_chick\" emoji.\n            /// Description: Baby chick.\n            /// </summary>\n            public const string BabyChick = \"\\U0001F424\";\n\n            /// <summary>\n            /// Gets the \"baby_symbol\" emoji.\n            /// Description: Baby symbol.\n            /// </summary>\n            public const string BabySymbol = \"\\U0001F6BC\";\n\n            /// <summary>\n            /// Gets the \"back_arrow\" emoji.\n            /// Description: BACK arrow.\n            /// </summary>\n            public const string BackArrow = \"\\U0001F519\";\n\n            /// <summary>\n            /// Gets the \"backhand_index_pointing_down\" emoji.\n            /// Description: Backhand index pointing down.\n            /// </summary>\n            public const string BackhandIndexPointingDown = \"\\U0001F447\";\n\n            /// <summary>\n            /// Gets the \"backhand_index_pointing_left\" emoji.\n            /// Description: Backhand index pointing left.\n            /// </summary>\n            public const string BackhandIndexPointingLeft = \"\\U0001F448\";\n\n            /// <summary>\n            /// Gets the \"backhand_index_pointing_right\" emoji.\n            /// Description: Backhand index pointing right.\n            /// </summary>\n            public const string BackhandIndexPointingRight = \"\\U0001F449\";\n\n            /// <summary>\n            /// Gets the \"backhand_index_pointing_up\" emoji.\n            /// Description: Backhand index pointing up.\n            /// </summary>\n            public const string BackhandIndexPointingUp = \"\\U0001F446\";\n\n            /// <summary>\n            /// Gets the \"backpack\" emoji.\n            /// Description: Backpack.\n            /// </summary>\n            public const string Backpack = \"\\U0001F392\";\n\n            /// <summary>\n            /// Gets the \"bacon\" emoji.\n            /// Description: Bacon.\n            /// </summary>\n            public const string Bacon = \"\\U0001F953\";\n\n            /// <summary>\n            /// Gets the \"badger\" emoji.\n            /// Description: Badger.\n            /// </summary>\n            public const string Badger = \"\\U0001F9A1\";\n\n            /// <summary>\n            /// Gets the \"badminton\" emoji.\n            /// Description: Badminton.\n            /// </summary>\n            public const string Badminton = \"\\U0001F3F8\";\n\n            /// <summary>\n            /// Gets the \"bagel\" emoji.\n            /// Description: Bagel.\n            /// </summary>\n            public const string Bagel = \"\\U0001F96F\";\n\n            /// <summary>\n            /// Gets the \"baggage_claim\" emoji.\n            /// Description: Baggage claim.\n            /// </summary>\n            public const string BaggageClaim = \"\\U0001F6C4\";\n\n            /// <summary>\n            /// Gets the \"baguette_bread\" emoji.\n            /// Description: Baguette bread.\n            /// </summary>\n            public const string BaguetteBread = \"\\U0001F956\";\n\n            /// <summary>\n            /// Gets the \"balance_scale\" emoji.\n            /// Description: Balance scale.\n            /// </summary>\n            public const string BalanceScale = \"\\U00002696\";\n\n            /// <summary>\n            /// Gets the \"bald\" emoji.\n            /// Description: Bald.\n            /// </summary>\n            public const string Bald = \"\\U0001F9B2\";\n\n            /// <summary>\n            /// Gets the \"ballet_shoes\" emoji.\n            /// Description: Ballet shoes.\n            /// </summary>\n            public const string BalletShoes = \"\\U0001FA70\";\n\n            /// <summary>\n            /// Gets the \"balloon\" emoji.\n            /// Description: Balloon.\n            /// </summary>\n            public const string Balloon = \"\\U0001F388\";\n\n            /// <summary>\n            /// Gets the \"ballot_box_with_ballot\" emoji.\n            /// Description: Ballot box with ballot.\n            /// </summary>\n            public const string BallotBoxWithBallot = \"\\U0001F5F3\";\n\n            /// <summary>\n            /// Gets the \"banana\" emoji.\n            /// Description: Banana.\n            /// </summary>\n            public const string Banana = \"\\U0001F34C\";\n\n            /// <summary>\n            /// Gets the \"banjo\" emoji.\n            /// Description: Banjo.\n            /// </summary>\n            public const string Banjo = \"\\U0001FA95\";\n\n            /// <summary>\n            /// Gets the \"bank\" emoji.\n            /// Description: Bank.\n            /// </summary>\n            public const string Bank = \"\\U0001F3E6\";\n\n            /// <summary>\n            /// Gets the \"barber_pole\" emoji.\n            /// Description: Barber pole.\n            /// </summary>\n            public const string BarberPole = \"\\U0001F488\";\n\n            /// <summary>\n            /// Gets the \"bar_chart\" emoji.\n            /// Description: Bar chart.\n            /// </summary>\n            public const string BarChart = \"\\U0001F4CA\";\n\n            /// <summary>\n            /// Gets the \"baseball\" emoji.\n            /// Description: Baseball.\n            /// </summary>\n            public const string Baseball = \"\\U000026BE\";\n\n            /// <summary>\n            /// Gets the \"basket\" emoji.\n            /// Description: Basket.\n            /// </summary>\n            public const string Basket = \"\\U0001F9FA\";\n\n            /// <summary>\n            /// Gets the \"basketball\" emoji.\n            /// Description: Basketball.\n            /// </summary>\n            public const string Basketball = \"\\U0001F3C0\";\n\n            /// <summary>\n            /// Gets the \"bat\" emoji.\n            /// Description: Bat.\n            /// </summary>\n            public const string Bat = \"\\U0001F987\";\n\n            /// <summary>\n            /// Gets the \"bathtub\" emoji.\n            /// Description: Bathtub.\n            /// </summary>\n            public const string Bathtub = \"\\U0001F6C1\";\n\n            /// <summary>\n            /// Gets the \"battery\" emoji.\n            /// Description: Battery.\n            /// </summary>\n            public const string Battery = \"\\U0001F50B\";\n\n            /// <summary>\n            /// Gets the \"b_button_blood_type\" emoji.\n            /// Description: B button blood type.\n            /// </summary>\n            public const string BButtonBloodType = \"\\U0001F171\";\n\n            /// <summary>\n            /// Gets the \"beach_with_umbrella\" emoji.\n            /// Description: Beach with umbrella.\n            /// </summary>\n            public const string BeachWithUmbrella = \"\\U0001F3D6\";\n\n            /// <summary>\n            /// Gets the \"beaming_face_with_smiling_eyes\" emoji.\n            /// Description: Beaming face with smiling eyes.\n            /// </summary>\n            public const string BeamingFaceWithSmilingEyes = \"\\U0001F601\";\n\n            /// <summary>\n            /// Gets the \"bear\" emoji.\n            /// Description: Bear.\n            /// </summary>\n            public const string Bear = \"\\U0001F43B\";\n\n            /// <summary>\n            /// Gets the \"beating_heart\" emoji.\n            /// Description: Beating heart.\n            /// </summary>\n            public const string BeatingHeart = \"\\U0001F493\";\n\n            /// <summary>\n            /// Gets the \"beaver\" emoji.\n            /// Description: Beaver.\n            /// </summary>\n            public const string Beaver = \"\\U0001F9AB\";\n\n            /// <summary>\n            /// Gets the \"bed\" emoji.\n            /// Description: Bed.\n            /// </summary>\n            public const string Bed = \"\\U0001F6CF\";\n\n            /// <summary>\n            /// Gets the \"beer_mug\" emoji.\n            /// Description: Beer mug.\n            /// </summary>\n            public const string BeerMug = \"\\U0001F37A\";\n\n            /// <summary>\n            /// Gets the \"beetle\" emoji.\n            /// Description: Beetle.\n            /// </summary>\n            public const string Beetle = \"\\U0001FAB2\";\n\n            /// <summary>\n            /// Gets the \"bell\" emoji.\n            /// Description: Bell.\n            /// </summary>\n            public const string Bell = \"\\U0001F514\";\n\n            /// <summary>\n            /// Gets the \"bellhop_bell\" emoji.\n            /// Description: Bellhop bell.\n            /// </summary>\n            public const string BellhopBell = \"\\U0001F6CE\";\n\n            /// <summary>\n            /// Gets the \"bell_pepper\" emoji.\n            /// Description: Bell pepper.\n            /// </summary>\n            public const string BellPepper = \"\\U0001FAD1\";\n\n            /// <summary>\n            /// Gets the \"bell_with_slash\" emoji.\n            /// Description: Bell with slash.\n            /// </summary>\n            public const string BellWithSlash = \"\\U0001F515\";\n\n            /// <summary>\n            /// Gets the \"bento_box\" emoji.\n            /// Description: Bento box.\n            /// </summary>\n            public const string BentoBox = \"\\U0001F371\";\n\n            /// <summary>\n            /// Gets the \"beverage_box\" emoji.\n            /// Description: Beverage box.\n            /// </summary>\n            public const string BeverageBox = \"\\U0001F9C3\";\n\n            /// <summary>\n            /// Gets the \"bicycle\" emoji.\n            /// Description: Bicycle.\n            /// </summary>\n            public const string Bicycle = \"\\U0001F6B2\";\n\n            /// <summary>\n            /// Gets the \"bikini\" emoji.\n            /// Description: Bikini.\n            /// </summary>\n            public const string Bikini = \"\\U0001F459\";\n\n            /// <summary>\n            /// Gets the \"billed_cap\" emoji.\n            /// Description: Billed cap.\n            /// </summary>\n            public const string BilledCap = \"\\U0001F9E2\";\n\n            /// <summary>\n            /// Gets the \"biohazard\" emoji.\n            /// Description: Biohazard.\n            /// </summary>\n            public const string Biohazard = \"\\U00002623\";\n\n            /// <summary>\n            /// Gets the \"bird\" emoji.\n            /// Description: Bird.\n            /// </summary>\n            public const string Bird = \"\\U0001F426\";\n\n            /// <summary>\n            /// Gets the \"birthday_cake\" emoji.\n            /// Description: Birthday cake.\n            /// </summary>\n            public const string BirthdayCake = \"\\U0001F382\";\n\n            /// <summary>\n            /// Gets the \"bison\" emoji.\n            /// Description: Bison.\n            /// </summary>\n            public const string Bison = \"\\U0001F9AC\";\n\n            /// <summary>\n            /// Gets the \"black_circle\" emoji.\n            /// Description: Black circle.\n            /// </summary>\n            public const string BlackCircle = \"\\U000026AB\";\n\n            /// <summary>\n            /// Gets the \"black_flag\" emoji.\n            /// Description: Black flag.\n            /// </summary>\n            public const string BlackFlag = \"\\U0001F3F4\";\n\n            /// <summary>\n            /// Gets the \"black_heart\" emoji.\n            /// Description: Black heart.\n            /// </summary>\n            public const string BlackHeart = \"\\U0001F5A4\";\n\n            /// <summary>\n            /// Gets the \"black_large_square\" emoji.\n            /// Description: Black large square.\n            /// </summary>\n            public const string BlackLargeSquare = \"\\U00002B1B\";\n\n            /// <summary>\n            /// Gets the \"black_medium_small_square\" emoji.\n            /// Description: black medium small square.\n            /// </summary>\n            public const string BlackMediumSmallSquare = \"\\U000025FE\";\n\n            /// <summary>\n            /// Gets the \"black_medium_square\" emoji.\n            /// Description: Black medium square.\n            /// </summary>\n            public const string BlackMediumSquare = \"\\U000025FC\";\n\n            /// <summary>\n            /// Gets the \"black_nib\" emoji.\n            /// Description: Black nib.\n            /// </summary>\n            public const string BlackNib = \"\\U00002712\";\n\n            /// <summary>\n            /// Gets the \"black_small_square\" emoji.\n            /// Description: Black small square.\n            /// </summary>\n            public const string BlackSmallSquare = \"\\U000025AA\";\n\n            /// <summary>\n            /// Gets the \"black_square_button\" emoji.\n            /// Description: Black square button.\n            /// </summary>\n            public const string BlackSquareButton = \"\\U0001F532\";\n\n            /// <summary>\n            /// Gets the \"blossom\" emoji.\n            /// Description: Blossom.\n            /// </summary>\n            public const string Blossom = \"\\U0001F33C\";\n\n            /// <summary>\n            /// Gets the \"blowfish\" emoji.\n            /// Description: Blowfish.\n            /// </summary>\n            public const string Blowfish = \"\\U0001F421\";\n\n            /// <summary>\n            /// Gets the \"blueberries\" emoji.\n            /// Description: Blueberries.\n            /// </summary>\n            public const string Blueberries = \"\\U0001FAD0\";\n\n            /// <summary>\n            /// Gets the \"blue_book\" emoji.\n            /// Description: Blue book.\n            /// </summary>\n            public const string BlueBook = \"\\U0001F4D8\";\n\n            /// <summary>\n            /// Gets the \"blue_circle\" emoji.\n            /// Description: Blue circle.\n            /// </summary>\n            public const string BlueCircle = \"\\U0001F535\";\n\n            /// <summary>\n            /// Gets the \"blue_heart\" emoji.\n            /// Description: Blue heart.\n            /// </summary>\n            public const string BlueHeart = \"\\U0001F499\";\n\n            /// <summary>\n            /// Gets the \"blue_square\" emoji.\n            /// Description: Blue square.\n            /// </summary>\n            public const string BlueSquare = \"\\U0001F7E6\";\n\n            /// <summary>\n            /// Gets the \"boar\" emoji.\n            /// Description: Boar.\n            /// </summary>\n            public const string Boar = \"\\U0001F417\";\n\n            /// <summary>\n            /// Gets the \"bomb\" emoji.\n            /// Description: Bomb.\n            /// </summary>\n            public const string Bomb = \"\\U0001F4A3\";\n\n            /// <summary>\n            /// Gets the \"bone\" emoji.\n            /// Description: Bone.\n            /// </summary>\n            public const string Bone = \"\\U0001F9B4\";\n\n            /// <summary>\n            /// Gets the \"bookmark\" emoji.\n            /// Description: Bookmark.\n            /// </summary>\n            public const string Bookmark = \"\\U0001F516\";\n\n            /// <summary>\n            /// Gets the \"bookmark_tabs\" emoji.\n            /// Description: Bookmark tabs.\n            /// </summary>\n            public const string BookmarkTabs = \"\\U0001F4D1\";\n\n            /// <summary>\n            /// Gets the \"books\" emoji.\n            /// Description: Books.\n            /// </summary>\n            public const string Books = \"\\U0001F4DA\";\n\n            /// <summary>\n            /// Gets the \"boomerang\" emoji.\n            /// Description: Boomerang.\n            /// </summary>\n            public const string Boomerang = \"\\U0001FA83\";\n\n            /// <summary>\n            /// Gets the \"bottle_with_popping_cork\" emoji.\n            /// Description: Bottle with popping cork.\n            /// </summary>\n            public const string BottleWithPoppingCork = \"\\U0001F37E\";\n\n            /// <summary>\n            /// Gets the \"bouquet\" emoji.\n            /// Description: Bouquet.\n            /// </summary>\n            public const string Bouquet = \"\\U0001F490\";\n\n            /// <summary>\n            /// Gets the \"bow_and_arrow\" emoji.\n            /// Description: Bow and arrow.\n            /// </summary>\n            public const string BowAndArrow = \"\\U0001F3F9\";\n\n            /// <summary>\n            /// Gets the \"bowling\" emoji.\n            /// Description: Bowling.\n            /// </summary>\n            public const string Bowling = \"\\U0001F3B3\";\n\n            /// <summary>\n            /// Gets the \"bowl_with_spoon\" emoji.\n            /// Description: Bowl with spoon.\n            /// </summary>\n            public const string BowlWithSpoon = \"\\U0001F963\";\n\n            /// <summary>\n            /// Gets the \"boxing_glove\" emoji.\n            /// Description: Boxing glove.\n            /// </summary>\n            public const string BoxingGlove = \"\\U0001F94A\";\n\n            /// <summary>\n            /// Gets the \"boy\" emoji.\n            /// Description: Boy.\n            /// </summary>\n            public const string Boy = \"\\U0001F466\";\n\n            /// <summary>\n            /// Gets the \"brain\" emoji.\n            /// Description: Brain.\n            /// </summary>\n            public const string Brain = \"\\U0001F9E0\";\n\n            /// <summary>\n            /// Gets the \"bread\" emoji.\n            /// Description: Bread.\n            /// </summary>\n            public const string Bread = \"\\U0001F35E\";\n\n            /// <summary>\n            /// Gets the \"breast_feeding\" emoji.\n            /// Description: breast feeding.\n            /// </summary>\n            public const string BreastFeeding = \"\\U0001F931\";\n\n            /// <summary>\n            /// Gets the \"brick\" emoji.\n            /// Description: Brick.\n            /// </summary>\n            public const string Brick = \"\\U0001F9F1\";\n\n            /// <summary>\n            /// Gets the \"bridge_at_night\" emoji.\n            /// Description: Bridge at night.\n            /// </summary>\n            public const string BridgeAtNight = \"\\U0001F309\";\n\n            /// <summary>\n            /// Gets the \"briefcase\" emoji.\n            /// Description: Briefcase.\n            /// </summary>\n            public const string Briefcase = \"\\U0001F4BC\";\n\n            /// <summary>\n            /// Gets the \"briefs\" emoji.\n            /// Description: Briefs.\n            /// </summary>\n            public const string Briefs = \"\\U0001FA72\";\n\n            /// <summary>\n            /// Gets the \"bright_button\" emoji.\n            /// Description: Bright button.\n            /// </summary>\n            public const string BrightButton = \"\\U0001F506\";\n\n            /// <summary>\n            /// Gets the \"broccoli\" emoji.\n            /// Description: Broccoli.\n            /// </summary>\n            public const string Broccoli = \"\\U0001F966\";\n\n            /// <summary>\n            /// Gets the \"broken_heart\" emoji.\n            /// Description: Broken heart.\n            /// </summary>\n            public const string BrokenHeart = \"\\U0001F494\";\n\n            /// <summary>\n            /// Gets the \"broom\" emoji.\n            /// Description: Broom.\n            /// </summary>\n            public const string Broom = \"\\U0001F9F9\";\n\n            /// <summary>\n            /// Gets the \"brown_circle\" emoji.\n            /// Description: Brown circle.\n            /// </summary>\n            public const string BrownCircle = \"\\U0001F7E4\";\n\n            /// <summary>\n            /// Gets the \"brown_heart\" emoji.\n            /// Description: Brown heart.\n            /// </summary>\n            public const string BrownHeart = \"\\U0001F90E\";\n\n            /// <summary>\n            /// Gets the \"brown_square\" emoji.\n            /// Description: Brown square.\n            /// </summary>\n            public const string BrownSquare = \"\\U0001F7EB\";\n\n            /// <summary>\n            /// Gets the \"bubble_tea\" emoji.\n            /// Description: Bubble tea.\n            /// </summary>\n            public const string BubbleTea = \"\\U0001F9CB\";\n\n            /// <summary>\n            /// Gets the \"bucket\" emoji.\n            /// Description: Bucket.\n            /// </summary>\n            public const string Bucket = \"\\U0001FAA3\";\n\n            /// <summary>\n            /// Gets the \"bug\" emoji.\n            /// Description: Bug.\n            /// </summary>\n            public const string Bug = \"\\U0001F41B\";\n\n            /// <summary>\n            /// Gets the \"building_construction\" emoji.\n            /// Description: Building construction.\n            /// </summary>\n            public const string BuildingConstruction = \"\\U0001F3D7\";\n\n            /// <summary>\n            /// Gets the \"bullet_train\" emoji.\n            /// Description: Bullet train.\n            /// </summary>\n            public const string BulletTrain = \"\\U0001F685\";\n\n            /// <summary>\n            /// Gets the \"bullseye\" emoji.\n            /// Description: Bullseye.\n            /// </summary>\n            public const string Bullseye = \"\\U0001F3AF\";\n\n            /// <summary>\n            /// Gets the \"burrito\" emoji.\n            /// Description: Burrito.\n            /// </summary>\n            public const string Burrito = \"\\U0001F32F\";\n\n            /// <summary>\n            /// Gets the \"bus\" emoji.\n            /// Description: Bus.\n            /// </summary>\n            public const string Bus = \"\\U0001F68C\";\n\n            /// <summary>\n            /// Gets the \"bus_stop\" emoji.\n            /// Description: Bus stop.\n            /// </summary>\n            public const string BusStop = \"\\U0001F68F\";\n\n            /// <summary>\n            /// Gets the \"bust_in_silhouette\" emoji.\n            /// Description: Bust in silhouette.\n            /// </summary>\n            public const string BustInSilhouette = \"\\U0001F464\";\n\n            /// <summary>\n            /// Gets the \"busts_in_silhouette\" emoji.\n            /// Description: Busts in silhouette.\n            /// </summary>\n            public const string BustsInSilhouette = \"\\U0001F465\";\n\n            /// <summary>\n            /// Gets the \"butter\" emoji.\n            /// Description: Butter.\n            /// </summary>\n            public const string Butter = \"\\U0001F9C8\";\n\n            /// <summary>\n            /// Gets the \"butterfly\" emoji.\n            /// Description: Butterfly.\n            /// </summary>\n            public const string Butterfly = \"\\U0001F98B\";\n\n            /// <summary>\n            /// Gets the \"cactus\" emoji.\n            /// Description: Cactus.\n            /// </summary>\n            public const string Cactus = \"\\U0001F335\";\n\n            /// <summary>\n            /// Gets the \"calendar\" emoji.\n            /// Description: Calendar.\n            /// </summary>\n            public const string Calendar = \"\\U0001F4C5\";\n\n            /// <summary>\n            /// Gets the \"call_me_hand\" emoji.\n            /// Description: Call me hand.\n            /// </summary>\n            public const string CallMeHand = \"\\U0001F919\";\n\n            /// <summary>\n            /// Gets the \"camel\" emoji.\n            /// Description: Camel.\n            /// </summary>\n            public const string Camel = \"\\U0001F42A\";\n\n            /// <summary>\n            /// Gets the \"camera\" emoji.\n            /// Description: Camera.\n            /// </summary>\n            public const string Camera = \"\\U0001F4F7\";\n\n            /// <summary>\n            /// Gets the \"camera_with_flash\" emoji.\n            /// Description: Camera with flash.\n            /// </summary>\n            public const string CameraWithFlash = \"\\U0001F4F8\";\n\n            /// <summary>\n            /// Gets the \"camping\" emoji.\n            /// Description: Camping.\n            /// </summary>\n            public const string Camping = \"\\U0001F3D5\";\n\n            /// <summary>\n            /// Gets the \"cancer\" emoji.\n            /// Description: Cancer.\n            /// </summary>\n            public const string Cancer = \"\\U0000264B\";\n\n            /// <summary>\n            /// Gets the \"candle\" emoji.\n            /// Description: Candle.\n            /// </summary>\n            public const string Candle = \"\\U0001F56F\";\n\n            /// <summary>\n            /// Gets the \"candy\" emoji.\n            /// Description: Candy.\n            /// </summary>\n            public const string Candy = \"\\U0001F36C\";\n\n            /// <summary>\n            /// Gets the \"canned_food\" emoji.\n            /// Description: Canned food.\n            /// </summary>\n            public const string CannedFood = \"\\U0001F96B\";\n\n            /// <summary>\n            /// Gets the \"canoe\" emoji.\n            /// Description: Canoe.\n            /// </summary>\n            public const string Canoe = \"\\U0001F6F6\";\n\n            /// <summary>\n            /// Gets the \"capricorn\" emoji.\n            /// Description: Capricorn.\n            /// </summary>\n            public const string Capricorn = \"\\U00002651\";\n\n            /// <summary>\n            /// Gets the \"card_file_box\" emoji.\n            /// Description: Card file box.\n            /// </summary>\n            public const string CardFileBox = \"\\U0001F5C3\";\n\n            /// <summary>\n            /// Gets the \"card_index\" emoji.\n            /// Description: Card index.\n            /// </summary>\n            public const string CardIndex = \"\\U0001F4C7\";\n\n            /// <summary>\n            /// Gets the \"card_index_dividers\" emoji.\n            /// Description: Card index dividers.\n            /// </summary>\n            public const string CardIndexDividers = \"\\U0001F5C2\";\n\n            /// <summary>\n            /// Gets the \"carousel_horse\" emoji.\n            /// Description: Carousel horse.\n            /// </summary>\n            public const string CarouselHorse = \"\\U0001F3A0\";\n\n            /// <summary>\n            /// Gets the \"carpentry_saw\" emoji.\n            /// Description: Carpentry saw.\n            /// </summary>\n            public const string CarpentrySaw = \"\\U0001FA9A\";\n\n            /// <summary>\n            /// Gets the \"carp_streamer\" emoji.\n            /// Description: Carp streamer.\n            /// </summary>\n            public const string CarpStreamer = \"\\U0001F38F\";\n\n            /// <summary>\n            /// Gets the \"carrot\" emoji.\n            /// Description: Carrot.\n            /// </summary>\n            public const string Carrot = \"\\U0001F955\";\n\n            /// <summary>\n            /// Gets the \"castle\" emoji.\n            /// Description: Castle.\n            /// </summary>\n            public const string Castle = \"\\U0001F3F0\";\n\n            /// <summary>\n            /// Gets the \"cat\" emoji.\n            /// Description: Cat.\n            /// </summary>\n            public const string Cat = \"\\U0001F408\";\n\n            /// <summary>\n            /// Gets the \"cat_face\" emoji.\n            /// Description: Cat face.\n            /// </summary>\n            public const string CatFace = \"\\U0001F431\";\n\n            /// <summary>\n            /// Gets the \"cat_with_tears_of_joy\" emoji.\n            /// Description: Cat with tears of joy.\n            /// </summary>\n            public const string CatWithTearsOfJoy = \"\\U0001F639\";\n\n            /// <summary>\n            /// Gets the \"cat_with_wry_smile\" emoji.\n            /// Description: Cat with wry smile.\n            /// </summary>\n            public const string CatWithWrySmile = \"\\U0001F63C\";\n\n            /// <summary>\n            /// Gets the \"chains\" emoji.\n            /// Description: Chains.\n            /// </summary>\n            public const string Chains = \"\\U000026D3\";\n\n            /// <summary>\n            /// Gets the \"chair\" emoji.\n            /// Description: Chair.\n            /// </summary>\n            public const string Chair = \"\\U0001FA91\";\n\n            /// <summary>\n            /// Gets the \"chart_decreasing\" emoji.\n            /// Description: Chart decreasing.\n            /// </summary>\n            public const string ChartDecreasing = \"\\U0001F4C9\";\n\n            /// <summary>\n            /// Gets the \"chart_increasing\" emoji.\n            /// Description: Chart increasing.\n            /// </summary>\n            public const string ChartIncreasing = \"\\U0001F4C8\";\n\n            /// <summary>\n            /// Gets the \"chart_increasing_with_yen\" emoji.\n            /// Description: Chart increasing with yen.\n            /// </summary>\n            public const string ChartIncreasingWithYen = \"\\U0001F4B9\";\n\n            /// <summary>\n            /// Gets the \"check_box_with_check\" emoji.\n            /// Description: Check box with check.\n            /// </summary>\n            public const string CheckBoxWithCheck = \"\\U00002611\";\n\n            /// <summary>\n            /// Gets the \"check_mark\" emoji.\n            /// Description: Check mark.\n            /// </summary>\n            public const string CheckMark = \"\\U00002714\";\n\n            /// <summary>\n            /// Gets the \"check_mark_button\" emoji.\n            /// Description: Check mark button.\n            /// </summary>\n            public const string CheckMarkButton = \"\\U00002705\";\n\n            /// <summary>\n            /// Gets the \"cheese_wedge\" emoji.\n            /// Description: Cheese wedge.\n            /// </summary>\n            public const string CheeseWedge = \"\\U0001F9C0\";\n\n            /// <summary>\n            /// Gets the \"chequered_flag\" emoji.\n            /// Description: Chequered flag.\n            /// </summary>\n            public const string ChequeredFlag = \"\\U0001F3C1\";\n\n            /// <summary>\n            /// Gets the \"cherries\" emoji.\n            /// Description: Cherries.\n            /// </summary>\n            public const string Cherries = \"\\U0001F352\";\n\n            /// <summary>\n            /// Gets the \"cherry_blossom\" emoji.\n            /// Description: Cherry blossom.\n            /// </summary>\n            public const string CherryBlossom = \"\\U0001F338\";\n\n            /// <summary>\n            /// Gets the \"chess_pawn\" emoji.\n            /// Description: Chess pawn.\n            /// </summary>\n            public const string ChessPawn = \"\\U0000265F\";\n\n            /// <summary>\n            /// Gets the \"chestnut\" emoji.\n            /// Description: Chestnut.\n            /// </summary>\n            public const string Chestnut = \"\\U0001F330\";\n\n            /// <summary>\n            /// Gets the \"chicken\" emoji.\n            /// Description: Chicken.\n            /// </summary>\n            public const string Chicken = \"\\U0001F414\";\n\n            /// <summary>\n            /// Gets the \"child\" emoji.\n            /// Description: Child.\n            /// </summary>\n            public const string Child = \"\\U0001F9D2\";\n\n            /// <summary>\n            /// Gets the \"children_crossing\" emoji.\n            /// Description: Children crossing.\n            /// </summary>\n            public const string ChildrenCrossing = \"\\U0001F6B8\";\n\n            /// <summary>\n            /// Gets the \"chipmunk\" emoji.\n            /// Description: Chipmunk.\n            /// </summary>\n            public const string Chipmunk = \"\\U0001F43F\";\n\n            /// <summary>\n            /// Gets the \"chocolate_bar\" emoji.\n            /// Description: Chocolate bar.\n            /// </summary>\n            public const string ChocolateBar = \"\\U0001F36B\";\n\n            /// <summary>\n            /// Gets the \"chopsticks\" emoji.\n            /// Description: Chopsticks.\n            /// </summary>\n            public const string Chopsticks = \"\\U0001F962\";\n\n            /// <summary>\n            /// Gets the \"christmas_tree\" emoji.\n            /// Description: Christmas tree.\n            /// </summary>\n            public const string ChristmasTree = \"\\U0001F384\";\n\n            /// <summary>\n            /// Gets the \"church\" emoji.\n            /// Description: Church.\n            /// </summary>\n            public const string Church = \"\\U000026EA\";\n\n            /// <summary>\n            /// Gets the \"cigarette\" emoji.\n            /// Description: Cigarette.\n            /// </summary>\n            public const string Cigarette = \"\\U0001F6AC\";\n\n            /// <summary>\n            /// Gets the \"cinema\" emoji.\n            /// Description: Cinema.\n            /// </summary>\n            public const string Cinema = \"\\U0001F3A6\";\n\n            /// <summary>\n            /// Gets the \"circled_m\" emoji.\n            /// Description: Circled M.\n            /// </summary>\n            public const string CircledM = \"\\U000024C2\";\n\n            /// <summary>\n            /// Gets the \"circus_tent\" emoji.\n            /// Description: Circus tent.\n            /// </summary>\n            public const string CircusTent = \"\\U0001F3AA\";\n\n            /// <summary>\n            /// Gets the \"cityscape\" emoji.\n            /// Description: Cityscape.\n            /// </summary>\n            public const string Cityscape = \"\\U0001F3D9\";\n\n            /// <summary>\n            /// Gets the \"cityscape_at_dusk\" emoji.\n            /// Description: Cityscape at dusk.\n            /// </summary>\n            public const string CityscapeAtDusk = \"\\U0001F306\";\n\n            /// <summary>\n            /// Gets the \"clamp\" emoji.\n            /// Description: Clamp.\n            /// </summary>\n            public const string Clamp = \"\\U0001F5DC\";\n\n            /// <summary>\n            /// Gets the \"clapper_board\" emoji.\n            /// Description: Clapper board.\n            /// </summary>\n            public const string ClapperBoard = \"\\U0001F3AC\";\n\n            /// <summary>\n            /// Gets the \"clapping_hands\" emoji.\n            /// Description: Clapping hands.\n            /// </summary>\n            public const string ClappingHands = \"\\U0001F44F\";\n\n            /// <summary>\n            /// Gets the \"classical_building\" emoji.\n            /// Description: Classical building.\n            /// </summary>\n            public const string ClassicalBuilding = \"\\U0001F3DB\";\n\n            /// <summary>\n            /// Gets the \"cl_button\" emoji.\n            /// Description: CL button.\n            /// </summary>\n            public const string ClButton = \"\\U0001F191\";\n\n            /// <summary>\n            /// Gets the \"clinking_beer_mugs\" emoji.\n            /// Description: Clinking beer mugs.\n            /// </summary>\n            public const string ClinkingBeerMugs = \"\\U0001F37B\";\n\n            /// <summary>\n            /// Gets the \"clinking_glasses\" emoji.\n            /// Description: Clinking glasses.\n            /// </summary>\n            public const string ClinkingGlasses = \"\\U0001F942\";\n\n            /// <summary>\n            /// Gets the \"clipboard\" emoji.\n            /// Description: Clipboard.\n            /// </summary>\n            public const string Clipboard = \"\\U0001F4CB\";\n\n            /// <summary>\n            /// Gets the \"clockwise_vertical_arrows\" emoji.\n            /// Description: Clockwise vertical arrows.\n            /// </summary>\n            public const string ClockwiseVerticalArrows = \"\\U0001F503\";\n\n            /// <summary>\n            /// Gets the \"closed_book\" emoji.\n            /// Description: Closed book.\n            /// </summary>\n            public const string ClosedBook = \"\\U0001F4D5\";\n\n            /// <summary>\n            /// Gets the \"closed_mailbox_with_lowered_flag\" emoji.\n            /// Description: Closed mailbox with lowered flag.\n            /// </summary>\n            public const string ClosedMailboxWithLoweredFlag = \"\\U0001F4EA\";\n\n            /// <summary>\n            /// Gets the \"closed_mailbox_with_raised_flag\" emoji.\n            /// Description: Closed mailbox with raised flag.\n            /// </summary>\n            public const string ClosedMailboxWithRaisedFlag = \"\\U0001F4EB\";\n\n            /// <summary>\n            /// Gets the \"closed_umbrella\" emoji.\n            /// Description: Closed umbrella.\n            /// </summary>\n            public const string ClosedUmbrella = \"\\U0001F302\";\n\n            /// <summary>\n            /// Gets the \"cloud\" emoji.\n            /// Description: Cloud.\n            /// </summary>\n            public const string Cloud = \"\\U00002601\";\n\n            /// <summary>\n            /// Gets the \"cloud_with_lightning\" emoji.\n            /// Description: Cloud with lightning.\n            /// </summary>\n            public const string CloudWithLightning = \"\\U0001F329\";\n\n            /// <summary>\n            /// Gets the \"cloud_with_lightning_and_rain\" emoji.\n            /// Description: Cloud with lightning and rain.\n            /// </summary>\n            public const string CloudWithLightningAndRain = \"\\U000026C8\";\n\n            /// <summary>\n            /// Gets the \"cloud_with_rain\" emoji.\n            /// Description: Cloud with rain.\n            /// </summary>\n            public const string CloudWithRain = \"\\U0001F327\";\n\n            /// <summary>\n            /// Gets the \"cloud_with_snow\" emoji.\n            /// Description: Cloud with snow.\n            /// </summary>\n            public const string CloudWithSnow = \"\\U0001F328\";\n\n            /// <summary>\n            /// Gets the \"clown_face\" emoji.\n            /// Description: Clown face.\n            /// </summary>\n            public const string ClownFace = \"\\U0001F921\";\n\n            /// <summary>\n            /// Gets the \"club_suit\" emoji.\n            /// Description: Club suit.\n            /// </summary>\n            public const string ClubSuit = \"\\U00002663\";\n\n            /// <summary>\n            /// Gets the \"clutch_bag\" emoji.\n            /// Description: Clutch bag.\n            /// </summary>\n            public const string ClutchBag = \"\\U0001F45D\";\n\n            /// <summary>\n            /// Gets the \"coat\" emoji.\n            /// Description: Coat.\n            /// </summary>\n            public const string Coat = \"\\U0001F9E5\";\n\n            /// <summary>\n            /// Gets the \"cockroach\" emoji.\n            /// Description: Cockroach.\n            /// </summary>\n            public const string Cockroach = \"\\U0001FAB3\";\n\n            /// <summary>\n            /// Gets the \"cocktail_glass\" emoji.\n            /// Description: Cocktail glass.\n            /// </summary>\n            public const string CocktailGlass = \"\\U0001F378\";\n\n            /// <summary>\n            /// Gets the \"coconut\" emoji.\n            /// Description: Coconut.\n            /// </summary>\n            public const string Coconut = \"\\U0001F965\";\n\n            /// <summary>\n            /// Gets the \"coffin\" emoji.\n            /// Description: Coffin.\n            /// </summary>\n            public const string Coffin = \"\\U000026B0\";\n\n            /// <summary>\n            /// Gets the \"coin\" emoji.\n            /// Description: Coin.\n            /// </summary>\n            public const string Coin = \"\\U0001FA99\";\n\n            /// <summary>\n            /// Gets the \"cold_face\" emoji.\n            /// Description: Cold face.\n            /// </summary>\n            public const string ColdFace = \"\\U0001F976\";\n\n            /// <summary>\n            /// Gets the \"collision\" emoji.\n            /// Description: Collision.\n            /// </summary>\n            public const string Collision = \"\\U0001F4A5\";\n\n            /// <summary>\n            /// Gets the \"comet\" emoji.\n            /// Description: Comet.\n            /// </summary>\n            public const string Comet = \"\\U00002604\";\n\n            /// <summary>\n            /// Gets the \"compass\" emoji.\n            /// Description: Compass.\n            /// </summary>\n            public const string Compass = \"\\U0001F9ED\";\n\n            /// <summary>\n            /// Gets the \"computer_disk\" emoji.\n            /// Description: Computer disk.\n            /// </summary>\n            public const string ComputerDisk = \"\\U0001F4BD\";\n\n            /// <summary>\n            /// Gets the \"computer_mouse\" emoji.\n            /// Description: Computer mouse.\n            /// </summary>\n            public const string ComputerMouse = \"\\U0001F5B1\";\n\n            /// <summary>\n            /// Gets the \"confetti_ball\" emoji.\n            /// Description: Confetti ball.\n            /// </summary>\n            public const string ConfettiBall = \"\\U0001F38A\";\n\n            /// <summary>\n            /// Gets the \"confounded_face\" emoji.\n            /// Description: Confounded face.\n            /// </summary>\n            public const string ConfoundedFace = \"\\U0001F616\";\n\n            /// <summary>\n            /// Gets the \"confused_face\" emoji.\n            /// Description: Confused face.\n            /// </summary>\n            public const string ConfusedFace = \"\\U0001F615\";\n\n            /// <summary>\n            /// Gets the \"construction\" emoji.\n            /// Description: Construction.\n            /// </summary>\n            public const string Construction = \"\\U0001F6A7\";\n\n            /// <summary>\n            /// Gets the \"construction_worker\" emoji.\n            /// Description: Construction worker.\n            /// </summary>\n            public const string ConstructionWorker = \"\\U0001F477\";\n\n            /// <summary>\n            /// Gets the \"control_knobs\" emoji.\n            /// Description: Control knobs.\n            /// </summary>\n            public const string ControlKnobs = \"\\U0001F39B\";\n\n            /// <summary>\n            /// Gets the \"convenience_store\" emoji.\n            /// Description: Convenience store.\n            /// </summary>\n            public const string ConvenienceStore = \"\\U0001F3EA\";\n\n            /// <summary>\n            /// Gets the \"cooked_rice\" emoji.\n            /// Description: Cooked rice.\n            /// </summary>\n            public const string CookedRice = \"\\U0001F35A\";\n\n            /// <summary>\n            /// Gets the \"cookie\" emoji.\n            /// Description: Cookie.\n            /// </summary>\n            public const string Cookie = \"\\U0001F36A\";\n\n            /// <summary>\n            /// Gets the \"cooking\" emoji.\n            /// Description: Cooking.\n            /// </summary>\n            public const string Cooking = \"\\U0001F373\";\n\n            /// <summary>\n            /// Gets the \"cool_button\" emoji.\n            /// Description: COOL button.\n            /// </summary>\n            public const string CoolButton = \"\\U0001F192\";\n\n            /// <summary>\n            /// Gets the \"copyright\" emoji.\n            /// Description: Copyright.\n            /// </summary>\n            public const string Copyright = \"\\U000000A9\";\n\n            /// <summary>\n            /// Gets the \"couch_and_lamp\" emoji.\n            /// Description: Couch and lamp.\n            /// </summary>\n            public const string CouchAndLamp = \"\\U0001F6CB\";\n\n            /// <summary>\n            /// Gets the \"counterclockwise_arrows_button\" emoji.\n            /// Description: Counterclockwise arrows button.\n            /// </summary>\n            public const string CounterclockwiseArrowsButton = \"\\U0001F504\";\n\n            /// <summary>\n            /// Gets the \"couple_with_heart\" emoji.\n            /// Description: Couple with heart.\n            /// </summary>\n            public const string CoupleWithHeart = \"\\U0001F491\";\n\n            /// <summary>\n            /// Gets the \"cow\" emoji.\n            /// Description: Cow.\n            /// </summary>\n            public const string Cow = \"\\U0001F404\";\n\n            /// <summary>\n            /// Gets the \"cowboy_hat_face\" emoji.\n            /// Description: Cowboy hat face.\n            /// </summary>\n            public const string CowboyHatFace = \"\\U0001F920\";\n\n            /// <summary>\n            /// Gets the \"cow_face\" emoji.\n            /// Description: Cow face.\n            /// </summary>\n            public const string CowFace = \"\\U0001F42E\";\n\n            /// <summary>\n            /// Gets the \"crab\" emoji.\n            /// Description: Crab.\n            /// </summary>\n            public const string Crab = \"\\U0001F980\";\n\n            /// <summary>\n            /// Gets the \"crayon\" emoji.\n            /// Description: Crayon.\n            /// </summary>\n            public const string Crayon = \"\\U0001F58D\";\n\n            /// <summary>\n            /// Gets the \"credit_card\" emoji.\n            /// Description: Credit card.\n            /// </summary>\n            public const string CreditCard = \"\\U0001F4B3\";\n\n            /// <summary>\n            /// Gets the \"crescent_moon\" emoji.\n            /// Description: Crescent moon.\n            /// </summary>\n            public const string CrescentMoon = \"\\U0001F319\";\n\n            /// <summary>\n            /// Gets the \"cricket\" emoji.\n            /// Description: Cricket.\n            /// </summary>\n            public const string Cricket = \"\\U0001F997\";\n\n            /// <summary>\n            /// Gets the \"cricket_game\" emoji.\n            /// Description: Cricket game.\n            /// </summary>\n            public const string CricketGame = \"\\U0001F3CF\";\n\n            /// <summary>\n            /// Gets the \"crocodile\" emoji.\n            /// Description: Crocodile.\n            /// </summary>\n            public const string Crocodile = \"\\U0001F40A\";\n\n            /// <summary>\n            /// Gets the \"croissant\" emoji.\n            /// Description: Croissant.\n            /// </summary>\n            public const string Croissant = \"\\U0001F950\";\n\n            /// <summary>\n            /// Gets the \"crossed_fingers\" emoji.\n            /// Description: Crossed fingers.\n            /// </summary>\n            public const string CrossedFingers = \"\\U0001F91E\";\n\n            /// <summary>\n            /// Gets the \"crossed_flags\" emoji.\n            /// Description: Crossed flags.\n            /// </summary>\n            public const string CrossedFlags = \"\\U0001F38C\";\n\n            /// <summary>\n            /// Gets the \"crossed_swords\" emoji.\n            /// Description: Crossed swords.\n            /// </summary>\n            public const string CrossedSwords = \"\\U00002694\";\n\n            /// <summary>\n            /// Gets the \"cross_mark\" emoji.\n            /// Description: Cross mark.\n            /// </summary>\n            public const string CrossMark = \"\\U0000274C\";\n\n            /// <summary>\n            /// Gets the \"cross_mark_button\" emoji.\n            /// Description: Cross mark button.\n            /// </summary>\n            public const string CrossMarkButton = \"\\U0000274E\";\n\n            /// <summary>\n            /// Gets the \"crown\" emoji.\n            /// Description: Crown.\n            /// </summary>\n            public const string Crown = \"\\U0001F451\";\n\n            /// <summary>\n            /// Gets the \"crying_cat\" emoji.\n            /// Description: Crying cat.\n            /// </summary>\n            public const string CryingCat = \"\\U0001F63F\";\n\n            /// <summary>\n            /// Gets the \"crying_face\" emoji.\n            /// Description: Crying face.\n            /// </summary>\n            public const string CryingFace = \"\\U0001F622\";\n\n            /// <summary>\n            /// Gets the \"crystal_ball\" emoji.\n            /// Description: Crystal ball.\n            /// </summary>\n            public const string CrystalBall = \"\\U0001F52E\";\n\n            /// <summary>\n            /// Gets the \"cucumber\" emoji.\n            /// Description: Cucumber.\n            /// </summary>\n            public const string Cucumber = \"\\U0001F952\";\n\n            /// <summary>\n            /// Gets the \"cupcake\" emoji.\n            /// Description: Cupcake.\n            /// </summary>\n            public const string Cupcake = \"\\U0001F9C1\";\n\n            /// <summary>\n            /// Gets the \"cup_with_straw\" emoji.\n            /// Description: Cup with straw.\n            /// </summary>\n            public const string CupWithStraw = \"\\U0001F964\";\n\n            /// <summary>\n            /// Gets the \"curling_stone\" emoji.\n            /// Description: Curling stone.\n            /// </summary>\n            public const string CurlingStone = \"\\U0001F94C\";\n\n            /// <summary>\n            /// Gets the \"curly_hair\" emoji.\n            /// Description: Curly hair.\n            /// </summary>\n            public const string CurlyHair = \"\\U0001F9B1\";\n\n            /// <summary>\n            /// Gets the \"curly_loop\" emoji.\n            /// Description: Curly loop.\n            /// </summary>\n            public const string CurlyLoop = \"\\U000027B0\";\n\n            /// <summary>\n            /// Gets the \"currency_exchange\" emoji.\n            /// Description: Currency exchange.\n            /// </summary>\n            public const string CurrencyExchange = \"\\U0001F4B1\";\n\n            /// <summary>\n            /// Gets the \"curry_rice\" emoji.\n            /// Description: Curry rice.\n            /// </summary>\n            public const string CurryRice = \"\\U0001F35B\";\n\n            /// <summary>\n            /// Gets the \"custard\" emoji.\n            /// Description: Custard.\n            /// </summary>\n            public const string Custard = \"\\U0001F36E\";\n\n            /// <summary>\n            /// Gets the \"customs\" emoji.\n            /// Description: Customs.\n            /// </summary>\n            public const string Customs = \"\\U0001F6C3\";\n\n            /// <summary>\n            /// Gets the \"cut_of_meat\" emoji.\n            /// Description: Cut of meat.\n            /// </summary>\n            public const string CutOfMeat = \"\\U0001F969\";\n\n            /// <summary>\n            /// Gets the \"cyclone\" emoji.\n            /// Description: Cyclone.\n            /// </summary>\n            public const string Cyclone = \"\\U0001F300\";\n\n            /// <summary>\n            /// Gets the \"dagger\" emoji.\n            /// Description: Dagger.\n            /// </summary>\n            public const string Dagger = \"\\U0001F5E1\";\n\n            /// <summary>\n            /// Gets the \"dango\" emoji.\n            /// Description: Dango.\n            /// </summary>\n            public const string Dango = \"\\U0001F361\";\n\n            /// <summary>\n            /// Gets the \"dashing_away\" emoji.\n            /// Description: Dashing away.\n            /// </summary>\n            public const string DashingAway = \"\\U0001F4A8\";\n\n            /// <summary>\n            /// Gets the \"deaf_person\" emoji.\n            /// Description: Deaf person.\n            /// </summary>\n            public const string DeafPerson = \"\\U0001F9CF\";\n\n            /// <summary>\n            /// Gets the \"deciduous_tree\" emoji.\n            /// Description: Deciduous tree.\n            /// </summary>\n            public const string DeciduousTree = \"\\U0001F333\";\n\n            /// <summary>\n            /// Gets the \"deer\" emoji.\n            /// Description: Deer.\n            /// </summary>\n            public const string Deer = \"\\U0001F98C\";\n\n            /// <summary>\n            /// Gets the \"delivery_truck\" emoji.\n            /// Description: Delivery truck.\n            /// </summary>\n            public const string DeliveryTruck = \"\\U0001F69A\";\n\n            /// <summary>\n            /// Gets the \"department_store\" emoji.\n            /// Description: Department store.\n            /// </summary>\n            public const string DepartmentStore = \"\\U0001F3EC\";\n\n            /// <summary>\n            /// Gets the \"derelict_house\" emoji.\n            /// Description: Derelict house.\n            /// </summary>\n            public const string DerelictHouse = \"\\U0001F3DA\";\n\n            /// <summary>\n            /// Gets the \"desert\" emoji.\n            /// Description: Desert.\n            /// </summary>\n            public const string Desert = \"\\U0001F3DC\";\n\n            /// <summary>\n            /// Gets the \"desert_island\" emoji.\n            /// Description: Desert island.\n            /// </summary>\n            public const string DesertIsland = \"\\U0001F3DD\";\n\n            /// <summary>\n            /// Gets the \"desktop_computer\" emoji.\n            /// Description: Desktop computer.\n            /// </summary>\n            public const string DesktopComputer = \"\\U0001F5A5\";\n\n            /// <summary>\n            /// Gets the \"detective\" emoji.\n            /// Description: Detective.\n            /// </summary>\n            public const string Detective = \"\\U0001F575\";\n\n            /// <summary>\n            /// Gets the \"diamond_suit\" emoji.\n            /// Description: Diamond suit.\n            /// </summary>\n            public const string DiamondSuit = \"\\U00002666\";\n\n            /// <summary>\n            /// Gets the \"diamond_with_a_dot\" emoji.\n            /// Description: Diamond with a dot.\n            /// </summary>\n            public const string DiamondWithADot = \"\\U0001F4A0\";\n\n            /// <summary>\n            /// Gets the \"dim_button\" emoji.\n            /// Description: Dim button.\n            /// </summary>\n            public const string DimButton = \"\\U0001F505\";\n\n            /// <summary>\n            /// Gets the \"disappointed_face\" emoji.\n            /// Description: Disappointed face.\n            /// </summary>\n            public const string DisappointedFace = \"\\U0001F61E\";\n\n            /// <summary>\n            /// Gets the \"disguised_face\" emoji.\n            /// Description: Disguised face.\n            /// </summary>\n            public const string DisguisedFace = \"\\U0001F978\";\n\n            /// <summary>\n            /// Gets the \"divide\" emoji.\n            /// Description: Divide.\n            /// </summary>\n            public const string Divide = \"\\U00002797\";\n\n            /// <summary>\n            /// Gets the \"diving_mask\" emoji.\n            /// Description: Diving mask.\n            /// </summary>\n            public const string DivingMask = \"\\U0001F93F\";\n\n            /// <summary>\n            /// Gets the \"diya_lamp\" emoji.\n            /// Description: Diya lamp.\n            /// </summary>\n            public const string DiyaLamp = \"\\U0001FA94\";\n\n            /// <summary>\n            /// Gets the \"dizzy\" emoji.\n            /// Description: Dizzy.\n            /// </summary>\n            public const string Dizzy = \"\\U0001F4AB\";\n\n            /// <summary>\n            /// Gets the \"dna\" emoji.\n            /// Description: Dna.\n            /// </summary>\n            public const string Dna = \"\\U0001F9EC\";\n\n            /// <summary>\n            /// Gets the \"dodo\" emoji.\n            /// Description: Dodo.\n            /// </summary>\n            public const string Dodo = \"\\U0001F9A4\";\n\n            /// <summary>\n            /// Gets the \"dog\" emoji.\n            /// Description: Dog.\n            /// </summary>\n            public const string Dog = \"\\U0001F415\";\n\n            /// <summary>\n            /// Gets the \"dog_face\" emoji.\n            /// Description: Dog face.\n            /// </summary>\n            public const string DogFace = \"\\U0001F436\";\n\n            /// <summary>\n            /// Gets the \"dollar_banknote\" emoji.\n            /// Description: Dollar banknote.\n            /// </summary>\n            public const string DollarBanknote = \"\\U0001F4B5\";\n\n            /// <summary>\n            /// Gets the \"dolphin\" emoji.\n            /// Description: Dolphin.\n            /// </summary>\n            public const string Dolphin = \"\\U0001F42C\";\n\n            /// <summary>\n            /// Gets the \"door\" emoji.\n            /// Description: Door.\n            /// </summary>\n            public const string Door = \"\\U0001F6AA\";\n\n            /// <summary>\n            /// Gets the \"dotted_six_pointed_star\" emoji.\n            /// Description: dotted six pointed star.\n            /// </summary>\n            public const string DottedSixPointedStar = \"\\U0001F52F\";\n\n            /// <summary>\n            /// Gets the \"double_curly_loop\" emoji.\n            /// Description: Double curly loop.\n            /// </summary>\n            public const string DoubleCurlyLoop = \"\\U000027BF\";\n\n            /// <summary>\n            /// Gets the \"double_exclamation_mark\" emoji.\n            /// Description: Double exclamation mark.\n            /// </summary>\n            public const string DoubleExclamationMark = \"\\U0000203C\";\n\n            /// <summary>\n            /// Gets the \"doughnut\" emoji.\n            /// Description: Doughnut.\n            /// </summary>\n            public const string Doughnut = \"\\U0001F369\";\n\n            /// <summary>\n            /// Gets the \"dove\" emoji.\n            /// Description: Dove.\n            /// </summary>\n            public const string Dove = \"\\U0001F54A\";\n\n            /// <summary>\n            /// Gets the \"down_arrow\" emoji.\n            /// Description: Down arrow.\n            /// </summary>\n            public const string DownArrow = \"\\U00002B07\";\n\n            /// <summary>\n            /// Gets the \"downcast_face_with_sweat\" emoji.\n            /// Description: Downcast face with sweat.\n            /// </summary>\n            public const string DowncastFaceWithSweat = \"\\U0001F613\";\n\n            /// <summary>\n            /// Gets the \"down_left_arrow\" emoji.\n            /// Description: down left arrow.\n            /// </summary>\n            public const string DownLeftArrow = \"\\U00002199\";\n\n            /// <summary>\n            /// Gets the \"down_right_arrow\" emoji.\n            /// Description: down right arrow.\n            /// </summary>\n            public const string DownRightArrow = \"\\U00002198\";\n\n            /// <summary>\n            /// Gets the \"downwards_button\" emoji.\n            /// Description: Downwards button.\n            /// </summary>\n            public const string DownwardsButton = \"\\U0001F53D\";\n\n            /// <summary>\n            /// Gets the \"dragon\" emoji.\n            /// Description: Dragon.\n            /// </summary>\n            public const string Dragon = \"\\U0001F409\";\n\n            /// <summary>\n            /// Gets the \"dragon_face\" emoji.\n            /// Description: Dragon face.\n            /// </summary>\n            public const string DragonFace = \"\\U0001F432\";\n\n            /// <summary>\n            /// Gets the \"dress\" emoji.\n            /// Description: Dress.\n            /// </summary>\n            public const string Dress = \"\\U0001F457\";\n\n            /// <summary>\n            /// Gets the \"drooling_face\" emoji.\n            /// Description: Drooling face.\n            /// </summary>\n            public const string DroolingFace = \"\\U0001F924\";\n\n            /// <summary>\n            /// Gets the \"droplet\" emoji.\n            /// Description: Droplet.\n            /// </summary>\n            public const string Droplet = \"\\U0001F4A7\";\n\n            /// <summary>\n            /// Gets the \"drop_of_blood\" emoji.\n            /// Description: Drop of blood.\n            /// </summary>\n            public const string DropOfBlood = \"\\U0001FA78\";\n\n            /// <summary>\n            /// Gets the \"drum\" emoji.\n            /// Description: Drum.\n            /// </summary>\n            public const string Drum = \"\\U0001F941\";\n\n            /// <summary>\n            /// Gets the \"duck\" emoji.\n            /// Description: Duck.\n            /// </summary>\n            public const string Duck = \"\\U0001F986\";\n\n            /// <summary>\n            /// Gets the \"dumpling\" emoji.\n            /// Description: Dumpling.\n            /// </summary>\n            public const string Dumpling = \"\\U0001F95F\";\n\n            /// <summary>\n            /// Gets the \"dvd\" emoji.\n            /// Description: Dvd.\n            /// </summary>\n            public const string Dvd = \"\\U0001F4C0\";\n\n            /// <summary>\n            /// Gets the \"eagle\" emoji.\n            /// Description: Eagle.\n            /// </summary>\n            public const string Eagle = \"\\U0001F985\";\n\n            /// <summary>\n            /// Gets the \"ear\" emoji.\n            /// Description: Ear.\n            /// </summary>\n            public const string Ear = \"\\U0001F442\";\n\n            /// <summary>\n            /// Gets the \"ear_of_corn\" emoji.\n            /// Description: Ear of corn.\n            /// </summary>\n            public const string EarOfCorn = \"\\U0001F33D\";\n\n            /// <summary>\n            /// Gets the \"ear_with_hearing_aid\" emoji.\n            /// Description: Ear with hearing aid.\n            /// </summary>\n            public const string EarWithHearingAid = \"\\U0001F9BB\";\n\n            /// <summary>\n            /// Gets the \"egg\" emoji.\n            /// Description: Egg.\n            /// </summary>\n            public const string Egg = \"\\U0001F95A\";\n\n            /// <summary>\n            /// Gets the \"eggplant\" emoji.\n            /// Description: Eggplant.\n            /// </summary>\n            public const string Eggplant = \"\\U0001F346\";\n\n            /// <summary>\n            /// Gets the \"eight_o_clock\" emoji.\n            /// Description: Eight o clock.\n            /// </summary>\n            public const string EightOClock = \"\\U0001F557\";\n\n            /// <summary>\n            /// Gets the \"eight_pointed_star\" emoji.\n            /// Description: eight pointed star.\n            /// </summary>\n            public const string EightPointedStar = \"\\U00002734\";\n\n            /// <summary>\n            /// Gets the \"eight_spoked_asterisk\" emoji.\n            /// Description: eight spoked asterisk.\n            /// </summary>\n            public const string EightSpokedAsterisk = \"\\U00002733\";\n\n            /// <summary>\n            /// Gets the \"eight_thirty\" emoji.\n            /// Description: eight thirty.\n            /// </summary>\n            public const string EightThirty = \"\\U0001F563\";\n\n            /// <summary>\n            /// Gets the \"eject_button\" emoji.\n            /// Description: Eject button.\n            /// </summary>\n            public const string EjectButton = \"\\U000023CF\";\n\n            /// <summary>\n            /// Gets the \"electric_plug\" emoji.\n            /// Description: Electric plug.\n            /// </summary>\n            public const string ElectricPlug = \"\\U0001F50C\";\n\n            /// <summary>\n            /// Gets the \"elephant\" emoji.\n            /// Description: Elephant.\n            /// </summary>\n            public const string Elephant = \"\\U0001F418\";\n\n            /// <summary>\n            /// Gets the \"elevator\" emoji.\n            /// Description: Elevator.\n            /// </summary>\n            public const string Elevator = \"\\U0001F6D7\";\n\n            /// <summary>\n            /// Gets the \"eleven_o_clock\" emoji.\n            /// Description: Eleven o clock.\n            /// </summary>\n            public const string ElevenOClock = \"\\U0001F55A\";\n\n            /// <summary>\n            /// Gets the \"eleven_thirty\" emoji.\n            /// Description: eleven thirty.\n            /// </summary>\n            public const string ElevenThirty = \"\\U0001F566\";\n\n            /// <summary>\n            /// Gets the \"elf\" emoji.\n            /// Description: Elf.\n            /// </summary>\n            public const string Elf = \"\\U0001F9DD\";\n\n            /// <summary>\n            /// Gets the \"e_mail\" emoji.\n            /// Description: e mail.\n            /// </summary>\n            public const string EMail = \"\\U0001F4E7\";\n\n            /// <summary>\n            /// Gets the \"end_arrow\" emoji.\n            /// Description: END arrow.\n            /// </summary>\n            public const string EndArrow = \"\\U0001F51A\";\n\n            /// <summary>\n            /// Gets the \"envelope\" emoji.\n            /// Description: Envelope.\n            /// </summary>\n            public const string Envelope = \"\\U00002709\";\n\n            /// <summary>\n            /// Gets the \"envelope_with_arrow\" emoji.\n            /// Description: Envelope with arrow.\n            /// </summary>\n            public const string EnvelopeWithArrow = \"\\U0001F4E9\";\n\n            /// <summary>\n            /// Gets the \"euro_banknote\" emoji.\n            /// Description: Euro banknote.\n            /// </summary>\n            public const string EuroBanknote = \"\\U0001F4B6\";\n\n            /// <summary>\n            /// Gets the \"evergreen_tree\" emoji.\n            /// Description: Evergreen tree.\n            /// </summary>\n            public const string EvergreenTree = \"\\U0001F332\";\n\n            /// <summary>\n            /// Gets the \"ewe\" emoji.\n            /// Description: Ewe.\n            /// </summary>\n            public const string Ewe = \"\\U0001F411\";\n\n            /// <summary>\n            /// Gets the \"exclamation_question_mark\" emoji.\n            /// Description: Exclamation question mark.\n            /// </summary>\n            public const string ExclamationQuestionMark = \"\\U00002049\";\n\n            /// <summary>\n            /// Gets the \"exploding_head\" emoji.\n            /// Description: Exploding head.\n            /// </summary>\n            public const string ExplodingHead = \"\\U0001F92F\";\n\n            /// <summary>\n            /// Gets the \"expressionless_face\" emoji.\n            /// Description: Expressionless face.\n            /// </summary>\n            public const string ExpressionlessFace = \"\\U0001F611\";\n\n            /// <summary>\n            /// Gets the \"eye\" emoji.\n            /// Description: Eye.\n            /// </summary>\n            public const string Eye = \"\\U0001F441\";\n\n            /// <summary>\n            /// Gets the \"eyes\" emoji.\n            /// Description: Eyes.\n            /// </summary>\n            public const string Eyes = \"\\U0001F440\";\n\n            /// <summary>\n            /// Gets the \"face_blowing_a_kiss\" emoji.\n            /// Description: Face blowing a kiss.\n            /// </summary>\n            public const string FaceBlowingAKiss = \"\\U0001F618\";\n\n            /// <summary>\n            /// Gets the \"face_savoring_food\" emoji.\n            /// Description: Face savoring food.\n            /// </summary>\n            public const string FaceSavoringFood = \"\\U0001F60B\";\n\n            /// <summary>\n            /// Gets the \"face_screaming_in_fear\" emoji.\n            /// Description: Face screaming in fear.\n            /// </summary>\n            public const string FaceScreamingInFear = \"\\U0001F631\";\n\n            /// <summary>\n            /// Gets the \"face_vomiting\" emoji.\n            /// Description: Face vomiting.\n            /// </summary>\n            public const string FaceVomiting = \"\\U0001F92E\";\n\n            /// <summary>\n            /// Gets the \"face_with_hand_over_mouth\" emoji.\n            /// Description: Face with hand over mouth.\n            /// </summary>\n            public const string FaceWithHandOverMouth = \"\\U0001F92D\";\n\n            /// <summary>\n            /// Gets the \"face_with_head_bandage\" emoji.\n            /// Description: face with head bandage.\n            /// </summary>\n            public const string FaceWithHeadBandage = \"\\U0001F915\";\n\n            /// <summary>\n            /// Gets the \"face_with_medical_mask\" emoji.\n            /// Description: Face with medical mask.\n            /// </summary>\n            public const string FaceWithMedicalMask = \"\\U0001F637\";\n\n            /// <summary>\n            /// Gets the \"face_with_monocle\" emoji.\n            /// Description: Face with monocle.\n            /// </summary>\n            public const string FaceWithMonocle = \"\\U0001F9D0\";\n\n            /// <summary>\n            /// Gets the \"face_with_open_mouth\" emoji.\n            /// Description: Face with open mouth.\n            /// </summary>\n            public const string FaceWithOpenMouth = \"\\U0001F62E\";\n\n            /// <summary>\n            /// Gets the \"face_without_mouth\" emoji.\n            /// Description: Face without mouth.\n            /// </summary>\n            public const string FaceWithoutMouth = \"\\U0001F636\";\n\n            /// <summary>\n            /// Gets the \"face_with_raised_eyebrow\" emoji.\n            /// Description: Face with raised eyebrow.\n            /// </summary>\n            public const string FaceWithRaisedEyebrow = \"\\U0001F928\";\n\n            /// <summary>\n            /// Gets the \"face_with_rolling_eyes\" emoji.\n            /// Description: Face with rolling eyes.\n            /// </summary>\n            public const string FaceWithRollingEyes = \"\\U0001F644\";\n\n            /// <summary>\n            /// Gets the \"face_with_steam_from_nose\" emoji.\n            /// Description: Face with steam from nose.\n            /// </summary>\n            public const string FaceWithSteamFromNose = \"\\U0001F624\";\n\n            /// <summary>\n            /// Gets the \"face_with_symbols_on_mouth\" emoji.\n            /// Description: Face with symbols on mouth.\n            /// </summary>\n            public const string FaceWithSymbolsOnMouth = \"\\U0001F92C\";\n\n            /// <summary>\n            /// Gets the \"face_with_tears_of_joy\" emoji.\n            /// Description: Face with tears of joy.\n            /// </summary>\n            public const string FaceWithTearsOfJoy = \"\\U0001F602\";\n\n            /// <summary>\n            /// Gets the \"face_with_thermometer\" emoji.\n            /// Description: Face with thermometer.\n            /// </summary>\n            public const string FaceWithThermometer = \"\\U0001F912\";\n\n            /// <summary>\n            /// Gets the \"face_with_tongue\" emoji.\n            /// Description: Face with tongue.\n            /// </summary>\n            public const string FaceWithTongue = \"\\U0001F61B\";\n\n            /// <summary>\n            /// Gets the \"factory\" emoji.\n            /// Description: Factory.\n            /// </summary>\n            public const string Factory = \"\\U0001F3ED\";\n\n            /// <summary>\n            /// Gets the \"fairy\" emoji.\n            /// Description: Fairy.\n            /// </summary>\n            public const string Fairy = \"\\U0001F9DA\";\n\n            /// <summary>\n            /// Gets the \"falafel\" emoji.\n            /// Description: Falafel.\n            /// </summary>\n            public const string Falafel = \"\\U0001F9C6\";\n\n            /// <summary>\n            /// Gets the \"fallen_leaf\" emoji.\n            /// Description: Fallen leaf.\n            /// </summary>\n            public const string FallenLeaf = \"\\U0001F342\";\n\n            /// <summary>\n            /// Gets the \"family\" emoji.\n            /// Description: Family.\n            /// </summary>\n            public const string Family = \"\\U0001F46A\";\n\n            /// <summary>\n            /// Gets the \"fast_down_button\" emoji.\n            /// Description: Fast down button.\n            /// </summary>\n            public const string FastDownButton = \"\\U000023EC\";\n\n            /// <summary>\n            /// Gets the \"fast_forward_button\" emoji.\n            /// Description: fast forward button.\n            /// </summary>\n            public const string FastForwardButton = \"\\U000023E9\";\n\n            /// <summary>\n            /// Gets the \"fast_reverse_button\" emoji.\n            /// Description: Fast reverse button.\n            /// </summary>\n            public const string FastReverseButton = \"\\U000023EA\";\n\n            /// <summary>\n            /// Gets the \"fast_up_button\" emoji.\n            /// Description: Fast up button.\n            /// </summary>\n            public const string FastUpButton = \"\\U000023EB\";\n\n            /// <summary>\n            /// Gets the \"fax_machine\" emoji.\n            /// Description: Fax machine.\n            /// </summary>\n            public const string FaxMachine = \"\\U0001F4E0\";\n\n            /// <summary>\n            /// Gets the \"fearful_face\" emoji.\n            /// Description: Fearful face.\n            /// </summary>\n            public const string FearfulFace = \"\\U0001F628\";\n\n            /// <summary>\n            /// Gets the \"feather\" emoji.\n            /// Description: Feather.\n            /// </summary>\n            public const string Feather = \"\\U0001FAB6\";\n\n            /// <summary>\n            /// Gets the \"female_sign\" emoji.\n            /// Description: Female sign.\n            /// </summary>\n            public const string FemaleSign = \"\\U00002640\";\n\n            /// <summary>\n            /// Gets the \"ferris_wheel\" emoji.\n            /// Description: Ferris wheel.\n            /// </summary>\n            public const string FerrisWheel = \"\\U0001F3A1\";\n\n            /// <summary>\n            /// Gets the \"ferry\" emoji.\n            /// Description: Ferry.\n            /// </summary>\n            public const string Ferry = \"\\U000026F4\";\n\n            /// <summary>\n            /// Gets the \"field_hockey\" emoji.\n            /// Description: Field hockey.\n            /// </summary>\n            public const string FieldHockey = \"\\U0001F3D1\";\n\n            /// <summary>\n            /// Gets the \"file_cabinet\" emoji.\n            /// Description: File cabinet.\n            /// </summary>\n            public const string FileCabinet = \"\\U0001F5C4\";\n\n            /// <summary>\n            /// Gets the \"file_folder\" emoji.\n            /// Description: File folder.\n            /// </summary>\n            public const string FileFolder = \"\\U0001F4C1\";\n\n            /// <summary>\n            /// Gets the \"film_frames\" emoji.\n            /// Description: Film frames.\n            /// </summary>\n            public const string FilmFrames = \"\\U0001F39E\";\n\n            /// <summary>\n            /// Gets the \"film_projector\" emoji.\n            /// Description: Film projector.\n            /// </summary>\n            public const string FilmProjector = \"\\U0001F4FD\";\n\n            /// <summary>\n            /// Gets the \"fire\" emoji.\n            /// Description: Fire.\n            /// </summary>\n            public const string Fire = \"\\U0001F525\";\n\n            /// <summary>\n            /// Gets the \"firecracker\" emoji.\n            /// Description: Firecracker.\n            /// </summary>\n            public const string Firecracker = \"\\U0001F9E8\";\n\n            /// <summary>\n            /// Gets the \"fire_engine\" emoji.\n            /// Description: Fire engine.\n            /// </summary>\n            public const string FireEngine = \"\\U0001F692\";\n\n            /// <summary>\n            /// Gets the \"fire_extinguisher\" emoji.\n            /// Description: Fire extinguisher.\n            /// </summary>\n            public const string FireExtinguisher = \"\\U0001F9EF\";\n\n            /// <summary>\n            /// Gets the \"fireworks\" emoji.\n            /// Description: Fireworks.\n            /// </summary>\n            public const string Fireworks = \"\\U0001F386\";\n\n            /// <summary>\n            /// Gets the \"1st_place_medal\" emoji.\n            /// Description: 1st place medal.\n            /// </summary>\n            public const string FirstPlaceMedal = \"\\U0001F947\";\n\n            /// <summary>\n            /// Gets the \"first_quarter_moon\" emoji.\n            /// Description: First quarter moon.\n            /// </summary>\n            public const string FirstQuarterMoon = \"\\U0001F313\";\n\n            /// <summary>\n            /// Gets the \"first_quarter_moon_face\" emoji.\n            /// Description: First quarter moon face.\n            /// </summary>\n            public const string FirstQuarterMoonFace = \"\\U0001F31B\";\n\n            /// <summary>\n            /// Gets the \"fish\" emoji.\n            /// Description: Fish.\n            /// </summary>\n            public const string Fish = \"\\U0001F41F\";\n\n            /// <summary>\n            /// Gets the \"fish_cake_with_swirl\" emoji.\n            /// Description: Fish cake with swirl.\n            /// </summary>\n            public const string FishCakeWithSwirl = \"\\U0001F365\";\n\n            /// <summary>\n            /// Gets the \"fishing_pole\" emoji.\n            /// Description: Fishing pole.\n            /// </summary>\n            public const string FishingPole = \"\\U0001F3A3\";\n\n            /// <summary>\n            /// Gets the \"five_o_clock\" emoji.\n            /// Description: Five o clock.\n            /// </summary>\n            public const string FiveOClock = \"\\U0001F554\";\n\n            /// <summary>\n            /// Gets the \"five_thirty\" emoji.\n            /// Description: five thirty.\n            /// </summary>\n            public const string FiveThirty = \"\\U0001F560\";\n\n            /// <summary>\n            /// Gets the \"flag_in_hole\" emoji.\n            /// Description: Flag in hole.\n            /// </summary>\n            public const string FlagInHole = \"\\U000026F3\";\n\n            /// <summary>\n            /// Gets the \"flamingo\" emoji.\n            /// Description: Flamingo.\n            /// </summary>\n            public const string Flamingo = \"\\U0001F9A9\";\n\n            /// <summary>\n            /// Gets the \"flashlight\" emoji.\n            /// Description: Flashlight.\n            /// </summary>\n            public const string Flashlight = \"\\U0001F526\";\n\n            /// <summary>\n            /// Gets the \"flatbread\" emoji.\n            /// Description: Flatbread.\n            /// </summary>\n            public const string Flatbread = \"\\U0001FAD3\";\n\n            /// <summary>\n            /// Gets the \"flat_shoe\" emoji.\n            /// Description: Flat shoe.\n            /// </summary>\n            public const string FlatShoe = \"\\U0001F97F\";\n\n            /// <summary>\n            /// Gets the \"fleur_de_lis\" emoji.\n            /// Description: fleur de lis.\n            /// </summary>\n            public const string FleurDeLis = \"\\U0000269C\";\n\n            /// <summary>\n            /// Gets the \"flexed_biceps\" emoji.\n            /// Description: Flexed biceps.\n            /// </summary>\n            public const string FlexedBiceps = \"\\U0001F4AA\";\n\n            /// <summary>\n            /// Gets the \"floppy_disk\" emoji.\n            /// Description: Floppy disk.\n            /// </summary>\n            public const string FloppyDisk = \"\\U0001F4BE\";\n\n            /// <summary>\n            /// Gets the \"flower_playing_cards\" emoji.\n            /// Description: Flower playing cards.\n            /// </summary>\n            public const string FlowerPlayingCards = \"\\U0001F3B4\";\n\n            /// <summary>\n            /// Gets the \"flushed_face\" emoji.\n            /// Description: Flushed face.\n            /// </summary>\n            public const string FlushedFace = \"\\U0001F633\";\n\n            /// <summary>\n            /// Gets the \"fly\" emoji.\n            /// Description: Fly.\n            /// </summary>\n            public const string Fly = \"\\U0001FAB0\";\n\n            /// <summary>\n            /// Gets the \"flying_disc\" emoji.\n            /// Description: Flying disc.\n            /// </summary>\n            public const string FlyingDisc = \"\\U0001F94F\";\n\n            /// <summary>\n            /// Gets the \"flying_saucer\" emoji.\n            /// Description: Flying saucer.\n            /// </summary>\n            public const string FlyingSaucer = \"\\U0001F6F8\";\n\n            /// <summary>\n            /// Gets the \"fog\" emoji.\n            /// Description: Fog.\n            /// </summary>\n            public const string Fog = \"\\U0001F32B\";\n\n            /// <summary>\n            /// Gets the \"foggy\" emoji.\n            /// Description: Foggy.\n            /// </summary>\n            public const string Foggy = \"\\U0001F301\";\n\n            /// <summary>\n            /// Gets the \"folded_hands\" emoji.\n            /// Description: Folded hands.\n            /// </summary>\n            public const string FoldedHands = \"\\U0001F64F\";\n\n            /// <summary>\n            /// Gets the \"fondue\" emoji.\n            /// Description: Fondue.\n            /// </summary>\n            public const string Fondue = \"\\U0001FAD5\";\n\n            /// <summary>\n            /// Gets the \"foot\" emoji.\n            /// Description: Foot.\n            /// </summary>\n            public const string Foot = \"\\U0001F9B6\";\n\n            /// <summary>\n            /// Gets the \"footprints\" emoji.\n            /// Description: Footprints.\n            /// </summary>\n            public const string Footprints = \"\\U0001F463\";\n\n            /// <summary>\n            /// Gets the \"fork_and_knife\" emoji.\n            /// Description: Fork and knife.\n            /// </summary>\n            public const string ForkAndKnife = \"\\U0001F374\";\n\n            /// <summary>\n            /// Gets the \"fork_and_knife_with_plate\" emoji.\n            /// Description: Fork and knife with plate.\n            /// </summary>\n            public const string ForkAndKnifeWithPlate = \"\\U0001F37D\";\n\n            /// <summary>\n            /// Gets the \"fortune_cookie\" emoji.\n            /// Description: Fortune cookie.\n            /// </summary>\n            public const string FortuneCookie = \"\\U0001F960\";\n\n            /// <summary>\n            /// Gets the \"fountain\" emoji.\n            /// Description: Fountain.\n            /// </summary>\n            public const string Fountain = \"\\U000026F2\";\n\n            /// <summary>\n            /// Gets the \"fountain_pen\" emoji.\n            /// Description: Fountain pen.\n            /// </summary>\n            public const string FountainPen = \"\\U0001F58B\";\n\n            /// <summary>\n            /// Gets the \"four_leaf_clover\" emoji.\n            /// Description: Four leaf clover.\n            /// </summary>\n            public const string FourLeafClover = \"\\U0001F340\";\n\n            /// <summary>\n            /// Gets the \"four_o_clock\" emoji.\n            /// Description: Four o clock.\n            /// </summary>\n            public const string FourOClock = \"\\U0001F553\";\n\n            /// <summary>\n            /// Gets the \"four_thirty\" emoji.\n            /// Description: four thirty.\n            /// </summary>\n            public const string FourThirty = \"\\U0001F55F\";\n\n            /// <summary>\n            /// Gets the \"fox\" emoji.\n            /// Description: Fox.\n            /// </summary>\n            public const string Fox = \"\\U0001F98A\";\n\n            /// <summary>\n            /// Gets the \"framed_picture\" emoji.\n            /// Description: Framed picture.\n            /// </summary>\n            public const string FramedPicture = \"\\U0001F5BC\";\n\n            /// <summary>\n            /// Gets the \"free_button\" emoji.\n            /// Description: FREE button.\n            /// </summary>\n            public const string FreeButton = \"\\U0001F193\";\n\n            /// <summary>\n            /// Gets the \"french_fries\" emoji.\n            /// Description: French fries.\n            /// </summary>\n            public const string FrenchFries = \"\\U0001F35F\";\n\n            /// <summary>\n            /// Gets the \"fried_shrimp\" emoji.\n            /// Description: Fried shrimp.\n            /// </summary>\n            public const string FriedShrimp = \"\\U0001F364\";\n\n            /// <summary>\n            /// Gets the \"frog\" emoji.\n            /// Description: Frog.\n            /// </summary>\n            public const string Frog = \"\\U0001F438\";\n\n            /// <summary>\n            /// Gets the \"front_facing_baby_chick\" emoji.\n            /// Description: front facing baby chick.\n            /// </summary>\n            public const string FrontFacingBabyChick = \"\\U0001F425\";\n\n            /// <summary>\n            /// Gets the \"frowning_face\" emoji.\n            /// Description: Frowning face.\n            /// </summary>\n            public const string FrowningFace = \"\\U00002639\";\n\n            /// <summary>\n            /// Gets the \"frowning_face_with_open_mouth\" emoji.\n            /// Description: Frowning face with open mouth.\n            /// </summary>\n            public const string FrowningFaceWithOpenMouth = \"\\U0001F626\";\n\n            /// <summary>\n            /// Gets the \"fuel_pump\" emoji.\n            /// Description: Fuel pump.\n            /// </summary>\n            public const string FuelPump = \"\\U000026FD\";\n\n            /// <summary>\n            /// Gets the \"full_moon\" emoji.\n            /// Description: Full moon.\n            /// </summary>\n            public const string FullMoon = \"\\U0001F315\";\n\n            /// <summary>\n            /// Gets the \"full_moon_face\" emoji.\n            /// Description: Full moon face.\n            /// </summary>\n            public const string FullMoonFace = \"\\U0001F31D\";\n\n            /// <summary>\n            /// Gets the \"funeral_urn\" emoji.\n            /// Description: Funeral urn.\n            /// </summary>\n            public const string FuneralUrn = \"\\U000026B1\";\n\n            /// <summary>\n            /// Gets the \"game_die\" emoji.\n            /// Description: Game die.\n            /// </summary>\n            public const string GameDie = \"\\U0001F3B2\";\n\n            /// <summary>\n            /// Gets the \"garlic\" emoji.\n            /// Description: Garlic.\n            /// </summary>\n            public const string Garlic = \"\\U0001F9C4\";\n\n            /// <summary>\n            /// Gets the \"gear\" emoji.\n            /// Description: Gear.\n            /// </summary>\n            public const string Gear = \"\\U00002699\";\n\n            /// <summary>\n            /// Gets the \"gemini\" emoji.\n            /// Description: Gemini.\n            /// </summary>\n            public const string Gemini = \"\\U0000264A\";\n\n            /// <summary>\n            /// Gets the \"gem_stone\" emoji.\n            /// Description: Gem stone.\n            /// </summary>\n            public const string GemStone = \"\\U0001F48E\";\n\n            /// <summary>\n            /// Gets the \"genie\" emoji.\n            /// Description: Genie.\n            /// </summary>\n            public const string Genie = \"\\U0001F9DE\";\n\n            /// <summary>\n            /// Gets the \"ghost\" emoji.\n            /// Description: Ghost.\n            /// </summary>\n            public const string Ghost = \"\\U0001F47B\";\n\n            /// <summary>\n            /// Gets the \"giraffe\" emoji.\n            /// Description: Giraffe.\n            /// </summary>\n            public const string Giraffe = \"\\U0001F992\";\n\n            /// <summary>\n            /// Gets the \"girl\" emoji.\n            /// Description: Girl.\n            /// </summary>\n            public const string Girl = \"\\U0001F467\";\n\n            /// <summary>\n            /// Gets the \"glasses\" emoji.\n            /// Description: Glasses.\n            /// </summary>\n            public const string Glasses = \"\\U0001F453\";\n\n            /// <summary>\n            /// Gets the \"glass_of_milk\" emoji.\n            /// Description: Glass of milk.\n            /// </summary>\n            public const string GlassOfMilk = \"\\U0001F95B\";\n\n            /// <summary>\n            /// Gets the \"globe_showing_americas\" emoji.\n            /// Description: Globe showing americas.\n            /// </summary>\n            public const string GlobeShowingAmericas = \"\\U0001F30E\";\n\n            /// <summary>\n            /// Gets the \"globe_showing_asia_australia\" emoji.\n            /// Description: globe showing Asia Australia.\n            /// </summary>\n            public const string GlobeShowingAsiaAustralia = \"\\U0001F30F\";\n\n            /// <summary>\n            /// Gets the \"globe_showing_europe_africa\" emoji.\n            /// Description: globe showing Europe Africa.\n            /// </summary>\n            public const string GlobeShowingEuropeAfrica = \"\\U0001F30D\";\n\n            /// <summary>\n            /// Gets the \"globe_with_meridians\" emoji.\n            /// Description: Globe with meridians.\n            /// </summary>\n            public const string GlobeWithMeridians = \"\\U0001F310\";\n\n            /// <summary>\n            /// Gets the \"gloves\" emoji.\n            /// Description: Gloves.\n            /// </summary>\n            public const string Gloves = \"\\U0001F9E4\";\n\n            /// <summary>\n            /// Gets the \"glowing_star\" emoji.\n            /// Description: Glowing star.\n            /// </summary>\n            public const string GlowingStar = \"\\U0001F31F\";\n\n            /// <summary>\n            /// Gets the \"goal_net\" emoji.\n            /// Description: Goal net.\n            /// </summary>\n            public const string GoalNet = \"\\U0001F945\";\n\n            /// <summary>\n            /// Gets the \"goat\" emoji.\n            /// Description: Goat.\n            /// </summary>\n            public const string Goat = \"\\U0001F410\";\n\n            /// <summary>\n            /// Gets the \"goblin\" emoji.\n            /// Description: Goblin.\n            /// </summary>\n            public const string Goblin = \"\\U0001F47A\";\n\n            /// <summary>\n            /// Gets the \"goggles\" emoji.\n            /// Description: Goggles.\n            /// </summary>\n            public const string Goggles = \"\\U0001F97D\";\n\n            /// <summary>\n            /// Gets the \"gorilla\" emoji.\n            /// Description: Gorilla.\n            /// </summary>\n            public const string Gorilla = \"\\U0001F98D\";\n\n            /// <summary>\n            /// Gets the \"graduation_cap\" emoji.\n            /// Description: Graduation cap.\n            /// </summary>\n            public const string GraduationCap = \"\\U0001F393\";\n\n            /// <summary>\n            /// Gets the \"grapes\" emoji.\n            /// Description: Grapes.\n            /// </summary>\n            public const string Grapes = \"\\U0001F347\";\n\n            /// <summary>\n            /// Gets the \"green_apple\" emoji.\n            /// Description: Green apple.\n            /// </summary>\n            public const string GreenApple = \"\\U0001F34F\";\n\n            /// <summary>\n            /// Gets the \"green_book\" emoji.\n            /// Description: Green book.\n            /// </summary>\n            public const string GreenBook = \"\\U0001F4D7\";\n\n            /// <summary>\n            /// Gets the \"green_circle\" emoji.\n            /// Description: Green circle.\n            /// </summary>\n            public const string GreenCircle = \"\\U0001F7E2\";\n\n            /// <summary>\n            /// Gets the \"green_heart\" emoji.\n            /// Description: Green heart.\n            /// </summary>\n            public const string GreenHeart = \"\\U0001F49A\";\n\n            /// <summary>\n            /// Gets the \"green_salad\" emoji.\n            /// Description: Green salad.\n            /// </summary>\n            public const string GreenSalad = \"\\U0001F957\";\n\n            /// <summary>\n            /// Gets the \"green_square\" emoji.\n            /// Description: Green square.\n            /// </summary>\n            public const string GreenSquare = \"\\U0001F7E9\";\n\n            /// <summary>\n            /// Gets the \"grimacing_face\" emoji.\n            /// Description: Grimacing face.\n            /// </summary>\n            public const string GrimacingFace = \"\\U0001F62C\";\n\n            /// <summary>\n            /// Gets the \"grinning_cat\" emoji.\n            /// Description: Grinning cat.\n            /// </summary>\n            public const string GrinningCat = \"\\U0001F63A\";\n\n            /// <summary>\n            /// Gets the \"grinning_cat_with_smiling_eyes\" emoji.\n            /// Description: Grinning cat with smiling eyes.\n            /// </summary>\n            public const string GrinningCatWithSmilingEyes = \"\\U0001F638\";\n\n            /// <summary>\n            /// Gets the \"grinning_face\" emoji.\n            /// Description: Grinning face.\n            /// </summary>\n            public const string GrinningFace = \"\\U0001F600\";\n\n            /// <summary>\n            /// Gets the \"grinning_face_with_big_eyes\" emoji.\n            /// Description: Grinning face with big eyes.\n            /// </summary>\n            public const string GrinningFaceWithBigEyes = \"\\U0001F603\";\n\n            /// <summary>\n            /// Gets the \"grinning_face_with_smiling_eyes\" emoji.\n            /// Description: Grinning face with smiling eyes.\n            /// </summary>\n            public const string GrinningFaceWithSmilingEyes = \"\\U0001F604\";\n\n            /// <summary>\n            /// Gets the \"grinning_face_with_sweat\" emoji.\n            /// Description: Grinning face with sweat.\n            /// </summary>\n            public const string GrinningFaceWithSweat = \"\\U0001F605\";\n\n            /// <summary>\n            /// Gets the \"grinning_squinting_face\" emoji.\n            /// Description: Grinning squinting face.\n            /// </summary>\n            public const string GrinningSquintingFace = \"\\U0001F606\";\n\n            /// <summary>\n            /// Gets the \"growing_heart\" emoji.\n            /// Description: Growing heart.\n            /// </summary>\n            public const string GrowingHeart = \"\\U0001F497\";\n\n            /// <summary>\n            /// Gets the \"guard\" emoji.\n            /// Description: Guard.\n            /// </summary>\n            public const string Guard = \"\\U0001F482\";\n\n            /// <summary>\n            /// Gets the \"guide_dog\" emoji.\n            /// Description: Guide dog.\n            /// </summary>\n            public const string GuideDog = \"\\U0001F9AE\";\n\n            /// <summary>\n            /// Gets the \"guitar\" emoji.\n            /// Description: Guitar.\n            /// </summary>\n            public const string Guitar = \"\\U0001F3B8\";\n\n            /// <summary>\n            /// Gets the \"hamburger\" emoji.\n            /// Description: Hamburger.\n            /// </summary>\n            public const string Hamburger = \"\\U0001F354\";\n\n            /// <summary>\n            /// Gets the \"hammer\" emoji.\n            /// Description: Hammer.\n            /// </summary>\n            public const string Hammer = \"\\U0001F528\";\n\n            /// <summary>\n            /// Gets the \"hammer_and_pick\" emoji.\n            /// Description: Hammer and pick.\n            /// </summary>\n            public const string HammerAndPick = \"\\U00002692\";\n\n            /// <summary>\n            /// Gets the \"hammer_and_wrench\" emoji.\n            /// Description: Hammer and wrench.\n            /// </summary>\n            public const string HammerAndWrench = \"\\U0001F6E0\";\n\n            /// <summary>\n            /// Gets the \"hamster\" emoji.\n            /// Description: Hamster.\n            /// </summary>\n            public const string Hamster = \"\\U0001F439\";\n\n            /// <summary>\n            /// Gets the \"handbag\" emoji.\n            /// Description: Handbag.\n            /// </summary>\n            public const string Handbag = \"\\U0001F45C\";\n\n            /// <summary>\n            /// Gets the \"handshake\" emoji.\n            /// Description: Handshake.\n            /// </summary>\n            public const string Handshake = \"\\U0001F91D\";\n\n            /// <summary>\n            /// Gets the \"hand_with_fingers_splayed\" emoji.\n            /// Description: Hand with fingers splayed.\n            /// </summary>\n            public const string HandWithFingersSplayed = \"\\U0001F590\";\n\n            /// <summary>\n            /// Gets the \"hatching_chick\" emoji.\n            /// Description: Hatching chick.\n            /// </summary>\n            public const string HatchingChick = \"\\U0001F423\";\n\n            /// <summary>\n            /// Gets the \"headphone\" emoji.\n            /// Description: Headphone.\n            /// </summary>\n            public const string Headphone = \"\\U0001F3A7\";\n\n            /// <summary>\n            /// Gets the \"headstone\" emoji.\n            /// Description: Headstone.\n            /// </summary>\n            public const string Headstone = \"\\U0001FAA6\";\n\n            /// <summary>\n            /// Gets the \"hear_no_evil_monkey\" emoji.\n            /// Description: hear no evil monkey.\n            /// </summary>\n            public const string HearNoEvilMonkey = \"\\U0001F649\";\n\n            /// <summary>\n            /// Gets the \"heart_decoration\" emoji.\n            /// Description: Heart decoration.\n            /// </summary>\n            public const string HeartDecoration = \"\\U0001F49F\";\n\n            /// <summary>\n            /// Gets the \"heart_exclamation\" emoji.\n            /// Description: Heart exclamation.\n            /// </summary>\n            public const string HeartExclamation = \"\\U00002763\";\n\n            /// <summary>\n            /// Gets the \"heart_suit\" emoji.\n            /// Description: Heart suit.\n            /// </summary>\n            public const string HeartSuit = \"\\U00002665\";\n\n            /// <summary>\n            /// Gets the \"heart_with_arrow\" emoji.\n            /// Description: Heart with arrow.\n            /// </summary>\n            public const string HeartWithArrow = \"\\U0001F498\";\n\n            /// <summary>\n            /// Gets the \"heart_with_ribbon\" emoji.\n            /// Description: Heart with ribbon.\n            /// </summary>\n            public const string HeartWithRibbon = \"\\U0001F49D\";\n\n            /// <summary>\n            /// Gets the \"heavy_dollar_sign\" emoji.\n            /// Description: Heavy dollar sign.\n            /// </summary>\n            public const string HeavyDollarSign = \"\\U0001F4B2\";\n\n            /// <summary>\n            /// Gets the \"hedgehog\" emoji.\n            /// Description: Hedgehog.\n            /// </summary>\n            public const string Hedgehog = \"\\U0001F994\";\n\n            /// <summary>\n            /// Gets the \"helicopter\" emoji.\n            /// Description: Helicopter.\n            /// </summary>\n            public const string Helicopter = \"\\U0001F681\";\n\n            /// <summary>\n            /// Gets the \"herb\" emoji.\n            /// Description: Herb.\n            /// </summary>\n            public const string Herb = \"\\U0001F33F\";\n\n            /// <summary>\n            /// Gets the \"hibiscus\" emoji.\n            /// Description: Hibiscus.\n            /// </summary>\n            public const string Hibiscus = \"\\U0001F33A\";\n\n            /// <summary>\n            /// Gets the \"high_heeled_shoe\" emoji.\n            /// Description: high heeled shoe.\n            /// </summary>\n            public const string HighHeeledShoe = \"\\U0001F460\";\n\n            /// <summary>\n            /// Gets the \"high_speed_train\" emoji.\n            /// Description: high speed train.\n            /// </summary>\n            public const string HighSpeedTrain = \"\\U0001F684\";\n\n            /// <summary>\n            /// Gets the \"high_voltage\" emoji.\n            /// Description: High voltage.\n            /// </summary>\n            public const string HighVoltage = \"\\U000026A1\";\n\n            /// <summary>\n            /// Gets the \"hiking_boot\" emoji.\n            /// Description: Hiking boot.\n            /// </summary>\n            public const string HikingBoot = \"\\U0001F97E\";\n\n            /// <summary>\n            /// Gets the \"hindu_temple\" emoji.\n            /// Description: Hindu temple.\n            /// </summary>\n            public const string HinduTemple = \"\\U0001F6D5\";\n\n            /// <summary>\n            /// Gets the \"hippopotamus\" emoji.\n            /// Description: Hippopotamus.\n            /// </summary>\n            public const string Hippopotamus = \"\\U0001F99B\";\n\n            /// <summary>\n            /// Gets the \"hole\" emoji.\n            /// Description: Hole.\n            /// </summary>\n            public const string Hole = \"\\U0001F573\";\n\n            /// <summary>\n            /// Gets the \"hollow_red_circle\" emoji.\n            /// Description: Hollow red circle.\n            /// </summary>\n            public const string HollowRedCircle = \"\\U00002B55\";\n\n            /// <summary>\n            /// Gets the \"honeybee\" emoji.\n            /// Description: Honeybee.\n            /// </summary>\n            public const string Honeybee = \"\\U0001F41D\";\n\n            /// <summary>\n            /// Gets the \"honey_pot\" emoji.\n            /// Description: Honey pot.\n            /// </summary>\n            public const string HoneyPot = \"\\U0001F36F\";\n\n            /// <summary>\n            /// Gets the \"hook\" emoji.\n            /// Description: Hook.\n            /// </summary>\n            public const string Hook = \"\\U0001FA9D\";\n\n            /// <summary>\n            /// Gets the \"horizontal_traffic_light\" emoji.\n            /// Description: Horizontal traffic light.\n            /// </summary>\n            public const string HorizontalTrafficLight = \"\\U0001F6A5\";\n\n            /// <summary>\n            /// Gets the \"horse\" emoji.\n            /// Description: Horse.\n            /// </summary>\n            public const string Horse = \"\\U0001F40E\";\n\n            /// <summary>\n            /// Gets the \"horse_face\" emoji.\n            /// Description: Horse face.\n            /// </summary>\n            public const string HorseFace = \"\\U0001F434\";\n\n            /// <summary>\n            /// Gets the \"horse_racing\" emoji.\n            /// Description: Horse racing.\n            /// </summary>\n            public const string HorseRacing = \"\\U0001F3C7\";\n\n            /// <summary>\n            /// Gets the \"hospital\" emoji.\n            /// Description: Hospital.\n            /// </summary>\n            public const string Hospital = \"\\U0001F3E5\";\n\n            /// <summary>\n            /// Gets the \"hot_beverage\" emoji.\n            /// Description: Hot beverage.\n            /// </summary>\n            public const string HotBeverage = \"\\U00002615\";\n\n            /// <summary>\n            /// Gets the \"hot_dog\" emoji.\n            /// Description: Hot dog.\n            /// </summary>\n            public const string HotDog = \"\\U0001F32D\";\n\n            /// <summary>\n            /// Gets the \"hotel\" emoji.\n            /// Description: Hotel.\n            /// </summary>\n            public const string Hotel = \"\\U0001F3E8\";\n\n            /// <summary>\n            /// Gets the \"hot_face\" emoji.\n            /// Description: Hot face.\n            /// </summary>\n            public const string HotFace = \"\\U0001F975\";\n\n            /// <summary>\n            /// Gets the \"hot_pepper\" emoji.\n            /// Description: Hot pepper.\n            /// </summary>\n            public const string HotPepper = \"\\U0001F336\";\n\n            /// <summary>\n            /// Gets the \"hot_springs\" emoji.\n            /// Description: Hot springs.\n            /// </summary>\n            public const string HotSprings = \"\\U00002668\";\n\n            /// <summary>\n            /// Gets the \"hourglass_done\" emoji.\n            /// Description: Hourglass done.\n            /// </summary>\n            public const string HourglassDone = \"\\U0000231B\";\n\n            /// <summary>\n            /// Gets the \"hourglass_not_done\" emoji.\n            /// Description: Hourglass not done.\n            /// </summary>\n            public const string HourglassNotDone = \"\\U000023F3\";\n\n            /// <summary>\n            /// Gets the \"house\" emoji.\n            /// Description: House.\n            /// </summary>\n            public const string House = \"\\U0001F3E0\";\n\n            /// <summary>\n            /// Gets the \"houses\" emoji.\n            /// Description: Houses.\n            /// </summary>\n            public const string Houses = \"\\U0001F3D8\";\n\n            /// <summary>\n            /// Gets the \"house_with_garden\" emoji.\n            /// Description: House with garden.\n            /// </summary>\n            public const string HouseWithGarden = \"\\U0001F3E1\";\n\n            /// <summary>\n            /// Gets the \"hugging_face\" emoji.\n            /// Description: Hugging face.\n            /// </summary>\n            public const string HuggingFace = \"\\U0001F917\";\n\n            /// <summary>\n            /// Gets the \"hundred_points\" emoji.\n            /// Description: Hundred points.\n            /// </summary>\n            public const string HundredPoints = \"\\U0001F4AF\";\n\n            /// <summary>\n            /// Gets the \"hushed_face\" emoji.\n            /// Description: Hushed face.\n            /// </summary>\n            public const string HushedFace = \"\\U0001F62F\";\n\n            /// <summary>\n            /// Gets the \"hut\" emoji.\n            /// Description: Hut.\n            /// </summary>\n            public const string Hut = \"\\U0001F6D6\";\n\n            /// <summary>\n            /// Gets the \"ice\" emoji.\n            /// Description: Ice.\n            /// </summary>\n            public const string Ice = \"\\U0001F9CA\";\n\n            /// <summary>\n            /// Gets the \"ice_cream\" emoji.\n            /// Description: Ice cream.\n            /// </summary>\n            public const string IceCream = \"\\U0001F368\";\n\n            /// <summary>\n            /// Gets the \"ice_hockey\" emoji.\n            /// Description: Ice hockey.\n            /// </summary>\n            public const string IceHockey = \"\\U0001F3D2\";\n\n            /// <summary>\n            /// Gets the \"ice_skate\" emoji.\n            /// Description: Ice skate.\n            /// </summary>\n            public const string IceSkate = \"\\U000026F8\";\n\n            /// <summary>\n            /// Gets the \"id_button\" emoji.\n            /// Description: ID button.\n            /// </summary>\n            public const string IdButton = \"\\U0001F194\";\n\n            /// <summary>\n            /// Gets the \"inbox_tray\" emoji.\n            /// Description: Inbox tray.\n            /// </summary>\n            public const string InboxTray = \"\\U0001F4E5\";\n\n            /// <summary>\n            /// Gets the \"incoming_envelope\" emoji.\n            /// Description: Incoming envelope.\n            /// </summary>\n            public const string IncomingEnvelope = \"\\U0001F4E8\";\n\n            /// <summary>\n            /// Gets the \"index_pointing_up\" emoji.\n            /// Description: Index pointing up.\n            /// </summary>\n            public const string IndexPointingUp = \"\\U0000261D\";\n\n            /// <summary>\n            /// Gets the \"infinity\" emoji.\n            /// Description: Infinity.\n            /// </summary>\n            public const string Infinity = \"\\U0000267E\";\n\n            /// <summary>\n            /// Gets the \"information\" emoji.\n            /// Description: Information.\n            /// </summary>\n            public const string Information = \"\\U00002139\";\n\n            /// <summary>\n            /// Gets the \"input_latin_letters\" emoji.\n            /// Description: Input latin letters.\n            /// </summary>\n            public const string InputLatinLetters = \"\\U0001F524\";\n\n            /// <summary>\n            /// Gets the \"input_latin_lowercase\" emoji.\n            /// Description: Input latin lowercase.\n            /// </summary>\n            public const string InputLatinLowercase = \"\\U0001F521\";\n\n            /// <summary>\n            /// Gets the \"input_latin_uppercase\" emoji.\n            /// Description: Input latin uppercase.\n            /// </summary>\n            public const string InputLatinUppercase = \"\\U0001F520\";\n\n            /// <summary>\n            /// Gets the \"input_numbers\" emoji.\n            /// Description: Input numbers.\n            /// </summary>\n            public const string InputNumbers = \"\\U0001F522\";\n\n            /// <summary>\n            /// Gets the \"input_symbols\" emoji.\n            /// Description: Input symbols.\n            /// </summary>\n            public const string InputSymbols = \"\\U0001F523\";\n\n            /// <summary>\n            /// Gets the \"jack_o_lantern\" emoji.\n            /// Description: jack o lantern.\n            /// </summary>\n            public const string JackOLantern = \"\\U0001F383\";\n\n            /// <summary>\n            /// Gets the \"japanese_acceptable_button\" emoji.\n            /// Description: Japanese acceptable button.\n            /// </summary>\n            public const string JapaneseAcceptableButton = \"\\U0001F251\";\n\n            /// <summary>\n            /// Gets the \"japanese_application_button\" emoji.\n            /// Description: Japanese application button.\n            /// </summary>\n            public const string JapaneseApplicationButton = \"\\U0001F238\";\n\n            /// <summary>\n            /// Gets the \"japanese_bargain_button\" emoji.\n            /// Description: Japanese bargain button.\n            /// </summary>\n            public const string JapaneseBargainButton = \"\\U0001F250\";\n\n            /// <summary>\n            /// Gets the \"japanese_castle\" emoji.\n            /// Description: Japanese castle.\n            /// </summary>\n            public const string JapaneseCastle = \"\\U0001F3EF\";\n\n            /// <summary>\n            /// Gets the \"japanese_congratulations_button\" emoji.\n            /// Description: Japanese congratulations button.\n            /// </summary>\n            public const string JapaneseCongratulationsButton = \"\\U00003297\";\n\n            /// <summary>\n            /// Gets the \"japanese_discount_button\" emoji.\n            /// Description: Japanese discount button.\n            /// </summary>\n            public const string JapaneseDiscountButton = \"\\U0001F239\";\n\n            /// <summary>\n            /// Gets the \"japanese_dolls\" emoji.\n            /// Description: Japanese dolls.\n            /// </summary>\n            public const string JapaneseDolls = \"\\U0001F38E\";\n\n            /// <summary>\n            /// Gets the \"japanese_free_of_charge_button\" emoji.\n            /// Description: Japanese free of charge button.\n            /// </summary>\n            public const string JapaneseFreeOfChargeButton = \"\\U0001F21A\";\n\n            /// <summary>\n            /// Gets the \"japanese_here_button\" emoji.\n            /// Description: Japanese here button.\n            /// </summary>\n            public const string JapaneseHereButton = \"\\U0001F201\";\n\n            /// <summary>\n            /// Gets the \"japanese_monthly_amount_button\" emoji.\n            /// Description: Japanese monthly amount button.\n            /// </summary>\n            public const string JapaneseMonthlyAmountButton = \"\\U0001F237\";\n\n            /// <summary>\n            /// Gets the \"japanese_not_free_of_charge_button\" emoji.\n            /// Description: Japanese not free of charge button.\n            /// </summary>\n            public const string JapaneseNotFreeOfChargeButton = \"\\U0001F236\";\n\n            /// <summary>\n            /// Gets the \"japanese_no_vacancy_button\" emoji.\n            /// Description: Japanese no vacancy button.\n            /// </summary>\n            public const string JapaneseNoVacancyButton = \"\\U0001F235\";\n\n            /// <summary>\n            /// Gets the \"japanese_open_for_business_button\" emoji.\n            /// Description: Japanese open for business button.\n            /// </summary>\n            public const string JapaneseOpenForBusinessButton = \"\\U0001F23A\";\n\n            /// <summary>\n            /// Gets the \"japanese_passing_grade_button\" emoji.\n            /// Description: Japanese passing grade button.\n            /// </summary>\n            public const string JapanesePassingGradeButton = \"\\U0001F234\";\n\n            /// <summary>\n            /// Gets the \"japanese_post_office\" emoji.\n            /// Description: Japanese post office.\n            /// </summary>\n            public const string JapanesePostOffice = \"\\U0001F3E3\";\n\n            /// <summary>\n            /// Gets the \"japanese_prohibited_button\" emoji.\n            /// Description: Japanese prohibited button.\n            /// </summary>\n            public const string JapaneseProhibitedButton = \"\\U0001F232\";\n\n            /// <summary>\n            /// Gets the \"japanese_reserved_button\" emoji.\n            /// Description: Japanese reserved button.\n            /// </summary>\n            public const string JapaneseReservedButton = \"\\U0001F22F\";\n\n            /// <summary>\n            /// Gets the \"japanese_secret_button\" emoji.\n            /// Description: Japanese secret button.\n            /// </summary>\n            public const string JapaneseSecretButton = \"\\U00003299\";\n\n            /// <summary>\n            /// Gets the \"japanese_service_charge_button\" emoji.\n            /// Description: Japanese service charge button.\n            /// </summary>\n            public const string JapaneseServiceChargeButton = \"\\U0001F202\";\n\n            /// <summary>\n            /// Gets the \"japanese_symbol_for_beginner\" emoji.\n            /// Description: Japanese symbol for beginner.\n            /// </summary>\n            public const string JapaneseSymbolForBeginner = \"\\U0001F530\";\n\n            /// <summary>\n            /// Gets the \"japanese_vacancy_button\" emoji.\n            /// Description: Japanese vacancy button.\n            /// </summary>\n            public const string JapaneseVacancyButton = \"\\U0001F233\";\n\n            /// <summary>\n            /// Gets the \"jeans\" emoji.\n            /// Description: Jeans.\n            /// </summary>\n            public const string Jeans = \"\\U0001F456\";\n\n            /// <summary>\n            /// Gets the \"joker\" emoji.\n            /// Description: Joker.\n            /// </summary>\n            public const string Joker = \"\\U0001F0CF\";\n\n            /// <summary>\n            /// Gets the \"joystick\" emoji.\n            /// Description: Joystick.\n            /// </summary>\n            public const string Joystick = \"\\U0001F579\";\n\n            /// <summary>\n            /// Gets the \"kaaba\" emoji.\n            /// Description: Kaaba.\n            /// </summary>\n            public const string Kaaba = \"\\U0001F54B\";\n\n            /// <summary>\n            /// Gets the \"kangaroo\" emoji.\n            /// Description: Kangaroo.\n            /// </summary>\n            public const string Kangaroo = \"\\U0001F998\";\n\n            /// <summary>\n            /// Gets the \"key\" emoji.\n            /// Description: Key.\n            /// </summary>\n            public const string Key = \"\\U0001F511\";\n\n            /// <summary>\n            /// Gets the \"keyboard\" emoji.\n            /// Description: Keyboard.\n            /// </summary>\n            public const string Keyboard = \"\\U00002328\";\n\n            /// <summary>\n            /// Gets the \"keycap_10\" emoji.\n            /// Description: Keycap 10.\n            /// </summary>\n            public const string Keycap10 = \"\\U0001F51F\";\n\n            /// <summary>\n            /// Gets the \"kick_scooter\" emoji.\n            /// Description: Kick scooter.\n            /// </summary>\n            public const string KickScooter = \"\\U0001F6F4\";\n\n            /// <summary>\n            /// Gets the \"kimono\" emoji.\n            /// Description: Kimono.\n            /// </summary>\n            public const string Kimono = \"\\U0001F458\";\n\n            /// <summary>\n            /// Gets the \"kiss\" emoji.\n            /// Description: Kiss.\n            /// </summary>\n            public const string Kiss = \"\\U0001F48F\";\n\n            /// <summary>\n            /// Gets the \"kissing_cat\" emoji.\n            /// Description: Kissing cat.\n            /// </summary>\n            public const string KissingCat = \"\\U0001F63D\";\n\n            /// <summary>\n            /// Gets the \"kissing_face\" emoji.\n            /// Description: Kissing face.\n            /// </summary>\n            public const string KissingFace = \"\\U0001F617\";\n\n            /// <summary>\n            /// Gets the \"kissing_face_with_closed_eyes\" emoji.\n            /// Description: Kissing face with closed eyes.\n            /// </summary>\n            public const string KissingFaceWithClosedEyes = \"\\U0001F61A\";\n\n            /// <summary>\n            /// Gets the \"kissing_face_with_smiling_eyes\" emoji.\n            /// Description: Kissing face with smiling eyes.\n            /// </summary>\n            public const string KissingFaceWithSmilingEyes = \"\\U0001F619\";\n\n            /// <summary>\n            /// Gets the \"kiss_mark\" emoji.\n            /// Description: Kiss mark.\n            /// </summary>\n            public const string KissMark = \"\\U0001F48B\";\n\n            /// <summary>\n            /// Gets the \"kitchen_knife\" emoji.\n            /// Description: Kitchen knife.\n            /// </summary>\n            public const string KitchenKnife = \"\\U0001F52A\";\n\n            /// <summary>\n            /// Gets the \"kite\" emoji.\n            /// Description: Kite.\n            /// </summary>\n            public const string Kite = \"\\U0001FA81\";\n\n            /// <summary>\n            /// Gets the \"kiwi_fruit\" emoji.\n            /// Description: Kiwi fruit.\n            /// </summary>\n            public const string KiwiFruit = \"\\U0001F95D\";\n\n            /// <summary>\n            /// Gets the \"knocked_out_face\" emoji.\n            /// Description: knocked out face.\n            /// </summary>\n            public const string KnockedOutFace = \"\\U0001F635\";\n\n            /// <summary>\n            /// Gets the \"knot\" emoji.\n            /// Description: Knot.\n            /// </summary>\n            public const string Knot = \"\\U0001FAA2\";\n\n            /// <summary>\n            /// Gets the \"koala\" emoji.\n            /// Description: Koala.\n            /// </summary>\n            public const string Koala = \"\\U0001F428\";\n\n            /// <summary>\n            /// Gets the \"lab_coat\" emoji.\n            /// Description: Lab coat.\n            /// </summary>\n            public const string LabCoat = \"\\U0001F97C\";\n\n            /// <summary>\n            /// Gets the \"label\" emoji.\n            /// Description: Label.\n            /// </summary>\n            public const string Label = \"\\U0001F3F7\";\n\n            /// <summary>\n            /// Gets the \"lacrosse\" emoji.\n            /// Description: Lacrosse.\n            /// </summary>\n            public const string Lacrosse = \"\\U0001F94D\";\n\n            /// <summary>\n            /// Gets the \"ladder\" emoji.\n            /// Description: Ladder.\n            /// </summary>\n            public const string Ladder = \"\\U0001FA9C\";\n\n            /// <summary>\n            /// Gets the \"lady_beetle\" emoji.\n            /// Description: Lady beetle.\n            /// </summary>\n            public const string LadyBeetle = \"\\U0001F41E\";\n\n            /// <summary>\n            /// Gets the \"laptop\" emoji.\n            /// Description: Laptop.\n            /// </summary>\n            public const string Laptop = \"\\U0001F4BB\";\n\n            /// <summary>\n            /// Gets the \"large_blue_diamond\" emoji.\n            /// Description: Large blue diamond.\n            /// </summary>\n            public const string LargeBlueDiamond = \"\\U0001F537\";\n\n            /// <summary>\n            /// Gets the \"large_orange_diamond\" emoji.\n            /// Description: Large orange diamond.\n            /// </summary>\n            public const string LargeOrangeDiamond = \"\\U0001F536\";\n\n            /// <summary>\n            /// Gets the \"last_quarter_moon\" emoji.\n            /// Description: Last quarter moon.\n            /// </summary>\n            public const string LastQuarterMoon = \"\\U0001F317\";\n\n            /// <summary>\n            /// Gets the \"last_quarter_moon_face\" emoji.\n            /// Description: Last quarter moon face.\n            /// </summary>\n            public const string LastQuarterMoonFace = \"\\U0001F31C\";\n\n            /// <summary>\n            /// Gets the \"last_track_button\" emoji.\n            /// Description: Last track button.\n            /// </summary>\n            public const string LastTrackButton = \"\\U000023EE\";\n\n            /// <summary>\n            /// Gets the \"latin_cross\" emoji.\n            /// Description: Latin cross.\n            /// </summary>\n            public const string LatinCross = \"\\U0000271D\";\n\n            /// <summary>\n            /// Gets the \"leaf_fluttering_in_wind\" emoji.\n            /// Description: Leaf fluttering in wind.\n            /// </summary>\n            public const string LeafFlutteringInWind = \"\\U0001F343\";\n\n            /// <summary>\n            /// Gets the \"leafy_green\" emoji.\n            /// Description: Leafy green.\n            /// </summary>\n            public const string LeafyGreen = \"\\U0001F96C\";\n\n            /// <summary>\n            /// Gets the \"ledger\" emoji.\n            /// Description: Ledger.\n            /// </summary>\n            public const string Ledger = \"\\U0001F4D2\";\n\n            /// <summary>\n            /// Gets the \"left_arrow\" emoji.\n            /// Description: Left arrow.\n            /// </summary>\n            public const string LeftArrow = \"\\U00002B05\";\n\n            /// <summary>\n            /// Gets the \"left_arrow_curving_right\" emoji.\n            /// Description: Left arrow curving right.\n            /// </summary>\n            public const string LeftArrowCurvingRight = \"\\U000021AA\";\n\n            /// <summary>\n            /// Gets the \"left_facing_fist\" emoji.\n            /// Description: left facing fist.\n            /// </summary>\n            public const string LeftFacingFist = \"\\U0001F91B\";\n\n            /// <summary>\n            /// Gets the \"left_luggage\" emoji.\n            /// Description: Left luggage.\n            /// </summary>\n            public const string LeftLuggage = \"\\U0001F6C5\";\n\n            /// <summary>\n            /// Gets the \"left_right_arrow\" emoji.\n            /// Description: left right arrow.\n            /// </summary>\n            public const string LeftRightArrow = \"\\U00002194\";\n\n            /// <summary>\n            /// Gets the \"left_speech_bubble\" emoji.\n            /// Description: Left speech bubble.\n            /// </summary>\n            public const string LeftSpeechBubble = \"\\U0001F5E8\";\n\n            /// <summary>\n            /// Gets the \"leg\" emoji.\n            /// Description: Leg.\n            /// </summary>\n            public const string Leg = \"\\U0001F9B5\";\n\n            /// <summary>\n            /// Gets the \"lemon\" emoji.\n            /// Description: Lemon.\n            /// </summary>\n            public const string Lemon = \"\\U0001F34B\";\n\n            /// <summary>\n            /// Gets the \"leo\" emoji.\n            /// Description: Leo.\n            /// </summary>\n            public const string Leo = \"\\U0000264C\";\n\n            /// <summary>\n            /// Gets the \"leopard\" emoji.\n            /// Description: Leopard.\n            /// </summary>\n            public const string Leopard = \"\\U0001F406\";\n\n            /// <summary>\n            /// Gets the \"level_slider\" emoji.\n            /// Description: Level slider.\n            /// </summary>\n            public const string LevelSlider = \"\\U0001F39A\";\n\n            /// <summary>\n            /// Gets the \"libra\" emoji.\n            /// Description: Libra.\n            /// </summary>\n            public const string Libra = \"\\U0000264E\";\n\n            /// <summary>\n            /// Gets the \"light_bulb\" emoji.\n            /// Description: Light bulb.\n            /// </summary>\n            public const string LightBulb = \"\\U0001F4A1\";\n\n            /// <summary>\n            /// Gets the \"light_rail\" emoji.\n            /// Description: Light rail.\n            /// </summary>\n            public const string LightRail = \"\\U0001F688\";\n\n            /// <summary>\n            /// Gets the \"link\" emoji.\n            /// Description: Link.\n            /// </summary>\n            public const string Link = \"\\U0001F517\";\n\n            /// <summary>\n            /// Gets the \"linked_paperclips\" emoji.\n            /// Description: Linked paperclips.\n            /// </summary>\n            public const string LinkedPaperclips = \"\\U0001F587\";\n\n            /// <summary>\n            /// Gets the \"lion\" emoji.\n            /// Description: Lion.\n            /// </summary>\n            public const string Lion = \"\\U0001F981\";\n\n            /// <summary>\n            /// Gets the \"lipstick\" emoji.\n            /// Description: Lipstick.\n            /// </summary>\n            public const string Lipstick = \"\\U0001F484\";\n\n            /// <summary>\n            /// Gets the \"litter_in_bin_sign\" emoji.\n            /// Description: Litter in bin sign.\n            /// </summary>\n            public const string LitterInBinSign = \"\\U0001F6AE\";\n\n            /// <summary>\n            /// Gets the \"lizard\" emoji.\n            /// Description: Lizard.\n            /// </summary>\n            public const string Lizard = \"\\U0001F98E\";\n\n            /// <summary>\n            /// Gets the \"llama\" emoji.\n            /// Description: Llama.\n            /// </summary>\n            public const string Llama = \"\\U0001F999\";\n\n            /// <summary>\n            /// Gets the \"lobster\" emoji.\n            /// Description: Lobster.\n            /// </summary>\n            public const string Lobster = \"\\U0001F99E\";\n\n            /// <summary>\n            /// Gets the \"locked\" emoji.\n            /// Description: Locked.\n            /// </summary>\n            public const string Locked = \"\\U0001F512\";\n\n            /// <summary>\n            /// Gets the \"locked_with_key\" emoji.\n            /// Description: Locked with key.\n            /// </summary>\n            public const string LockedWithKey = \"\\U0001F510\";\n\n            /// <summary>\n            /// Gets the \"locked_with_pen\" emoji.\n            /// Description: Locked with pen.\n            /// </summary>\n            public const string LockedWithPen = \"\\U0001F50F\";\n\n            /// <summary>\n            /// Gets the \"locomotive\" emoji.\n            /// Description: Locomotive.\n            /// </summary>\n            public const string Locomotive = \"\\U0001F682\";\n\n            /// <summary>\n            /// Gets the \"lollipop\" emoji.\n            /// Description: Lollipop.\n            /// </summary>\n            public const string Lollipop = \"\\U0001F36D\";\n\n            /// <summary>\n            /// Gets the \"long_drum\" emoji.\n            /// Description: Long drum.\n            /// </summary>\n            public const string LongDrum = \"\\U0001FA98\";\n\n            /// <summary>\n            /// Gets the \"lotion_bottle\" emoji.\n            /// Description: Lotion bottle.\n            /// </summary>\n            public const string LotionBottle = \"\\U0001F9F4\";\n\n            /// <summary>\n            /// Gets the \"loudly_crying_face\" emoji.\n            /// Description: Loudly crying face.\n            /// </summary>\n            public const string LoudlyCryingFace = \"\\U0001F62D\";\n\n            /// <summary>\n            /// Gets the \"loudspeaker\" emoji.\n            /// Description: Loudspeaker.\n            /// </summary>\n            public const string Loudspeaker = \"\\U0001F4E2\";\n\n            /// <summary>\n            /// Gets the \"love_hotel\" emoji.\n            /// Description: Love hotel.\n            /// </summary>\n            public const string LoveHotel = \"\\U0001F3E9\";\n\n            /// <summary>\n            /// Gets the \"love_letter\" emoji.\n            /// Description: Love letter.\n            /// </summary>\n            public const string LoveLetter = \"\\U0001F48C\";\n\n            /// <summary>\n            /// Gets the \"love_you_gesture\" emoji.\n            /// Description: love you gesture.\n            /// </summary>\n            public const string LoveYouGesture = \"\\U0001F91F\";\n\n            /// <summary>\n            /// Gets the \"luggage\" emoji.\n            /// Description: Luggage.\n            /// </summary>\n            public const string Luggage = \"\\U0001F9F3\";\n\n            /// <summary>\n            /// Gets the \"lungs\" emoji.\n            /// Description: Lungs.\n            /// </summary>\n            public const string Lungs = \"\\U0001FAC1\";\n\n            /// <summary>\n            /// Gets the \"lying_face\" emoji.\n            /// Description: Lying face.\n            /// </summary>\n            public const string LyingFace = \"\\U0001F925\";\n\n            /// <summary>\n            /// Gets the \"mage\" emoji.\n            /// Description: Mage.\n            /// </summary>\n            public const string Mage = \"\\U0001F9D9\";\n\n            /// <summary>\n            /// Gets the \"magic_wand\" emoji.\n            /// Description: Magic wand.\n            /// </summary>\n            public const string MagicWand = \"\\U0001FA84\";\n\n            /// <summary>\n            /// Gets the \"magnet\" emoji.\n            /// Description: Magnet.\n            /// </summary>\n            public const string Magnet = \"\\U0001F9F2\";\n\n            /// <summary>\n            /// Gets the \"magnifying_glass_tilted_left\" emoji.\n            /// Description: Magnifying glass tilted left.\n            /// </summary>\n            public const string MagnifyingGlassTiltedLeft = \"\\U0001F50D\";\n\n            /// <summary>\n            /// Gets the \"magnifying_glass_tilted_right\" emoji.\n            /// Description: Magnifying glass tilted right.\n            /// </summary>\n            public const string MagnifyingGlassTiltedRight = \"\\U0001F50E\";\n\n            /// <summary>\n            /// Gets the \"mahjong_red_dragon\" emoji.\n            /// Description: Mahjong red dragon.\n            /// </summary>\n            public const string MahjongRedDragon = \"\\U0001F004\";\n\n            /// <summary>\n            /// Gets the \"male_sign\" emoji.\n            /// Description: Male sign.\n            /// </summary>\n            public const string MaleSign = \"\\U00002642\";\n\n            /// <summary>\n            /// Gets the \"mammoth\" emoji.\n            /// Description: Mammoth.\n            /// </summary>\n            public const string Mammoth = \"\\U0001F9A3\";\n\n            /// <summary>\n            /// Gets the \"man\" emoji.\n            /// Description: Man.\n            /// </summary>\n            public const string Man = \"\\U0001F468\";\n\n            /// <summary>\n            /// Gets the \"man_dancing\" emoji.\n            /// Description: Man dancing.\n            /// </summary>\n            public const string ManDancing = \"\\U0001F57A\";\n\n            /// <summary>\n            /// Gets the \"mango\" emoji.\n            /// Description: Mango.\n            /// </summary>\n            public const string Mango = \"\\U0001F96D\";\n\n            /// <summary>\n            /// Gets the \"mans_shoe\" emoji.\n            /// Description: Man s shoe.\n            /// </summary>\n            public const string MansShoe = \"\\U0001F45E\";\n\n            /// <summary>\n            /// Gets the \"mantelpiece_clock\" emoji.\n            /// Description: Mantelpiece clock.\n            /// </summary>\n            public const string MantelpieceClock = \"\\U0001F570\";\n\n            /// <summary>\n            /// Gets the \"manual_wheelchair\" emoji.\n            /// Description: Manual wheelchair.\n            /// </summary>\n            public const string ManualWheelchair = \"\\U0001F9BD\";\n\n            /// <summary>\n            /// Gets the \"maple_leaf\" emoji.\n            /// Description: Maple leaf.\n            /// </summary>\n            public const string MapleLeaf = \"\\U0001F341\";\n\n            /// <summary>\n            /// Gets the \"map_of_japan\" emoji.\n            /// Description: Map of japan.\n            /// </summary>\n            public const string MapOfJapan = \"\\U0001F5FE\";\n\n            /// <summary>\n            /// Gets the \"martial_arts_uniform\" emoji.\n            /// Description: Martial arts uniform.\n            /// </summary>\n            public const string MartialArtsUniform = \"\\U0001F94B\";\n\n            /// <summary>\n            /// Gets the \"mate\" emoji.\n            /// Description: Mate.\n            /// </summary>\n            public const string Mate = \"\\U0001F9C9\";\n\n            /// <summary>\n            /// Gets the \"meat_on_bone\" emoji.\n            /// Description: Meat on bone.\n            /// </summary>\n            public const string MeatOnBone = \"\\U0001F356\";\n\n            /// <summary>\n            /// Gets the \"mechanical_arm\" emoji.\n            /// Description: Mechanical arm.\n            /// </summary>\n            public const string MechanicalArm = \"\\U0001F9BE\";\n\n            /// <summary>\n            /// Gets the \"mechanical_leg\" emoji.\n            /// Description: Mechanical leg.\n            /// </summary>\n            public const string MechanicalLeg = \"\\U0001F9BF\";\n\n            /// <summary>\n            /// Gets the \"medical_symbol\" emoji.\n            /// Description: Medical symbol.\n            /// </summary>\n            public const string MedicalSymbol = \"\\U00002695\";\n\n            /// <summary>\n            /// Gets the \"megaphone\" emoji.\n            /// Description: Megaphone.\n            /// </summary>\n            public const string Megaphone = \"\\U0001F4E3\";\n\n            /// <summary>\n            /// Gets the \"melon\" emoji.\n            /// Description: Melon.\n            /// </summary>\n            public const string Melon = \"\\U0001F348\";\n\n            /// <summary>\n            /// Gets the \"memo\" emoji.\n            /// Description: Memo.\n            /// </summary>\n            public const string Memo = \"\\U0001F4DD\";\n\n            /// <summary>\n            /// Gets the \"men_holding_hands\" emoji.\n            /// Description: Men holding hands.\n            /// </summary>\n            public const string MenHoldingHands = \"\\U0001F46C\";\n\n            /// <summary>\n            /// Gets the \"menorah\" emoji.\n            /// Description: Menorah.\n            /// </summary>\n            public const string Menorah = \"\\U0001F54E\";\n\n            /// <summary>\n            /// Gets the \"mens_room\" emoji.\n            /// Description: Men s room.\n            /// </summary>\n            public const string MensRoom = \"\\U0001F6B9\";\n\n            /// <summary>\n            /// Gets the \"merperson\" emoji.\n            /// Description: Merperson.\n            /// </summary>\n            public const string Merperson = \"\\U0001F9DC\";\n\n            /// <summary>\n            /// Gets the \"metro\" emoji.\n            /// Description: Metro.\n            /// </summary>\n            public const string Metro = \"\\U0001F687\";\n\n            /// <summary>\n            /// Gets the \"microbe\" emoji.\n            /// Description: Microbe.\n            /// </summary>\n            public const string Microbe = \"\\U0001F9A0\";\n\n            /// <summary>\n            /// Gets the \"microphone\" emoji.\n            /// Description: Microphone.\n            /// </summary>\n            public const string Microphone = \"\\U0001F3A4\";\n\n            /// <summary>\n            /// Gets the \"microscope\" emoji.\n            /// Description: Microscope.\n            /// </summary>\n            public const string Microscope = \"\\U0001F52C\";\n\n            /// <summary>\n            /// Gets the \"middle_finger\" emoji.\n            /// Description: Middle finger.\n            /// </summary>\n            public const string MiddleFinger = \"\\U0001F595\";\n\n            /// <summary>\n            /// Gets the \"military_helmet\" emoji.\n            /// Description: Military helmet.\n            /// </summary>\n            public const string MilitaryHelmet = \"\\U0001FA96\";\n\n            /// <summary>\n            /// Gets the \"military_medal\" emoji.\n            /// Description: Military medal.\n            /// </summary>\n            public const string MilitaryMedal = \"\\U0001F396\";\n\n            /// <summary>\n            /// Gets the \"milky_way\" emoji.\n            /// Description: Milky way.\n            /// </summary>\n            public const string MilkyWay = \"\\U0001F30C\";\n\n            /// <summary>\n            /// Gets the \"minibus\" emoji.\n            /// Description: Minibus.\n            /// </summary>\n            public const string Minibus = \"\\U0001F690\";\n\n            /// <summary>\n            /// Gets the \"minus\" emoji.\n            /// Description: Minus.\n            /// </summary>\n            public const string Minus = \"\\U00002796\";\n\n            /// <summary>\n            /// Gets the \"mirror\" emoji.\n            /// Description: Mirror.\n            /// </summary>\n            public const string Mirror = \"\\U0001FA9E\";\n\n            /// <summary>\n            /// Gets the \"moai\" emoji.\n            /// Description: Moai.\n            /// </summary>\n            public const string Moai = \"\\U0001F5FF\";\n\n            /// <summary>\n            /// Gets the \"mobile_phone\" emoji.\n            /// Description: Mobile phone.\n            /// </summary>\n            public const string MobilePhone = \"\\U0001F4F1\";\n\n            /// <summary>\n            /// Gets the \"mobile_phone_off\" emoji.\n            /// Description: Mobile phone off.\n            /// </summary>\n            public const string MobilePhoneOff = \"\\U0001F4F4\";\n\n            /// <summary>\n            /// Gets the \"mobile_phone_with_arrow\" emoji.\n            /// Description: Mobile phone with arrow.\n            /// </summary>\n            public const string MobilePhoneWithArrow = \"\\U0001F4F2\";\n\n            /// <summary>\n            /// Gets the \"money_bag\" emoji.\n            /// Description: Money bag.\n            /// </summary>\n            public const string MoneyBag = \"\\U0001F4B0\";\n\n            /// <summary>\n            /// Gets the \"money_mouth_face\" emoji.\n            /// Description: money mouth face.\n            /// </summary>\n            public const string MoneyMouthFace = \"\\U0001F911\";\n\n            /// <summary>\n            /// Gets the \"money_with_wings\" emoji.\n            /// Description: Money with wings.\n            /// </summary>\n            public const string MoneyWithWings = \"\\U0001F4B8\";\n\n            /// <summary>\n            /// Gets the \"monkey\" emoji.\n            /// Description: Monkey.\n            /// </summary>\n            public const string Monkey = \"\\U0001F412\";\n\n            /// <summary>\n            /// Gets the \"monkey_face\" emoji.\n            /// Description: Monkey face.\n            /// </summary>\n            public const string MonkeyFace = \"\\U0001F435\";\n\n            /// <summary>\n            /// Gets the \"monorail\" emoji.\n            /// Description: Monorail.\n            /// </summary>\n            public const string Monorail = \"\\U0001F69D\";\n\n            /// <summary>\n            /// Gets the \"moon_cake\" emoji.\n            /// Description: Moon cake.\n            /// </summary>\n            public const string MoonCake = \"\\U0001F96E\";\n\n            /// <summary>\n            /// Gets the \"moon_viewing_ceremony\" emoji.\n            /// Description: Moon viewing ceremony.\n            /// </summary>\n            public const string MoonViewingCeremony = \"\\U0001F391\";\n\n            /// <summary>\n            /// Gets the \"mosque\" emoji.\n            /// Description: Mosque.\n            /// </summary>\n            public const string Mosque = \"\\U0001F54C\";\n\n            /// <summary>\n            /// Gets the \"mosquito\" emoji.\n            /// Description: Mosquito.\n            /// </summary>\n            public const string Mosquito = \"\\U0001F99F\";\n\n            /// <summary>\n            /// Gets the \"motor_boat\" emoji.\n            /// Description: Motor boat.\n            /// </summary>\n            public const string MotorBoat = \"\\U0001F6E5\";\n\n            /// <summary>\n            /// Gets the \"motorcycle\" emoji.\n            /// Description: Motorcycle.\n            /// </summary>\n            public const string Motorcycle = \"\\U0001F3CD\";\n\n            /// <summary>\n            /// Gets the \"motorized_wheelchair\" emoji.\n            /// Description: Motorized wheelchair.\n            /// </summary>\n            public const string MotorizedWheelchair = \"\\U0001F9BC\";\n\n            /// <summary>\n            /// Gets the \"motor_scooter\" emoji.\n            /// Description: Motor scooter.\n            /// </summary>\n            public const string MotorScooter = \"\\U0001F6F5\";\n\n            /// <summary>\n            /// Gets the \"motorway\" emoji.\n            /// Description: Motorway.\n            /// </summary>\n            public const string Motorway = \"\\U0001F6E3\";\n\n            /// <summary>\n            /// Gets the \"mountain\" emoji.\n            /// Description: Mountain.\n            /// </summary>\n            public const string Mountain = \"\\U000026F0\";\n\n            /// <summary>\n            /// Gets the \"mountain_cableway\" emoji.\n            /// Description: Mountain cableway.\n            /// </summary>\n            public const string MountainCableway = \"\\U0001F6A0\";\n\n            /// <summary>\n            /// Gets the \"mountain_railway\" emoji.\n            /// Description: Mountain railway.\n            /// </summary>\n            public const string MountainRailway = \"\\U0001F69E\";\n\n            /// <summary>\n            /// Gets the \"mount_fuji\" emoji.\n            /// Description: Mount fuji.\n            /// </summary>\n            public const string MountFuji = \"\\U0001F5FB\";\n\n            /// <summary>\n            /// Gets the \"mouse\" emoji.\n            /// Description: Mouse.\n            /// </summary>\n            public const string Mouse = \"\\U0001F401\";\n\n            /// <summary>\n            /// Gets the \"mouse_face\" emoji.\n            /// Description: Mouse face.\n            /// </summary>\n            public const string MouseFace = \"\\U0001F42D\";\n\n            /// <summary>\n            /// Gets the \"mouse_trap\" emoji.\n            /// Description: Mouse trap.\n            /// </summary>\n            public const string MouseTrap = \"\\U0001FAA4\";\n\n            /// <summary>\n            /// Gets the \"mouth\" emoji.\n            /// Description: Mouth.\n            /// </summary>\n            public const string Mouth = \"\\U0001F444\";\n\n            /// <summary>\n            /// Gets the \"movie_camera\" emoji.\n            /// Description: Movie camera.\n            /// </summary>\n            public const string MovieCamera = \"\\U0001F3A5\";\n\n            /// <summary>\n            /// Gets the \"mrs_claus\" emoji.\n            /// Description: Mrs claus.\n            /// </summary>\n            public const string MrsClaus = \"\\U0001F936\";\n\n            /// <summary>\n            /// Gets the \"multiply\" emoji.\n            /// Description: Multiply.\n            /// </summary>\n            public const string Multiply = \"\\U00002716\";\n\n            /// <summary>\n            /// Gets the \"mushroom\" emoji.\n            /// Description: Mushroom.\n            /// </summary>\n            public const string Mushroom = \"\\U0001F344\";\n\n            /// <summary>\n            /// Gets the \"musical_keyboard\" emoji.\n            /// Description: Musical keyboard.\n            /// </summary>\n            public const string MusicalKeyboard = \"\\U0001F3B9\";\n\n            /// <summary>\n            /// Gets the \"musical_note\" emoji.\n            /// Description: Musical note.\n            /// </summary>\n            public const string MusicalNote = \"\\U0001F3B5\";\n\n            /// <summary>\n            /// Gets the \"musical_notes\" emoji.\n            /// Description: Musical notes.\n            /// </summary>\n            public const string MusicalNotes = \"\\U0001F3B6\";\n\n            /// <summary>\n            /// Gets the \"musical_score\" emoji.\n            /// Description: Musical score.\n            /// </summary>\n            public const string MusicalScore = \"\\U0001F3BC\";\n\n            /// <summary>\n            /// Gets the \"muted_speaker\" emoji.\n            /// Description: Muted speaker.\n            /// </summary>\n            public const string MutedSpeaker = \"\\U0001F507\";\n\n            /// <summary>\n            /// Gets the \"nail_polish\" emoji.\n            /// Description: Nail polish.\n            /// </summary>\n            public const string NailPolish = \"\\U0001F485\";\n\n            /// <summary>\n            /// Gets the \"name_badge\" emoji.\n            /// Description: Name badge.\n            /// </summary>\n            public const string NameBadge = \"\\U0001F4DB\";\n\n            /// <summary>\n            /// Gets the \"national_park\" emoji.\n            /// Description: National park.\n            /// </summary>\n            public const string NationalPark = \"\\U0001F3DE\";\n\n            /// <summary>\n            /// Gets the \"nauseated_face\" emoji.\n            /// Description: Nauseated face.\n            /// </summary>\n            public const string NauseatedFace = \"\\U0001F922\";\n\n            /// <summary>\n            /// Gets the \"nazar_amulet\" emoji.\n            /// Description: Nazar amulet.\n            /// </summary>\n            public const string NazarAmulet = \"\\U0001F9FF\";\n\n            /// <summary>\n            /// Gets the \"necktie\" emoji.\n            /// Description: Necktie.\n            /// </summary>\n            public const string Necktie = \"\\U0001F454\";\n\n            /// <summary>\n            /// Gets the \"nerd_face\" emoji.\n            /// Description: Nerd face.\n            /// </summary>\n            public const string NerdFace = \"\\U0001F913\";\n\n            /// <summary>\n            /// Gets the \"nesting_dolls\" emoji.\n            /// Description: Nesting dolls.\n            /// </summary>\n            public const string NestingDolls = \"\\U0001FA86\";\n\n            /// <summary>\n            /// Gets the \"neutral_face\" emoji.\n            /// Description: Neutral face.\n            /// </summary>\n            public const string NeutralFace = \"\\U0001F610\";\n\n            /// <summary>\n            /// Gets the \"new_button\" emoji.\n            /// Description: NEW button.\n            /// </summary>\n            public const string NewButton = \"\\U0001F195\";\n\n            /// <summary>\n            /// Gets the \"new_moon\" emoji.\n            /// Description: New moon.\n            /// </summary>\n            public const string NewMoon = \"\\U0001F311\";\n\n            /// <summary>\n            /// Gets the \"new_moon_face\" emoji.\n            /// Description: New moon face.\n            /// </summary>\n            public const string NewMoonFace = \"\\U0001F31A\";\n\n            /// <summary>\n            /// Gets the \"newspaper\" emoji.\n            /// Description: Newspaper.\n            /// </summary>\n            public const string Newspaper = \"\\U0001F4F0\";\n\n            /// <summary>\n            /// Gets the \"next_track_button\" emoji.\n            /// Description: Next track button.\n            /// </summary>\n            public const string NextTrackButton = \"\\U000023ED\";\n\n            /// <summary>\n            /// Gets the \"ng_button\" emoji.\n            /// Description: NG button.\n            /// </summary>\n            public const string NgButton = \"\\U0001F196\";\n\n            /// <summary>\n            /// Gets the \"night_with_stars\" emoji.\n            /// Description: Night with stars.\n            /// </summary>\n            public const string NightWithStars = \"\\U0001F303\";\n\n            /// <summary>\n            /// Gets the \"nine_o_clock\" emoji.\n            /// Description: Nine o clock.\n            /// </summary>\n            public const string NineOClock = \"\\U0001F558\";\n\n            /// <summary>\n            /// Gets the \"nine_thirty\" emoji.\n            /// Description: nine thirty.\n            /// </summary>\n            public const string NineThirty = \"\\U0001F564\";\n\n            /// <summary>\n            /// Gets the \"ninja\" emoji.\n            /// Description: Ninja.\n            /// </summary>\n            public const string Ninja = \"\\U0001F977\";\n\n            /// <summary>\n            /// Gets the \"no_bicycles\" emoji.\n            /// Description: No bicycles.\n            /// </summary>\n            public const string NoBicycles = \"\\U0001F6B3\";\n\n            /// <summary>\n            /// Gets the \"no_entry\" emoji.\n            /// Description: No entry.\n            /// </summary>\n            public const string NoEntry = \"\\U000026D4\";\n\n            /// <summary>\n            /// Gets the \"no_littering\" emoji.\n            /// Description: No littering.\n            /// </summary>\n            public const string NoLittering = \"\\U0001F6AF\";\n\n            /// <summary>\n            /// Gets the \"no_mobile_phones\" emoji.\n            /// Description: No mobile phones.\n            /// </summary>\n            public const string NoMobilePhones = \"\\U0001F4F5\";\n\n            /// <summary>\n            /// Gets the \"non_potable_water\" emoji.\n            /// Description: non potable water.\n            /// </summary>\n            public const string NonPotableWater = \"\\U0001F6B1\";\n\n            /// <summary>\n            /// Gets the \"no_one_under_eighteen\" emoji.\n            /// Description: No one under eighteen.\n            /// </summary>\n            public const string NoOneUnderEighteen = \"\\U0001F51E\";\n\n            /// <summary>\n            /// Gets the \"no_pedestrians\" emoji.\n            /// Description: No pedestrians.\n            /// </summary>\n            public const string NoPedestrians = \"\\U0001F6B7\";\n\n            /// <summary>\n            /// Gets the \"nose\" emoji.\n            /// Description: Nose.\n            /// </summary>\n            public const string Nose = \"\\U0001F443\";\n\n            /// <summary>\n            /// Gets the \"no_smoking\" emoji.\n            /// Description: No smoking.\n            /// </summary>\n            public const string NoSmoking = \"\\U0001F6AD\";\n\n            /// <summary>\n            /// Gets the \"notebook\" emoji.\n            /// Description: Notebook.\n            /// </summary>\n            public const string Notebook = \"\\U0001F4D3\";\n\n            /// <summary>\n            /// Gets the \"notebook_with_decorative_cover\" emoji.\n            /// Description: Notebook with decorative cover.\n            /// </summary>\n            public const string NotebookWithDecorativeCover = \"\\U0001F4D4\";\n\n            /// <summary>\n            /// Gets the \"nut_and_bolt\" emoji.\n            /// Description: Nut and bolt.\n            /// </summary>\n            public const string NutAndBolt = \"\\U0001F529\";\n\n            /// <summary>\n            /// Gets the \"o_button_blood_type\" emoji.\n            /// Description: O button blood type.\n            /// </summary>\n            public const string OButtonBloodType = \"\\U0001F17E\";\n\n            /// <summary>\n            /// Gets the \"octopus\" emoji.\n            /// Description: Octopus.\n            /// </summary>\n            public const string Octopus = \"\\U0001F419\";\n\n            /// <summary>\n            /// Gets the \"oden\" emoji.\n            /// Description: Oden.\n            /// </summary>\n            public const string Oden = \"\\U0001F362\";\n\n            /// <summary>\n            /// Gets the \"office_building\" emoji.\n            /// Description: Office building.\n            /// </summary>\n            public const string OfficeBuilding = \"\\U0001F3E2\";\n\n            /// <summary>\n            /// Gets the \"ogre\" emoji.\n            /// Description: Ogre.\n            /// </summary>\n            public const string Ogre = \"\\U0001F479\";\n\n            /// <summary>\n            /// Gets the \"oil_drum\" emoji.\n            /// Description: Oil drum.\n            /// </summary>\n            public const string OilDrum = \"\\U0001F6E2\";\n\n            /// <summary>\n            /// Gets the \"ok_button\" emoji.\n            /// Description: OK button.\n            /// </summary>\n            public const string OkButton = \"\\U0001F197\";\n\n            /// <summary>\n            /// Gets the \"ok_hand\" emoji.\n            /// Description: OK hand.\n            /// </summary>\n            public const string OkHand = \"\\U0001F44C\";\n\n            /// <summary>\n            /// Gets the \"older_person\" emoji.\n            /// Description: Older person.\n            /// </summary>\n            public const string OlderPerson = \"\\U0001F9D3\";\n\n            /// <summary>\n            /// Gets the \"old_key\" emoji.\n            /// Description: Old key.\n            /// </summary>\n            public const string OldKey = \"\\U0001F5DD\";\n\n            /// <summary>\n            /// Gets the \"old_man\" emoji.\n            /// Description: Old man.\n            /// </summary>\n            public const string OldMan = \"\\U0001F474\";\n\n            /// <summary>\n            /// Gets the \"old_woman\" emoji.\n            /// Description: Old woman.\n            /// </summary>\n            public const string OldWoman = \"\\U0001F475\";\n\n            /// <summary>\n            /// Gets the \"olive\" emoji.\n            /// Description: Olive.\n            /// </summary>\n            public const string Olive = \"\\U0001FAD2\";\n\n            /// <summary>\n            /// Gets the \"om\" emoji.\n            /// Description: Om.\n            /// </summary>\n            public const string Om = \"\\U0001F549\";\n\n            /// <summary>\n            /// Gets the \"on_arrow\" emoji.\n            /// Description: ON arrow.\n            /// </summary>\n            public const string OnArrow = \"\\U0001F51B\";\n\n            /// <summary>\n            /// Gets the \"oncoming_automobile\" emoji.\n            /// Description: Oncoming automobile.\n            /// </summary>\n            public const string OncomingAutomobile = \"\\U0001F698\";\n\n            /// <summary>\n            /// Gets the \"oncoming_bus\" emoji.\n            /// Description: Oncoming bus.\n            /// </summary>\n            public const string OncomingBus = \"\\U0001F68D\";\n\n            /// <summary>\n            /// Gets the \"oncoming_fist\" emoji.\n            /// Description: Oncoming fist.\n            /// </summary>\n            public const string OncomingFist = \"\\U0001F44A\";\n\n            /// <summary>\n            /// Gets the \"oncoming_police_car\" emoji.\n            /// Description: Oncoming police car.\n            /// </summary>\n            public const string OncomingPoliceCar = \"\\U0001F694\";\n\n            /// <summary>\n            /// Gets the \"oncoming_taxi\" emoji.\n            /// Description: Oncoming taxi.\n            /// </summary>\n            public const string OncomingTaxi = \"\\U0001F696\";\n\n            /// <summary>\n            /// Gets the \"one_o_clock\" emoji.\n            /// Description: One o clock.\n            /// </summary>\n            public const string OneOClock = \"\\U0001F550\";\n\n            /// <summary>\n            /// Gets the \"one_piece_swimsuit\" emoji.\n            /// Description: one piece swimsuit.\n            /// </summary>\n            public const string OnePieceSwimsuit = \"\\U0001FA71\";\n\n            /// <summary>\n            /// Gets the \"one_thirty\" emoji.\n            /// Description: one thirty.\n            /// </summary>\n            public const string OneThirty = \"\\U0001F55C\";\n\n            /// <summary>\n            /// Gets the \"onion\" emoji.\n            /// Description: Onion.\n            /// </summary>\n            public const string Onion = \"\\U0001F9C5\";\n\n            /// <summary>\n            /// Gets the \"open_book\" emoji.\n            /// Description: Open book.\n            /// </summary>\n            public const string OpenBook = \"\\U0001F4D6\";\n\n            /// <summary>\n            /// Gets the \"open_file_folder\" emoji.\n            /// Description: Open file folder.\n            /// </summary>\n            public const string OpenFileFolder = \"\\U0001F4C2\";\n\n            /// <summary>\n            /// Gets the \"open_hands\" emoji.\n            /// Description: Open hands.\n            /// </summary>\n            public const string OpenHands = \"\\U0001F450\";\n\n            /// <summary>\n            /// Gets the \"open_mailbox_with_lowered_flag\" emoji.\n            /// Description: Open mailbox with lowered flag.\n            /// </summary>\n            public const string OpenMailboxWithLoweredFlag = \"\\U0001F4ED\";\n\n            /// <summary>\n            /// Gets the \"open_mailbox_with_raised_flag\" emoji.\n            /// Description: Open mailbox with raised flag.\n            /// </summary>\n            public const string OpenMailboxWithRaisedFlag = \"\\U0001F4EC\";\n\n            /// <summary>\n            /// Gets the \"ophiuchus\" emoji.\n            /// Description: Ophiuchus.\n            /// </summary>\n            public const string Ophiuchus = \"\\U000026CE\";\n\n            /// <summary>\n            /// Gets the \"optical_disk\" emoji.\n            /// Description: Optical disk.\n            /// </summary>\n            public const string OpticalDisk = \"\\U0001F4BF\";\n\n            /// <summary>\n            /// Gets the \"orange_book\" emoji.\n            /// Description: Orange book.\n            /// </summary>\n            public const string OrangeBook = \"\\U0001F4D9\";\n\n            /// <summary>\n            /// Gets the \"orange_circle\" emoji.\n            /// Description: Orange circle.\n            /// </summary>\n            public const string OrangeCircle = \"\\U0001F7E0\";\n\n            /// <summary>\n            /// Gets the \"orange_heart\" emoji.\n            /// Description: Orange heart.\n            /// </summary>\n            public const string OrangeHeart = \"\\U0001F9E1\";\n\n            /// <summary>\n            /// Gets the \"orange_square\" emoji.\n            /// Description: Orange square.\n            /// </summary>\n            public const string OrangeSquare = \"\\U0001F7E7\";\n\n            /// <summary>\n            /// Gets the \"orangutan\" emoji.\n            /// Description: Orangutan.\n            /// </summary>\n            public const string Orangutan = \"\\U0001F9A7\";\n\n            /// <summary>\n            /// Gets the \"orthodox_cross\" emoji.\n            /// Description: Orthodox cross.\n            /// </summary>\n            public const string OrthodoxCross = \"\\U00002626\";\n\n            /// <summary>\n            /// Gets the \"otter\" emoji.\n            /// Description: Otter.\n            /// </summary>\n            public const string Otter = \"\\U0001F9A6\";\n\n            /// <summary>\n            /// Gets the \"outbox_tray\" emoji.\n            /// Description: Outbox tray.\n            /// </summary>\n            public const string OutboxTray = \"\\U0001F4E4\";\n\n            /// <summary>\n            /// Gets the \"owl\" emoji.\n            /// Description: Owl.\n            /// </summary>\n            public const string Owl = \"\\U0001F989\";\n\n            /// <summary>\n            /// Gets the \"ox\" emoji.\n            /// Description: Ox.\n            /// </summary>\n            public const string Ox = \"\\U0001F402\";\n\n            /// <summary>\n            /// Gets the \"oyster\" emoji.\n            /// Description: Oyster.\n            /// </summary>\n            public const string Oyster = \"\\U0001F9AA\";\n\n            /// <summary>\n            /// Gets the \"package\" emoji.\n            /// Description: Package.\n            /// </summary>\n            public const string Package = \"\\U0001F4E6\";\n\n            /// <summary>\n            /// Gets the \"page_facing_up\" emoji.\n            /// Description: Page facing up.\n            /// </summary>\n            public const string PageFacingUp = \"\\U0001F4C4\";\n\n            /// <summary>\n            /// Gets the \"pager\" emoji.\n            /// Description: Pager.\n            /// </summary>\n            public const string Pager = \"\\U0001F4DF\";\n\n            /// <summary>\n            /// Gets the \"page_with_curl\" emoji.\n            /// Description: Page with curl.\n            /// </summary>\n            public const string PageWithCurl = \"\\U0001F4C3\";\n\n            /// <summary>\n            /// Gets the \"paintbrush\" emoji.\n            /// Description: Paintbrush.\n            /// </summary>\n            public const string Paintbrush = \"\\U0001F58C\";\n\n            /// <summary>\n            /// Gets the \"palms_up_together\" emoji.\n            /// Description: Palms up together.\n            /// </summary>\n            public const string PalmsUpTogether = \"\\U0001F932\";\n\n            /// <summary>\n            /// Gets the \"palm_tree\" emoji.\n            /// Description: Palm tree.\n            /// </summary>\n            public const string PalmTree = \"\\U0001F334\";\n\n            /// <summary>\n            /// Gets the \"pancakes\" emoji.\n            /// Description: Pancakes.\n            /// </summary>\n            public const string Pancakes = \"\\U0001F95E\";\n\n            /// <summary>\n            /// Gets the \"panda\" emoji.\n            /// Description: Panda.\n            /// </summary>\n            public const string Panda = \"\\U0001F43C\";\n\n            /// <summary>\n            /// Gets the \"paperclip\" emoji.\n            /// Description: Paperclip.\n            /// </summary>\n            public const string Paperclip = \"\\U0001F4CE\";\n\n            /// <summary>\n            /// Gets the \"parachute\" emoji.\n            /// Description: Parachute.\n            /// </summary>\n            public const string Parachute = \"\\U0001FA82\";\n\n            /// <summary>\n            /// Gets the \"parrot\" emoji.\n            /// Description: Parrot.\n            /// </summary>\n            public const string Parrot = \"\\U0001F99C\";\n\n            /// <summary>\n            /// Gets the \"part_alternation_mark\" emoji.\n            /// Description: Part alternation mark.\n            /// </summary>\n            public const string PartAlternationMark = \"\\U0000303D\";\n\n            /// <summary>\n            /// Gets the \"partying_face\" emoji.\n            /// Description: Partying face.\n            /// </summary>\n            public const string PartyingFace = \"\\U0001F973\";\n\n            /// <summary>\n            /// Gets the \"party_popper\" emoji.\n            /// Description: Party popper.\n            /// </summary>\n            public const string PartyPopper = \"\\U0001F389\";\n\n            /// <summary>\n            /// Gets the \"passenger_ship\" emoji.\n            /// Description: Passenger ship.\n            /// </summary>\n            public const string PassengerShip = \"\\U0001F6F3\";\n\n            /// <summary>\n            /// Gets the \"passport_control\" emoji.\n            /// Description: Passport control.\n            /// </summary>\n            public const string PassportControl = \"\\U0001F6C2\";\n\n            /// <summary>\n            /// Gets the \"pause_button\" emoji.\n            /// Description: Pause button.\n            /// </summary>\n            public const string PauseButton = \"\\U000023F8\";\n\n            /// <summary>\n            /// Gets the \"paw_prints\" emoji.\n            /// Description: Paw prints.\n            /// </summary>\n            public const string PawPrints = \"\\U0001F43E\";\n\n            /// <summary>\n            /// Gets the \"p_button\" emoji.\n            /// Description: P button.\n            /// </summary>\n            public const string PButton = \"\\U0001F17F\";\n\n            /// <summary>\n            /// Gets the \"peace_symbol\" emoji.\n            /// Description: Peace symbol.\n            /// </summary>\n            public const string PeaceSymbol = \"\\U0000262E\";\n\n            /// <summary>\n            /// Gets the \"peach\" emoji.\n            /// Description: Peach.\n            /// </summary>\n            public const string Peach = \"\\U0001F351\";\n\n            /// <summary>\n            /// Gets the \"peacock\" emoji.\n            /// Description: Peacock.\n            /// </summary>\n            public const string Peacock = \"\\U0001F99A\";\n\n            /// <summary>\n            /// Gets the \"peanuts\" emoji.\n            /// Description: Peanuts.\n            /// </summary>\n            public const string Peanuts = \"\\U0001F95C\";\n\n            /// <summary>\n            /// Gets the \"pear\" emoji.\n            /// Description: Pear.\n            /// </summary>\n            public const string Pear = \"\\U0001F350\";\n\n            /// <summary>\n            /// Gets the \"pen\" emoji.\n            /// Description: Pen.\n            /// </summary>\n            public const string Pen = \"\\U0001F58A\";\n\n            /// <summary>\n            /// Gets the \"pencil\" emoji.\n            /// Description: Pencil.\n            /// </summary>\n            public const string Pencil = \"\\U0000270F\";\n\n            /// <summary>\n            /// Gets the \"penguin\" emoji.\n            /// Description: Penguin.\n            /// </summary>\n            public const string Penguin = \"\\U0001F427\";\n\n            /// <summary>\n            /// Gets the \"pensive_face\" emoji.\n            /// Description: Pensive face.\n            /// </summary>\n            public const string PensiveFace = \"\\U0001F614\";\n\n            /// <summary>\n            /// Gets the \"people_hugging\" emoji.\n            /// Description: People hugging.\n            /// </summary>\n            public const string PeopleHugging = \"\\U0001FAC2\";\n\n            /// <summary>\n            /// Gets the \"people_with_bunny_ears\" emoji.\n            /// Description: People with bunny ears.\n            /// </summary>\n            public const string PeopleWithBunnyEars = \"\\U0001F46F\";\n\n            /// <summary>\n            /// Gets the \"people_wrestling\" emoji.\n            /// Description: People wrestling.\n            /// </summary>\n            public const string PeopleWrestling = \"\\U0001F93C\";\n\n            /// <summary>\n            /// Gets the \"performing_arts\" emoji.\n            /// Description: Performing arts.\n            /// </summary>\n            public const string PerformingArts = \"\\U0001F3AD\";\n\n            /// <summary>\n            /// Gets the \"persevering_face\" emoji.\n            /// Description: Persevering face.\n            /// </summary>\n            public const string PerseveringFace = \"\\U0001F623\";\n\n            /// <summary>\n            /// Gets the \"person\" emoji.\n            /// Description: Person.\n            /// </summary>\n            public const string Person = \"\\U0001F9D1\";\n\n            /// <summary>\n            /// Gets the \"person_beard\" emoji.\n            /// Description: Person beard.\n            /// </summary>\n            public const string PersonBeard = \"\\U0001F9D4\";\n\n            /// <summary>\n            /// Gets the \"person_biking\" emoji.\n            /// Description: Person biking.\n            /// </summary>\n            public const string PersonBiking = \"\\U0001F6B4\";\n\n            /// <summary>\n            /// Gets the \"person_blond_hair\" emoji.\n            /// Description: Person blond hair.\n            /// </summary>\n            public const string PersonBlondHair = \"\\U0001F471\";\n\n            /// <summary>\n            /// Gets the \"person_bouncing_ball\" emoji.\n            /// Description: Person bouncing ball.\n            /// </summary>\n            public const string PersonBouncingBall = \"\\U000026F9\";\n\n            /// <summary>\n            /// Gets the \"person_bowing\" emoji.\n            /// Description: Person bowing.\n            /// </summary>\n            public const string PersonBowing = \"\\U0001F647\";\n\n            /// <summary>\n            /// Gets the \"person_cartwheeling\" emoji.\n            /// Description: Person cartwheeling.\n            /// </summary>\n            public const string PersonCartwheeling = \"\\U0001F938\";\n\n            /// <summary>\n            /// Gets the \"person_climbing\" emoji.\n            /// Description: Person climbing.\n            /// </summary>\n            public const string PersonClimbing = \"\\U0001F9D7\";\n\n            /// <summary>\n            /// Gets the \"person_facepalming\" emoji.\n            /// Description: Person facepalming.\n            /// </summary>\n            public const string PersonFacepalming = \"\\U0001F926\";\n\n            /// <summary>\n            /// Gets the \"person_fencing\" emoji.\n            /// Description: Person fencing.\n            /// </summary>\n            public const string PersonFencing = \"\\U0001F93A\";\n\n            /// <summary>\n            /// Gets the \"person_frowning\" emoji.\n            /// Description: Person frowning.\n            /// </summary>\n            public const string PersonFrowning = \"\\U0001F64D\";\n\n            /// <summary>\n            /// Gets the \"person_gesturing_no\" emoji.\n            /// Description: Person gesturing NO.\n            /// </summary>\n            public const string PersonGesturingNo = \"\\U0001F645\";\n\n            /// <summary>\n            /// Gets the \"person_gesturing_ok\" emoji.\n            /// Description: Person gesturing OK.\n            /// </summary>\n            public const string PersonGesturingOk = \"\\U0001F646\";\n\n            /// <summary>\n            /// Gets the \"person_getting_haircut\" emoji.\n            /// Description: Person getting haircut.\n            /// </summary>\n            public const string PersonGettingHaircut = \"\\U0001F487\";\n\n            /// <summary>\n            /// Gets the \"person_getting_massage\" emoji.\n            /// Description: Person getting massage.\n            /// </summary>\n            public const string PersonGettingMassage = \"\\U0001F486\";\n\n            /// <summary>\n            /// Gets the \"person_golfing\" emoji.\n            /// Description: Person golfing.\n            /// </summary>\n            public const string PersonGolfing = \"\\U0001F3CC\";\n\n            /// <summary>\n            /// Gets the \"person_in_bed\" emoji.\n            /// Description: Person in bed.\n            /// </summary>\n            public const string PersonInBed = \"\\U0001F6CC\";\n\n            /// <summary>\n            /// Gets the \"person_in_lotus_position\" emoji.\n            /// Description: Person in lotus position.\n            /// </summary>\n            public const string PersonInLotusPosition = \"\\U0001F9D8\";\n\n            /// <summary>\n            /// Gets the \"person_in_steamy_room\" emoji.\n            /// Description: Person in steamy room.\n            /// </summary>\n            public const string PersonInSteamyRoom = \"\\U0001F9D6\";\n\n            /// <summary>\n            /// Gets the \"person_in_suit_levitating\" emoji.\n            /// Description: Person in suit levitating.\n            /// </summary>\n            public const string PersonInSuitLevitating = \"\\U0001F574\";\n\n            /// <summary>\n            /// Gets the \"person_in_tuxedo\" emoji.\n            /// Description: Person in tuxedo.\n            /// </summary>\n            public const string PersonInTuxedo = \"\\U0001F935\";\n\n            /// <summary>\n            /// Gets the \"person_juggling\" emoji.\n            /// Description: Person juggling.\n            /// </summary>\n            public const string PersonJuggling = \"\\U0001F939\";\n\n            /// <summary>\n            /// Gets the \"person_kneeling\" emoji.\n            /// Description: Person kneeling.\n            /// </summary>\n            public const string PersonKneeling = \"\\U0001F9CE\";\n\n            /// <summary>\n            /// Gets the \"person_lifting_weights\" emoji.\n            /// Description: Person lifting weights.\n            /// </summary>\n            public const string PersonLiftingWeights = \"\\U0001F3CB\";\n\n            /// <summary>\n            /// Gets the \"person_mountain_biking\" emoji.\n            /// Description: Person mountain biking.\n            /// </summary>\n            public const string PersonMountainBiking = \"\\U0001F6B5\";\n\n            /// <summary>\n            /// Gets the \"person_playing_handball\" emoji.\n            /// Description: Person playing handball.\n            /// </summary>\n            public const string PersonPlayingHandball = \"\\U0001F93E\";\n\n            /// <summary>\n            /// Gets the \"person_playing_water_polo\" emoji.\n            /// Description: Person playing water polo.\n            /// </summary>\n            public const string PersonPlayingWaterPolo = \"\\U0001F93D\";\n\n            /// <summary>\n            /// Gets the \"person_pouting\" emoji.\n            /// Description: Person pouting.\n            /// </summary>\n            public const string PersonPouting = \"\\U0001F64E\";\n\n            /// <summary>\n            /// Gets the \"person_raising_hand\" emoji.\n            /// Description: Person raising hand.\n            /// </summary>\n            public const string PersonRaisingHand = \"\\U0001F64B\";\n\n            /// <summary>\n            /// Gets the \"person_rowing_boat\" emoji.\n            /// Description: Person rowing boat.\n            /// </summary>\n            public const string PersonRowingBoat = \"\\U0001F6A3\";\n\n            /// <summary>\n            /// Gets the \"person_running\" emoji.\n            /// Description: Person running.\n            /// </summary>\n            public const string PersonRunning = \"\\U0001F3C3\";\n\n            /// <summary>\n            /// Gets the \"person_shrugging\" emoji.\n            /// Description: Person shrugging.\n            /// </summary>\n            public const string PersonShrugging = \"\\U0001F937\";\n\n            /// <summary>\n            /// Gets the \"person_standing\" emoji.\n            /// Description: Person standing.\n            /// </summary>\n            public const string PersonStanding = \"\\U0001F9CD\";\n\n            /// <summary>\n            /// Gets the \"person_surfing\" emoji.\n            /// Description: Person surfing.\n            /// </summary>\n            public const string PersonSurfing = \"\\U0001F3C4\";\n\n            /// <summary>\n            /// Gets the \"person_swimming\" emoji.\n            /// Description: Person swimming.\n            /// </summary>\n            public const string PersonSwimming = \"\\U0001F3CA\";\n\n            /// <summary>\n            /// Gets the \"person_taking_bath\" emoji.\n            /// Description: Person taking bath.\n            /// </summary>\n            public const string PersonTakingBath = \"\\U0001F6C0\";\n\n            /// <summary>\n            /// Gets the \"person_tipping_hand\" emoji.\n            /// Description: Person tipping hand.\n            /// </summary>\n            public const string PersonTippingHand = \"\\U0001F481\";\n\n            /// <summary>\n            /// Gets the \"person_walking\" emoji.\n            /// Description: Person walking.\n            /// </summary>\n            public const string PersonWalking = \"\\U0001F6B6\";\n\n            /// <summary>\n            /// Gets the \"person_wearing_turban\" emoji.\n            /// Description: Person wearing turban.\n            /// </summary>\n            public const string PersonWearingTurban = \"\\U0001F473\";\n\n            /// <summary>\n            /// Gets the \"person_with_skullcap\" emoji.\n            /// Description: Person with skullcap.\n            /// </summary>\n            public const string PersonWithSkullcap = \"\\U0001F472\";\n\n            /// <summary>\n            /// Gets the \"person_with_veil\" emoji.\n            /// Description: Person with veil.\n            /// </summary>\n            public const string PersonWithVeil = \"\\U0001F470\";\n\n            /// <summary>\n            /// Gets the \"petri_dish\" emoji.\n            /// Description: Petri dish.\n            /// </summary>\n            public const string PetriDish = \"\\U0001F9EB\";\n\n            /// <summary>\n            /// Gets the \"pick\" emoji.\n            /// Description: Pick.\n            /// </summary>\n            public const string Pick = \"\\U000026CF\";\n\n            /// <summary>\n            /// Gets the \"pickup_truck\" emoji.\n            /// Description: Pickup truck.\n            /// </summary>\n            public const string PickupTruck = \"\\U0001F6FB\";\n\n            /// <summary>\n            /// Gets the \"pie\" emoji.\n            /// Description: Pie.\n            /// </summary>\n            public const string Pie = \"\\U0001F967\";\n\n            /// <summary>\n            /// Gets the \"pig\" emoji.\n            /// Description: Pig.\n            /// </summary>\n            public const string Pig = \"\\U0001F416\";\n\n            /// <summary>\n            /// Gets the \"pig_face\" emoji.\n            /// Description: Pig face.\n            /// </summary>\n            public const string PigFace = \"\\U0001F437\";\n\n            /// <summary>\n            /// Gets the \"pig_nose\" emoji.\n            /// Description: Pig nose.\n            /// </summary>\n            public const string PigNose = \"\\U0001F43D\";\n\n            /// <summary>\n            /// Gets the \"pile_of_poo\" emoji.\n            /// Description: Pile of poo.\n            /// </summary>\n            public const string PileOfPoo = \"\\U0001F4A9\";\n\n            /// <summary>\n            /// Gets the \"pill\" emoji.\n            /// Description: Pill.\n            /// </summary>\n            public const string Pill = \"\\U0001F48A\";\n\n            /// <summary>\n            /// Gets the \"piñata\" emoji.\n            /// Description: Piñata.\n            /// </summary>\n            public const string Piñata = \"\\U0001FA85\";\n\n            /// <summary>\n            /// Gets the \"pinched_fingers\" emoji.\n            /// Description: Pinched fingers.\n            /// </summary>\n            public const string PinchedFingers = \"\\U0001F90C\";\n\n            /// <summary>\n            /// Gets the \"pinching_hand\" emoji.\n            /// Description: Pinching hand.\n            /// </summary>\n            public const string PinchingHand = \"\\U0001F90F\";\n\n            /// <summary>\n            /// Gets the \"pineapple\" emoji.\n            /// Description: Pineapple.\n            /// </summary>\n            public const string Pineapple = \"\\U0001F34D\";\n\n            /// <summary>\n            /// Gets the \"pine_decoration\" emoji.\n            /// Description: Pine decoration.\n            /// </summary>\n            public const string PineDecoration = \"\\U0001F38D\";\n\n            /// <summary>\n            /// Gets the \"ping_pong\" emoji.\n            /// Description: Ping pong.\n            /// </summary>\n            public const string PingPong = \"\\U0001F3D3\";\n\n            /// <summary>\n            /// Gets the \"pisces\" emoji.\n            /// Description: Pisces.\n            /// </summary>\n            public const string Pisces = \"\\U00002653\";\n\n            /// <summary>\n            /// Gets the \"pizza\" emoji.\n            /// Description: Pizza.\n            /// </summary>\n            public const string Pizza = \"\\U0001F355\";\n\n            /// <summary>\n            /// Gets the \"placard\" emoji.\n            /// Description: Placard.\n            /// </summary>\n            public const string Placard = \"\\U0001FAA7\";\n\n            /// <summary>\n            /// Gets the \"place_of_worship\" emoji.\n            /// Description: Place of worship.\n            /// </summary>\n            public const string PlaceOfWorship = \"\\U0001F6D0\";\n\n            /// <summary>\n            /// Gets the \"play_button\" emoji.\n            /// Description: Play button.\n            /// </summary>\n            public const string PlayButton = \"\\U000025B6\";\n\n            /// <summary>\n            /// Gets the \"play_or_pause_button\" emoji.\n            /// Description: Play or pause button.\n            /// </summary>\n            public const string PlayOrPauseButton = \"\\U000023EF\";\n\n            /// <summary>\n            /// Gets the \"pleading_face\" emoji.\n            /// Description: Pleading face.\n            /// </summary>\n            public const string PleadingFace = \"\\U0001F97A\";\n\n            /// <summary>\n            /// Gets the \"plunger\" emoji.\n            /// Description: Plunger.\n            /// </summary>\n            public const string Plunger = \"\\U0001FAA0\";\n\n            /// <summary>\n            /// Gets the \"plus\" emoji.\n            /// Description: Plus.\n            /// </summary>\n            public const string Plus = \"\\U00002795\";\n\n            /// <summary>\n            /// Gets the \"police_car\" emoji.\n            /// Description: Police car.\n            /// </summary>\n            public const string PoliceCar = \"\\U0001F693\";\n\n            /// <summary>\n            /// Gets the \"police_car_light\" emoji.\n            /// Description: Police car light.\n            /// </summary>\n            public const string PoliceCarLight = \"\\U0001F6A8\";\n\n            /// <summary>\n            /// Gets the \"police_officer\" emoji.\n            /// Description: Police officer.\n            /// </summary>\n            public const string PoliceOfficer = \"\\U0001F46E\";\n\n            /// <summary>\n            /// Gets the \"poodle\" emoji.\n            /// Description: Poodle.\n            /// </summary>\n            public const string Poodle = \"\\U0001F429\";\n\n            /// <summary>\n            /// Gets the \"pool_8_ball\" emoji.\n            /// Description: Pool 8 ball.\n            /// </summary>\n            public const string Pool8Ball = \"\\U0001F3B1\";\n\n            /// <summary>\n            /// Gets the \"popcorn\" emoji.\n            /// Description: Popcorn.\n            /// </summary>\n            public const string Popcorn = \"\\U0001F37F\";\n\n            /// <summary>\n            /// Gets the \"postal_horn\" emoji.\n            /// Description: Postal horn.\n            /// </summary>\n            public const string PostalHorn = \"\\U0001F4EF\";\n\n            /// <summary>\n            /// Gets the \"postbox\" emoji.\n            /// Description: Postbox.\n            /// </summary>\n            public const string Postbox = \"\\U0001F4EE\";\n\n            /// <summary>\n            /// Gets the \"post_office\" emoji.\n            /// Description: Post office.\n            /// </summary>\n            public const string PostOffice = \"\\U0001F3E4\";\n\n            /// <summary>\n            /// Gets the \"potable_water\" emoji.\n            /// Description: Potable water.\n            /// </summary>\n            public const string PotableWater = \"\\U0001F6B0\";\n\n            /// <summary>\n            /// Gets the \"potato\" emoji.\n            /// Description: Potato.\n            /// </summary>\n            public const string Potato = \"\\U0001F954\";\n\n            /// <summary>\n            /// Gets the \"pot_of_food\" emoji.\n            /// Description: Pot of food.\n            /// </summary>\n            public const string PotOfFood = \"\\U0001F372\";\n\n            /// <summary>\n            /// Gets the \"potted_plant\" emoji.\n            /// Description: Potted plant.\n            /// </summary>\n            public const string PottedPlant = \"\\U0001FAB4\";\n\n            /// <summary>\n            /// Gets the \"poultry_leg\" emoji.\n            /// Description: Poultry leg.\n            /// </summary>\n            public const string PoultryLeg = \"\\U0001F357\";\n\n            /// <summary>\n            /// Gets the \"pound_banknote\" emoji.\n            /// Description: Pound banknote.\n            /// </summary>\n            public const string PoundBanknote = \"\\U0001F4B7\";\n\n            /// <summary>\n            /// Gets the \"pouting_cat\" emoji.\n            /// Description: Pouting cat.\n            /// </summary>\n            public const string PoutingCat = \"\\U0001F63E\";\n\n            /// <summary>\n            /// Gets the \"pouting_face\" emoji.\n            /// Description: Pouting face.\n            /// </summary>\n            public const string PoutingFace = \"\\U0001F621\";\n\n            /// <summary>\n            /// Gets the \"prayer_beads\" emoji.\n            /// Description: Prayer beads.\n            /// </summary>\n            public const string PrayerBeads = \"\\U0001F4FF\";\n\n            /// <summary>\n            /// Gets the \"pregnant_woman\" emoji.\n            /// Description: Pregnant woman.\n            /// </summary>\n            public const string PregnantWoman = \"\\U0001F930\";\n\n            /// <summary>\n            /// Gets the \"pretzel\" emoji.\n            /// Description: Pretzel.\n            /// </summary>\n            public const string Pretzel = \"\\U0001F968\";\n\n            /// <summary>\n            /// Gets the \"prince\" emoji.\n            /// Description: Prince.\n            /// </summary>\n            public const string Prince = \"\\U0001F934\";\n\n            /// <summary>\n            /// Gets the \"princess\" emoji.\n            /// Description: Princess.\n            /// </summary>\n            public const string Princess = \"\\U0001F478\";\n\n            /// <summary>\n            /// Gets the \"printer\" emoji.\n            /// Description: Printer.\n            /// </summary>\n            public const string Printer = \"\\U0001F5A8\";\n\n            /// <summary>\n            /// Gets the \"prohibited\" emoji.\n            /// Description: Prohibited.\n            /// </summary>\n            public const string Prohibited = \"\\U0001F6AB\";\n\n            /// <summary>\n            /// Gets the \"purple_circle\" emoji.\n            /// Description: Purple circle.\n            /// </summary>\n            public const string PurpleCircle = \"\\U0001F7E3\";\n\n            /// <summary>\n            /// Gets the \"purple_heart\" emoji.\n            /// Description: Purple heart.\n            /// </summary>\n            public const string PurpleHeart = \"\\U0001F49C\";\n\n            /// <summary>\n            /// Gets the \"purple_square\" emoji.\n            /// Description: Purple square.\n            /// </summary>\n            public const string PurpleSquare = \"\\U0001F7EA\";\n\n            /// <summary>\n            /// Gets the \"purse\" emoji.\n            /// Description: Purse.\n            /// </summary>\n            public const string Purse = \"\\U0001F45B\";\n\n            /// <summary>\n            /// Gets the \"pushpin\" emoji.\n            /// Description: Pushpin.\n            /// </summary>\n            public const string Pushpin = \"\\U0001F4CC\";\n\n            /// <summary>\n            /// Gets the \"puzzle_piece\" emoji.\n            /// Description: Puzzle piece.\n            /// </summary>\n            public const string PuzzlePiece = \"\\U0001F9E9\";\n\n            /// <summary>\n            /// Gets the \"rabbit\" emoji.\n            /// Description: Rabbit.\n            /// </summary>\n            public const string Rabbit = \"\\U0001F407\";\n\n            /// <summary>\n            /// Gets the \"rabbit_face\" emoji.\n            /// Description: Rabbit face.\n            /// </summary>\n            public const string RabbitFace = \"\\U0001F430\";\n\n            /// <summary>\n            /// Gets the \"raccoon\" emoji.\n            /// Description: Raccoon.\n            /// </summary>\n            public const string Raccoon = \"\\U0001F99D\";\n\n            /// <summary>\n            /// Gets the \"racing_car\" emoji.\n            /// Description: Racing car.\n            /// </summary>\n            public const string RacingCar = \"\\U0001F3CE\";\n\n            /// <summary>\n            /// Gets the \"radio\" emoji.\n            /// Description: Radio.\n            /// </summary>\n            public const string Radio = \"\\U0001F4FB\";\n\n            /// <summary>\n            /// Gets the \"radioactive\" emoji.\n            /// Description: Radioactive.\n            /// </summary>\n            public const string Radioactive = \"\\U00002622\";\n\n            /// <summary>\n            /// Gets the \"radio_button\" emoji.\n            /// Description: Radio button.\n            /// </summary>\n            public const string RadioButton = \"\\U0001F518\";\n\n            /// <summary>\n            /// Gets the \"railway_car\" emoji.\n            /// Description: Railway car.\n            /// </summary>\n            public const string RailwayCar = \"\\U0001F683\";\n\n            /// <summary>\n            /// Gets the \"railway_track\" emoji.\n            /// Description: Railway track.\n            /// </summary>\n            public const string RailwayTrack = \"\\U0001F6E4\";\n\n            /// <summary>\n            /// Gets the \"rainbow\" emoji.\n            /// Description: Rainbow.\n            /// </summary>\n            public const string Rainbow = \"\\U0001F308\";\n\n            /// <summary>\n            /// Gets the \"raised_back_of_hand\" emoji.\n            /// Description: Raised back of hand.\n            /// </summary>\n            public const string RaisedBackOfHand = \"\\U0001F91A\";\n\n            /// <summary>\n            /// Gets the \"raised_fist\" emoji.\n            /// Description: Raised fist.\n            /// </summary>\n            public const string RaisedFist = \"\\U0000270A\";\n\n            /// <summary>\n            /// Gets the \"raised_hand\" emoji.\n            /// Description: Raised hand.\n            /// </summary>\n            public const string RaisedHand = \"\\U0000270B\";\n\n            /// <summary>\n            /// Gets the \"raising_hands\" emoji.\n            /// Description: Raising hands.\n            /// </summary>\n            public const string RaisingHands = \"\\U0001F64C\";\n\n            /// <summary>\n            /// Gets the \"ram\" emoji.\n            /// Description: Ram.\n            /// </summary>\n            public const string Ram = \"\\U0001F40F\";\n\n            /// <summary>\n            /// Gets the \"rat\" emoji.\n            /// Description: Rat.\n            /// </summary>\n            public const string Rat = \"\\U0001F400\";\n\n            /// <summary>\n            /// Gets the \"razor\" emoji.\n            /// Description: Razor.\n            /// </summary>\n            public const string Razor = \"\\U0001FA92\";\n\n            /// <summary>\n            /// Gets the \"receipt\" emoji.\n            /// Description: Receipt.\n            /// </summary>\n            public const string Receipt = \"\\U0001F9FE\";\n\n            /// <summary>\n            /// Gets the \"record_button\" emoji.\n            /// Description: Record button.\n            /// </summary>\n            public const string RecordButton = \"\\U000023FA\";\n\n            /// <summary>\n            /// Gets the \"recycling_symbol\" emoji.\n            /// Description: Recycling symbol.\n            /// </summary>\n            public const string RecyclingSymbol = \"\\U0000267B\";\n\n            /// <summary>\n            /// Gets the \"red_apple\" emoji.\n            /// Description: Red apple.\n            /// </summary>\n            public const string RedApple = \"\\U0001F34E\";\n\n            /// <summary>\n            /// Gets the \"red_circle\" emoji.\n            /// Description: Red circle.\n            /// </summary>\n            public const string RedCircle = \"\\U0001F534\";\n\n            /// <summary>\n            /// Gets the \"red_envelope\" emoji.\n            /// Description: Red envelope.\n            /// </summary>\n            public const string RedEnvelope = \"\\U0001F9E7\";\n\n            /// <summary>\n            /// Gets the \"red_exclamation_mark\" emoji.\n            /// Description: Red exclamation mark.\n            /// </summary>\n            public const string RedExclamationMark = \"\\U00002757\";\n\n            /// <summary>\n            /// Gets the \"red_hair\" emoji.\n            /// Description: Red hair.\n            /// </summary>\n            public const string RedHair = \"\\U0001F9B0\";\n\n            /// <summary>\n            /// Gets the \"red_heart\" emoji.\n            /// Description: Red heart.\n            /// </summary>\n            public const string RedHeart = \"\\U00002764\";\n\n            /// <summary>\n            /// Gets the \"red_paper_lantern\" emoji.\n            /// Description: Red paper lantern.\n            /// </summary>\n            public const string RedPaperLantern = \"\\U0001F3EE\";\n\n            /// <summary>\n            /// Gets the \"red_question_mark\" emoji.\n            /// Description: Red question mark.\n            /// </summary>\n            public const string RedQuestionMark = \"\\U00002753\";\n\n            /// <summary>\n            /// Gets the \"red_square\" emoji.\n            /// Description: Red square.\n            /// </summary>\n            public const string RedSquare = \"\\U0001F7E5\";\n\n            /// <summary>\n            /// Gets the \"red_triangle_pointed_down\" emoji.\n            /// Description: Red triangle pointed down.\n            /// </summary>\n            public const string RedTrianglePointedDown = \"\\U0001F53B\";\n\n            /// <summary>\n            /// Gets the \"red_triangle_pointed_up\" emoji.\n            /// Description: Red triangle pointed up.\n            /// </summary>\n            public const string RedTrianglePointedUp = \"\\U0001F53A\";\n\n            /// <summary>\n            /// Gets the \"registered\" emoji.\n            /// Description: Registered.\n            /// </summary>\n            public const string Registered = \"\\U000000AE\";\n\n            /// <summary>\n            /// Gets the \"relieved_face\" emoji.\n            /// Description: Relieved face.\n            /// </summary>\n            public const string RelievedFace = \"\\U0001F60C\";\n\n            /// <summary>\n            /// Gets the \"reminder_ribbon\" emoji.\n            /// Description: Reminder ribbon.\n            /// </summary>\n            public const string ReminderRibbon = \"\\U0001F397\";\n\n            /// <summary>\n            /// Gets the \"repeat_button\" emoji.\n            /// Description: Repeat button.\n            /// </summary>\n            public const string RepeatButton = \"\\U0001F501\";\n\n            /// <summary>\n            /// Gets the \"repeat_single_button\" emoji.\n            /// Description: Repeat single button.\n            /// </summary>\n            public const string RepeatSingleButton = \"\\U0001F502\";\n\n            /// <summary>\n            /// Gets the \"rescue_workers_helmet\" emoji.\n            /// Description: Rescue worker s helmet.\n            /// </summary>\n            public const string RescueWorkersHelmet = \"\\U000026D1\";\n\n            /// <summary>\n            /// Gets the \"restroom\" emoji.\n            /// Description: Restroom.\n            /// </summary>\n            public const string Restroom = \"\\U0001F6BB\";\n\n            /// <summary>\n            /// Gets the \"reverse_button\" emoji.\n            /// Description: Reverse button.\n            /// </summary>\n            public const string ReverseButton = \"\\U000025C0\";\n\n            /// <summary>\n            /// Gets the \"revolving_hearts\" emoji.\n            /// Description: Revolving hearts.\n            /// </summary>\n            public const string RevolvingHearts = \"\\U0001F49E\";\n\n            /// <summary>\n            /// Gets the \"rhinoceros\" emoji.\n            /// Description: Rhinoceros.\n            /// </summary>\n            public const string Rhinoceros = \"\\U0001F98F\";\n\n            /// <summary>\n            /// Gets the \"ribbon\" emoji.\n            /// Description: Ribbon.\n            /// </summary>\n            public const string Ribbon = \"\\U0001F380\";\n\n            /// <summary>\n            /// Gets the \"rice_ball\" emoji.\n            /// Description: Rice ball.\n            /// </summary>\n            public const string RiceBall = \"\\U0001F359\";\n\n            /// <summary>\n            /// Gets the \"rice_cracker\" emoji.\n            /// Description: Rice cracker.\n            /// </summary>\n            public const string RiceCracker = \"\\U0001F358\";\n\n            /// <summary>\n            /// Gets the \"right_anger_bubble\" emoji.\n            /// Description: Right anger bubble.\n            /// </summary>\n            public const string RightAngerBubble = \"\\U0001F5EF\";\n\n            /// <summary>\n            /// Gets the \"right_arrow\" emoji.\n            /// Description: Right arrow.\n            /// </summary>\n            public const string RightArrow = \"\\U000027A1\";\n\n            /// <summary>\n            /// Gets the \"right_arrow_curving_down\" emoji.\n            /// Description: Right arrow curving down.\n            /// </summary>\n            public const string RightArrowCurvingDown = \"\\U00002935\";\n\n            /// <summary>\n            /// Gets the \"right_arrow_curving_left\" emoji.\n            /// Description: Right arrow curving left.\n            /// </summary>\n            public const string RightArrowCurvingLeft = \"\\U000021A9\";\n\n            /// <summary>\n            /// Gets the \"right_arrow_curving_up\" emoji.\n            /// Description: Right arrow curving up.\n            /// </summary>\n            public const string RightArrowCurvingUp = \"\\U00002934\";\n\n            /// <summary>\n            /// Gets the \"right_facing_fist\" emoji.\n            /// Description: right facing fist.\n            /// </summary>\n            public const string RightFacingFist = \"\\U0001F91C\";\n\n            /// <summary>\n            /// Gets the \"ring\" emoji.\n            /// Description: Ring.\n            /// </summary>\n            public const string Ring = \"\\U0001F48D\";\n\n            /// <summary>\n            /// Gets the \"ringed_planet\" emoji.\n            /// Description: Ringed planet.\n            /// </summary>\n            public const string RingedPlanet = \"\\U0001FA90\";\n\n            /// <summary>\n            /// Gets the \"roasted_sweet_potato\" emoji.\n            /// Description: Roasted sweet potato.\n            /// </summary>\n            public const string RoastedSweetPotato = \"\\U0001F360\";\n\n            /// <summary>\n            /// Gets the \"robot\" emoji.\n            /// Description: Robot.\n            /// </summary>\n            public const string Robot = \"\\U0001F916\";\n\n            /// <summary>\n            /// Gets the \"rock\" emoji.\n            /// Description: Rock.\n            /// </summary>\n            public const string Rock = \"\\U0001FAA8\";\n\n            /// <summary>\n            /// Gets the \"rocket\" emoji.\n            /// Description: Rocket.\n            /// </summary>\n            public const string Rocket = \"\\U0001F680\";\n\n            /// <summary>\n            /// Gets the \"rolled_up_newspaper\" emoji.\n            /// Description: rolled up newspaper.\n            /// </summary>\n            public const string RolledUpNewspaper = \"\\U0001F5DE\";\n\n            /// <summary>\n            /// Gets the \"roller_coaster\" emoji.\n            /// Description: Roller coaster.\n            /// </summary>\n            public const string RollerCoaster = \"\\U0001F3A2\";\n\n            /// <summary>\n            /// Gets the \"roller_skate\" emoji.\n            /// Description: Roller skate.\n            /// </summary>\n            public const string RollerSkate = \"\\U0001F6FC\";\n\n            /// <summary>\n            /// Gets the \"rolling_on_the_floor_laughing\" emoji.\n            /// Description: Rolling on the floor laughing.\n            /// </summary>\n            public const string RollingOnTheFloorLaughing = \"\\U0001F923\";\n\n            /// <summary>\n            /// Gets the \"roll_of_paper\" emoji.\n            /// Description: Roll of paper.\n            /// </summary>\n            public const string RollOfPaper = \"\\U0001F9FB\";\n\n            /// <summary>\n            /// Gets the \"rooster\" emoji.\n            /// Description: Rooster.\n            /// </summary>\n            public const string Rooster = \"\\U0001F413\";\n\n            /// <summary>\n            /// Gets the \"rose\" emoji.\n            /// Description: Rose.\n            /// </summary>\n            public const string Rose = \"\\U0001F339\";\n\n            /// <summary>\n            /// Gets the \"rosette\" emoji.\n            /// Description: Rosette.\n            /// </summary>\n            public const string Rosette = \"\\U0001F3F5\";\n\n            /// <summary>\n            /// Gets the \"round_pushpin\" emoji.\n            /// Description: Round pushpin.\n            /// </summary>\n            public const string RoundPushpin = \"\\U0001F4CD\";\n\n            /// <summary>\n            /// Gets the \"rugby_football\" emoji.\n            /// Description: Rugby football.\n            /// </summary>\n            public const string RugbyFootball = \"\\U0001F3C9\";\n\n            /// <summary>\n            /// Gets the \"running_shirt\" emoji.\n            /// Description: Running shirt.\n            /// </summary>\n            public const string RunningShirt = \"\\U0001F3BD\";\n\n            /// <summary>\n            /// Gets the \"running_shoe\" emoji.\n            /// Description: Running shoe.\n            /// </summary>\n            public const string RunningShoe = \"\\U0001F45F\";\n\n            /// <summary>\n            /// Gets the \"sad_but_relieved_face\" emoji.\n            /// Description: Sad but relieved face.\n            /// </summary>\n            public const string SadButRelievedFace = \"\\U0001F625\";\n\n            /// <summary>\n            /// Gets the \"safety_pin\" emoji.\n            /// Description: Safety pin.\n            /// </summary>\n            public const string SafetyPin = \"\\U0001F9F7\";\n\n            /// <summary>\n            /// Gets the \"safety_vest\" emoji.\n            /// Description: Safety vest.\n            /// </summary>\n            public const string SafetyVest = \"\\U0001F9BA\";\n\n            /// <summary>\n            /// Gets the \"sagittarius\" emoji.\n            /// Description: Sagittarius.\n            /// </summary>\n            public const string Sagittarius = \"\\U00002650\";\n\n            /// <summary>\n            /// Gets the \"sailboat\" emoji.\n            /// Description: Sailboat.\n            /// </summary>\n            public const string Sailboat = \"\\U000026F5\";\n\n            /// <summary>\n            /// Gets the \"sake\" emoji.\n            /// Description: Sake.\n            /// </summary>\n            public const string Sake = \"\\U0001F376\";\n\n            /// <summary>\n            /// Gets the \"salt\" emoji.\n            /// Description: Salt.\n            /// </summary>\n            public const string Salt = \"\\U0001F9C2\";\n\n            /// <summary>\n            /// Gets the \"sandwich\" emoji.\n            /// Description: Sandwich.\n            /// </summary>\n            public const string Sandwich = \"\\U0001F96A\";\n\n            /// <summary>\n            /// Gets the \"santa_claus\" emoji.\n            /// Description: Santa claus.\n            /// </summary>\n            public const string SantaClaus = \"\\U0001F385\";\n\n            /// <summary>\n            /// Gets the \"sari\" emoji.\n            /// Description: Sari.\n            /// </summary>\n            public const string Sari = \"\\U0001F97B\";\n\n            /// <summary>\n            /// Gets the \"satellite\" emoji.\n            /// Description: Satellite.\n            /// </summary>\n            public const string Satellite = \"\\U0001F6F0\";\n\n            /// <summary>\n            /// Gets the \"satellite_antenna\" emoji.\n            /// Description: Satellite antenna.\n            /// </summary>\n            public const string SatelliteAntenna = \"\\U0001F4E1\";\n\n            /// <summary>\n            /// Gets the \"sauropod\" emoji.\n            /// Description: Sauropod.\n            /// </summary>\n            public const string Sauropod = \"\\U0001F995\";\n\n            /// <summary>\n            /// Gets the \"saxophone\" emoji.\n            /// Description: Saxophone.\n            /// </summary>\n            public const string Saxophone = \"\\U0001F3B7\";\n\n            /// <summary>\n            /// Gets the \"scarf\" emoji.\n            /// Description: Scarf.\n            /// </summary>\n            public const string Scarf = \"\\U0001F9E3\";\n\n            /// <summary>\n            /// Gets the \"school\" emoji.\n            /// Description: School.\n            /// </summary>\n            public const string School = \"\\U0001F3EB\";\n\n            /// <summary>\n            /// Gets the \"scissors\" emoji.\n            /// Description: Scissors.\n            /// </summary>\n            public const string Scissors = \"\\U00002702\";\n\n            /// <summary>\n            /// Gets the \"scorpio\" emoji.\n            /// Description: Scorpio.\n            /// </summary>\n            public const string Scorpio = \"\\U0000264F\";\n\n            /// <summary>\n            /// Gets the \"scorpion\" emoji.\n            /// Description: Scorpion.\n            /// </summary>\n            public const string Scorpion = \"\\U0001F982\";\n\n            /// <summary>\n            /// Gets the \"screwdriver\" emoji.\n            /// Description: Screwdriver.\n            /// </summary>\n            public const string Screwdriver = \"\\U0001FA9B\";\n\n            /// <summary>\n            /// Gets the \"scroll\" emoji.\n            /// Description: Scroll.\n            /// </summary>\n            public const string Scroll = \"\\U0001F4DC\";\n\n            /// <summary>\n            /// Gets the \"seal\" emoji.\n            /// Description: Seal.\n            /// </summary>\n            public const string Seal = \"\\U0001F9AD\";\n\n            /// <summary>\n            /// Gets the \"seat\" emoji.\n            /// Description: Seat.\n            /// </summary>\n            public const string Seat = \"\\U0001F4BA\";\n\n            /// <summary>\n            /// Gets the \"2nd_place_medal\" emoji.\n            /// Description: 2nd place medal.\n            /// </summary>\n            public const string SecondPlaceMedal = \"\\U0001F948\";\n\n            /// <summary>\n            /// Gets the \"seedling\" emoji.\n            /// Description: Seedling.\n            /// </summary>\n            public const string Seedling = \"\\U0001F331\";\n\n            /// <summary>\n            /// Gets the \"see_no_evil_monkey\" emoji.\n            /// Description: see no evil monkey.\n            /// </summary>\n            public const string SeeNoEvilMonkey = \"\\U0001F648\";\n\n            /// <summary>\n            /// Gets the \"selfie\" emoji.\n            /// Description: Selfie.\n            /// </summary>\n            public const string Selfie = \"\\U0001F933\";\n\n            /// <summary>\n            /// Gets the \"seven_o_clock\" emoji.\n            /// Description: Seven o clock.\n            /// </summary>\n            public const string SevenOClock = \"\\U0001F556\";\n\n            /// <summary>\n            /// Gets the \"seven_thirty\" emoji.\n            /// Description: seven thirty.\n            /// </summary>\n            public const string SevenThirty = \"\\U0001F562\";\n\n            /// <summary>\n            /// Gets the \"sewing_needle\" emoji.\n            /// Description: Sewing needle.\n            /// </summary>\n            public const string SewingNeedle = \"\\U0001FAA1\";\n\n            /// <summary>\n            /// Gets the \"shallow_pan_of_food\" emoji.\n            /// Description: Shallow pan of food.\n            /// </summary>\n            public const string ShallowPanOfFood = \"\\U0001F958\";\n\n            /// <summary>\n            /// Gets the \"shamrock\" emoji.\n            /// Description: Shamrock.\n            /// </summary>\n            public const string Shamrock = \"\\U00002618\";\n\n            /// <summary>\n            /// Gets the \"shark\" emoji.\n            /// Description: Shark.\n            /// </summary>\n            public const string Shark = \"\\U0001F988\";\n\n            /// <summary>\n            /// Gets the \"shaved_ice\" emoji.\n            /// Description: Shaved ice.\n            /// </summary>\n            public const string ShavedIce = \"\\U0001F367\";\n\n            /// <summary>\n            /// Gets the \"sheaf_of_rice\" emoji.\n            /// Description: Sheaf of rice.\n            /// </summary>\n            public const string SheafOfRice = \"\\U0001F33E\";\n\n            /// <summary>\n            /// Gets the \"shield\" emoji.\n            /// Description: Shield.\n            /// </summary>\n            public const string Shield = \"\\U0001F6E1\";\n\n            /// <summary>\n            /// Gets the \"shinto_shrine\" emoji.\n            /// Description: Shinto shrine.\n            /// </summary>\n            public const string ShintoShrine = \"\\U000026E9\";\n\n            /// <summary>\n            /// Gets the \"ship\" emoji.\n            /// Description: Ship.\n            /// </summary>\n            public const string Ship = \"\\U0001F6A2\";\n\n            /// <summary>\n            /// Gets the \"shooting_star\" emoji.\n            /// Description: Shooting star.\n            /// </summary>\n            public const string ShootingStar = \"\\U0001F320\";\n\n            /// <summary>\n            /// Gets the \"shopping_bags\" emoji.\n            /// Description: Shopping bags.\n            /// </summary>\n            public const string ShoppingBags = \"\\U0001F6CD\";\n\n            /// <summary>\n            /// Gets the \"shopping_cart\" emoji.\n            /// Description: Shopping cart.\n            /// </summary>\n            public const string ShoppingCart = \"\\U0001F6D2\";\n\n            /// <summary>\n            /// Gets the \"shortcake\" emoji.\n            /// Description: Shortcake.\n            /// </summary>\n            public const string Shortcake = \"\\U0001F370\";\n\n            /// <summary>\n            /// Gets the \"shorts\" emoji.\n            /// Description: Shorts.\n            /// </summary>\n            public const string Shorts = \"\\U0001FA73\";\n\n            /// <summary>\n            /// Gets the \"shower\" emoji.\n            /// Description: Shower.\n            /// </summary>\n            public const string Shower = \"\\U0001F6BF\";\n\n            /// <summary>\n            /// Gets the \"shrimp\" emoji.\n            /// Description: Shrimp.\n            /// </summary>\n            public const string Shrimp = \"\\U0001F990\";\n\n            /// <summary>\n            /// Gets the \"shuffle_tracks_button\" emoji.\n            /// Description: Shuffle tracks button.\n            /// </summary>\n            public const string ShuffleTracksButton = \"\\U0001F500\";\n\n            /// <summary>\n            /// Gets the \"shushing_face\" emoji.\n            /// Description: Shushing face.\n            /// </summary>\n            public const string ShushingFace = \"\\U0001F92B\";\n\n            /// <summary>\n            /// Gets the \"sign_of_the_horns\" emoji.\n            /// Description: Sign of the horns.\n            /// </summary>\n            public const string SignOfTheHorns = \"\\U0001F918\";\n\n            /// <summary>\n            /// Gets the \"six_o_clock\" emoji.\n            /// Description: Six o clock.\n            /// </summary>\n            public const string SixOClock = \"\\U0001F555\";\n\n            /// <summary>\n            /// Gets the \"six_thirty\" emoji.\n            /// Description: six thirty.\n            /// </summary>\n            public const string SixThirty = \"\\U0001F561\";\n\n            /// <summary>\n            /// Gets the \"skateboard\" emoji.\n            /// Description: Skateboard.\n            /// </summary>\n            public const string Skateboard = \"\\U0001F6F9\";\n\n            /// <summary>\n            /// Gets the \"skier\" emoji.\n            /// Description: Skier.\n            /// </summary>\n            public const string Skier = \"\\U000026F7\";\n\n            /// <summary>\n            /// Gets the \"skis\" emoji.\n            /// Description: Skis.\n            /// </summary>\n            public const string Skis = \"\\U0001F3BF\";\n\n            /// <summary>\n            /// Gets the \"skull\" emoji.\n            /// Description: Skull.\n            /// </summary>\n            public const string Skull = \"\\U0001F480\";\n\n            /// <summary>\n            /// Gets the \"skull_and_crossbones\" emoji.\n            /// Description: Skull and crossbones.\n            /// </summary>\n            public const string SkullAndCrossbones = \"\\U00002620\";\n\n            /// <summary>\n            /// Gets the \"skunk\" emoji.\n            /// Description: Skunk.\n            /// </summary>\n            public const string Skunk = \"\\U0001F9A8\";\n\n            /// <summary>\n            /// Gets the \"sled\" emoji.\n            /// Description: Sled.\n            /// </summary>\n            public const string Sled = \"\\U0001F6F7\";\n\n            /// <summary>\n            /// Gets the \"sleeping_face\" emoji.\n            /// Description: Sleeping face.\n            /// </summary>\n            public const string SleepingFace = \"\\U0001F634\";\n\n            /// <summary>\n            /// Gets the \"sleepy_face\" emoji.\n            /// Description: Sleepy face.\n            /// </summary>\n            public const string SleepyFace = \"\\U0001F62A\";\n\n            /// <summary>\n            /// Gets the \"slightly_frowning_face\" emoji.\n            /// Description: Slightly frowning face.\n            /// </summary>\n            public const string SlightlyFrowningFace = \"\\U0001F641\";\n\n            /// <summary>\n            /// Gets the \"slightly_smiling_face\" emoji.\n            /// Description: Slightly smiling face.\n            /// </summary>\n            public const string SlightlySmilingFace = \"\\U0001F642\";\n\n            /// <summary>\n            /// Gets the \"sloth\" emoji.\n            /// Description: Sloth.\n            /// </summary>\n            public const string Sloth = \"\\U0001F9A5\";\n\n            /// <summary>\n            /// Gets the \"slot_machine\" emoji.\n            /// Description: Slot machine.\n            /// </summary>\n            public const string SlotMachine = \"\\U0001F3B0\";\n\n            /// <summary>\n            /// Gets the \"small_airplane\" emoji.\n            /// Description: Small airplane.\n            /// </summary>\n            public const string SmallAirplane = \"\\U0001F6E9\";\n\n            /// <summary>\n            /// Gets the \"small_blue_diamond\" emoji.\n            /// Description: Small blue diamond.\n            /// </summary>\n            public const string SmallBlueDiamond = \"\\U0001F539\";\n\n            /// <summary>\n            /// Gets the \"small_orange_diamond\" emoji.\n            /// Description: Small orange diamond.\n            /// </summary>\n            public const string SmallOrangeDiamond = \"\\U0001F538\";\n\n            /// <summary>\n            /// Gets the \"smiling_cat_with_heart_eyes\" emoji.\n            /// Description: smiling cat with heart eyes.\n            /// </summary>\n            public const string SmilingCatWithHeartEyes = \"\\U0001F63B\";\n\n            /// <summary>\n            /// Gets the \"smiling_face\" emoji.\n            /// Description: Smiling face.\n            /// </summary>\n            public const string SmilingFace = \"\\U0000263A\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_halo\" emoji.\n            /// Description: Smiling face with halo.\n            /// </summary>\n            public const string SmilingFaceWithHalo = \"\\U0001F607\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_heart_eyes\" emoji.\n            /// Description: smiling face with heart eyes.\n            /// </summary>\n            public const string SmilingFaceWithHeartEyes = \"\\U0001F60D\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_hearts\" emoji.\n            /// Description: Smiling face with hearts.\n            /// </summary>\n            public const string SmilingFaceWithHearts = \"\\U0001F970\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_horns\" emoji.\n            /// Description: Smiling face with horns.\n            /// </summary>\n            public const string SmilingFaceWithHorns = \"\\U0001F608\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_smiling_eyes\" emoji.\n            /// Description: Smiling face with smiling eyes.\n            /// </summary>\n            public const string SmilingFaceWithSmilingEyes = \"\\U0001F60A\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_sunglasses\" emoji.\n            /// Description: Smiling face with sunglasses.\n            /// </summary>\n            public const string SmilingFaceWithSunglasses = \"\\U0001F60E\";\n\n            /// <summary>\n            /// Gets the \"smiling_face_with_tear\" emoji.\n            /// Description: Smiling face with tear.\n            /// </summary>\n            public const string SmilingFaceWithTear = \"\\U0001F972\";\n\n            /// <summary>\n            /// Gets the \"smirking_face\" emoji.\n            /// Description: Smirking face.\n            /// </summary>\n            public const string SmirkingFace = \"\\U0001F60F\";\n\n            /// <summary>\n            /// Gets the \"snail\" emoji.\n            /// Description: Snail.\n            /// </summary>\n            public const string Snail = \"\\U0001F40C\";\n\n            /// <summary>\n            /// Gets the \"snake\" emoji.\n            /// Description: Snake.\n            /// </summary>\n            public const string Snake = \"\\U0001F40D\";\n\n            /// <summary>\n            /// Gets the \"sneezing_face\" emoji.\n            /// Description: Sneezing face.\n            /// </summary>\n            public const string SneezingFace = \"\\U0001F927\";\n\n            /// <summary>\n            /// Gets the \"snowboarder\" emoji.\n            /// Description: Snowboarder.\n            /// </summary>\n            public const string Snowboarder = \"\\U0001F3C2\";\n\n            /// <summary>\n            /// Gets the \"snow_capped_mountain\" emoji.\n            /// Description: snow capped mountain.\n            /// </summary>\n            public const string SnowCappedMountain = \"\\U0001F3D4\";\n\n            /// <summary>\n            /// Gets the \"snowflake\" emoji.\n            /// Description: Snowflake.\n            /// </summary>\n            public const string Snowflake = \"\\U00002744\";\n\n            /// <summary>\n            /// Gets the \"snowman\" emoji.\n            /// Description: Snowman.\n            /// </summary>\n            public const string Snowman = \"\\U00002603\";\n\n            /// <summary>\n            /// Gets the \"snowman_without_snow\" emoji.\n            /// Description: Snowman without snow.\n            /// </summary>\n            public const string SnowmanWithoutSnow = \"\\U000026C4\";\n\n            /// <summary>\n            /// Gets the \"soap\" emoji.\n            /// Description: Soap.\n            /// </summary>\n            public const string Soap = \"\\U0001F9FC\";\n\n            /// <summary>\n            /// Gets the \"soccer_ball\" emoji.\n            /// Description: Soccer ball.\n            /// </summary>\n            public const string SoccerBall = \"\\U000026BD\";\n\n            /// <summary>\n            /// Gets the \"socks\" emoji.\n            /// Description: Socks.\n            /// </summary>\n            public const string Socks = \"\\U0001F9E6\";\n\n            /// <summary>\n            /// Gets the \"softball\" emoji.\n            /// Description: Softball.\n            /// </summary>\n            public const string Softball = \"\\U0001F94E\";\n\n            /// <summary>\n            /// Gets the \"soft_ice_cream\" emoji.\n            /// Description: Soft ice cream.\n            /// </summary>\n            public const string SoftIceCream = \"\\U0001F366\";\n\n            /// <summary>\n            /// Gets the \"soon_arrow\" emoji.\n            /// Description: SOON arrow.\n            /// </summary>\n            public const string SoonArrow = \"\\U0001F51C\";\n\n            /// <summary>\n            /// Gets the \"sos_button\" emoji.\n            /// Description: SOS button.\n            /// </summary>\n            public const string SosButton = \"\\U0001F198\";\n\n            /// <summary>\n            /// Gets the \"spade_suit\" emoji.\n            /// Description: Spade suit.\n            /// </summary>\n            public const string SpadeSuit = \"\\U00002660\";\n\n            /// <summary>\n            /// Gets the \"spaghetti\" emoji.\n            /// Description: Spaghetti.\n            /// </summary>\n            public const string Spaghetti = \"\\U0001F35D\";\n\n            /// <summary>\n            /// Gets the \"sparkle\" emoji.\n            /// Description: Sparkle.\n            /// </summary>\n            public const string Sparkle = \"\\U00002747\";\n\n            /// <summary>\n            /// Gets the \"sparkler\" emoji.\n            /// Description: Sparkler.\n            /// </summary>\n            public const string Sparkler = \"\\U0001F387\";\n\n            /// <summary>\n            /// Gets the \"sparkles\" emoji.\n            /// Description: Sparkles.\n            /// </summary>\n            public const string Sparkles = \"\\U00002728\";\n\n            /// <summary>\n            /// Gets the \"sparkling_heart\" emoji.\n            /// Description: Sparkling heart.\n            /// </summary>\n            public const string SparklingHeart = \"\\U0001F496\";\n\n            /// <summary>\n            /// Gets the \"speaker_high_volume\" emoji.\n            /// Description: Speaker high volume.\n            /// </summary>\n            public const string SpeakerHighVolume = \"\\U0001F50A\";\n\n            /// <summary>\n            /// Gets the \"speaker_low_volume\" emoji.\n            /// Description: Speaker low volume.\n            /// </summary>\n            public const string SpeakerLowVolume = \"\\U0001F508\";\n\n            /// <summary>\n            /// Gets the \"speaker_medium_volume\" emoji.\n            /// Description: Speaker medium volume.\n            /// </summary>\n            public const string SpeakerMediumVolume = \"\\U0001F509\";\n\n            /// <summary>\n            /// Gets the \"speaking_head\" emoji.\n            /// Description: Speaking head.\n            /// </summary>\n            public const string SpeakingHead = \"\\U0001F5E3\";\n\n            /// <summary>\n            /// Gets the \"speak_no_evil_monkey\" emoji.\n            /// Description: speak no evil monkey.\n            /// </summary>\n            public const string SpeakNoEvilMonkey = \"\\U0001F64A\";\n\n            /// <summary>\n            /// Gets the \"speech_balloon\" emoji.\n            /// Description: Speech balloon.\n            /// </summary>\n            public const string SpeechBalloon = \"\\U0001F4AC\";\n\n            /// <summary>\n            /// Gets the \"speedboat\" emoji.\n            /// Description: Speedboat.\n            /// </summary>\n            public const string Speedboat = \"\\U0001F6A4\";\n\n            /// <summary>\n            /// Gets the \"spider\" emoji.\n            /// Description: Spider.\n            /// </summary>\n            public const string Spider = \"\\U0001F577\";\n\n            /// <summary>\n            /// Gets the \"spider_web\" emoji.\n            /// Description: Spider web.\n            /// </summary>\n            public const string SpiderWeb = \"\\U0001F578\";\n\n            /// <summary>\n            /// Gets the \"spiral_calendar\" emoji.\n            /// Description: Spiral calendar.\n            /// </summary>\n            public const string SpiralCalendar = \"\\U0001F5D3\";\n\n            /// <summary>\n            /// Gets the \"spiral_notepad\" emoji.\n            /// Description: Spiral notepad.\n            /// </summary>\n            public const string SpiralNotepad = \"\\U0001F5D2\";\n\n            /// <summary>\n            /// Gets the \"spiral_shell\" emoji.\n            /// Description: Spiral shell.\n            /// </summary>\n            public const string SpiralShell = \"\\U0001F41A\";\n\n            /// <summary>\n            /// Gets the \"sponge\" emoji.\n            /// Description: Sponge.\n            /// </summary>\n            public const string Sponge = \"\\U0001F9FD\";\n\n            /// <summary>\n            /// Gets the \"spoon\" emoji.\n            /// Description: Spoon.\n            /// </summary>\n            public const string Spoon = \"\\U0001F944\";\n\n            /// <summary>\n            /// Gets the \"sports_medal\" emoji.\n            /// Description: Sports medal.\n            /// </summary>\n            public const string SportsMedal = \"\\U0001F3C5\";\n\n            /// <summary>\n            /// Gets the \"sport_utility_vehicle\" emoji.\n            /// Description: Sport utility vehicle.\n            /// </summary>\n            public const string SportUtilityVehicle = \"\\U0001F699\";\n\n            /// <summary>\n            /// Gets the \"spouting_whale\" emoji.\n            /// Description: Spouting whale.\n            /// </summary>\n            public const string SpoutingWhale = \"\\U0001F433\";\n\n            /// <summary>\n            /// Gets the \"squid\" emoji.\n            /// Description: Squid.\n            /// </summary>\n            public const string Squid = \"\\U0001F991\";\n\n            /// <summary>\n            /// Gets the \"squinting_face_with_tongue\" emoji.\n            /// Description: Squinting face with tongue.\n            /// </summary>\n            public const string SquintingFaceWithTongue = \"\\U0001F61D\";\n\n            /// <summary>\n            /// Gets the \"stadium\" emoji.\n            /// Description: Stadium.\n            /// </summary>\n            public const string Stadium = \"\\U0001F3DF\";\n\n            /// <summary>\n            /// Gets the \"star\" emoji.\n            /// Description: Star.\n            /// </summary>\n            public const string Star = \"\\U00002B50\";\n\n            /// <summary>\n            /// Gets the \"star_and_crescent\" emoji.\n            /// Description: Star and crescent.\n            /// </summary>\n            public const string StarAndCrescent = \"\\U0000262A\";\n\n            /// <summary>\n            /// Gets the \"star_of_david\" emoji.\n            /// Description: Star of david.\n            /// </summary>\n            public const string StarOfDavid = \"\\U00002721\";\n\n            /// <summary>\n            /// Gets the \"star_struck\" emoji.\n            /// Description: star struck.\n            /// </summary>\n            public const string StarStruck = \"\\U0001F929\";\n\n            /// <summary>\n            /// Gets the \"station\" emoji.\n            /// Description: Station.\n            /// </summary>\n            public const string Station = \"\\U0001F689\";\n\n            /// <summary>\n            /// Gets the \"statue_of_liberty\" emoji.\n            /// Description: Statue of liberty.\n            /// </summary>\n            public const string StatueOfLiberty = \"\\U0001F5FD\";\n\n            /// <summary>\n            /// Gets the \"steaming_bowl\" emoji.\n            /// Description: Steaming bowl.\n            /// </summary>\n            public const string SteamingBowl = \"\\U0001F35C\";\n\n            /// <summary>\n            /// Gets the \"stethoscope\" emoji.\n            /// Description: Stethoscope.\n            /// </summary>\n            public const string Stethoscope = \"\\U0001FA7A\";\n\n            /// <summary>\n            /// Gets the \"stop_button\" emoji.\n            /// Description: Stop button.\n            /// </summary>\n            public const string StopButton = \"\\U000023F9\";\n\n            /// <summary>\n            /// Gets the \"stop_sign\" emoji.\n            /// Description: Stop sign.\n            /// </summary>\n            public const string StopSign = \"\\U0001F6D1\";\n\n            /// <summary>\n            /// Gets the \"stopwatch\" emoji.\n            /// Description: Stopwatch.\n            /// </summary>\n            public const string Stopwatch = \"\\U000023F1\";\n\n            /// <summary>\n            /// Gets the \"straight_ruler\" emoji.\n            /// Description: Straight ruler.\n            /// </summary>\n            public const string StraightRuler = \"\\U0001F4CF\";\n\n            /// <summary>\n            /// Gets the \"strawberry\" emoji.\n            /// Description: Strawberry.\n            /// </summary>\n            public const string Strawberry = \"\\U0001F353\";\n\n            /// <summary>\n            /// Gets the \"studio_microphone\" emoji.\n            /// Description: Studio microphone.\n            /// </summary>\n            public const string StudioMicrophone = \"\\U0001F399\";\n\n            /// <summary>\n            /// Gets the \"stuffed_flatbread\" emoji.\n            /// Description: Stuffed flatbread.\n            /// </summary>\n            public const string StuffedFlatbread = \"\\U0001F959\";\n\n            /// <summary>\n            /// Gets the \"sun\" emoji.\n            /// Description: Sun.\n            /// </summary>\n            public const string Sun = \"\\U00002600\";\n\n            /// <summary>\n            /// Gets the \"sun_behind_cloud\" emoji.\n            /// Description: Sun behind cloud.\n            /// </summary>\n            public const string SunBehindCloud = \"\\U000026C5\";\n\n            /// <summary>\n            /// Gets the \"sun_behind_large_cloud\" emoji.\n            /// Description: Sun behind large cloud.\n            /// </summary>\n            public const string SunBehindLargeCloud = \"\\U0001F325\";\n\n            /// <summary>\n            /// Gets the \"sun_behind_rain_cloud\" emoji.\n            /// Description: Sun behind rain cloud.\n            /// </summary>\n            public const string SunBehindRainCloud = \"\\U0001F326\";\n\n            /// <summary>\n            /// Gets the \"sun_behind_small_cloud\" emoji.\n            /// Description: Sun behind small cloud.\n            /// </summary>\n            public const string SunBehindSmallCloud = \"\\U0001F324\";\n\n            /// <summary>\n            /// Gets the \"sunflower\" emoji.\n            /// Description: Sunflower.\n            /// </summary>\n            public const string Sunflower = \"\\U0001F33B\";\n\n            /// <summary>\n            /// Gets the \"sunglasses\" emoji.\n            /// Description: Sunglasses.\n            /// </summary>\n            public const string Sunglasses = \"\\U0001F576\";\n\n            /// <summary>\n            /// Gets the \"sunrise\" emoji.\n            /// Description: Sunrise.\n            /// </summary>\n            public const string Sunrise = \"\\U0001F305\";\n\n            /// <summary>\n            /// Gets the \"sunrise_over_mountains\" emoji.\n            /// Description: Sunrise over mountains.\n            /// </summary>\n            public const string SunriseOverMountains = \"\\U0001F304\";\n\n            /// <summary>\n            /// Gets the \"sunset\" emoji.\n            /// Description: Sunset.\n            /// </summary>\n            public const string Sunset = \"\\U0001F307\";\n\n            /// <summary>\n            /// Gets the \"sun_with_face\" emoji.\n            /// Description: Sun with face.\n            /// </summary>\n            public const string SunWithFace = \"\\U0001F31E\";\n\n            /// <summary>\n            /// Gets the \"superhero\" emoji.\n            /// Description: Superhero.\n            /// </summary>\n            public const string Superhero = \"\\U0001F9B8\";\n\n            /// <summary>\n            /// Gets the \"supervillain\" emoji.\n            /// Description: Supervillain.\n            /// </summary>\n            public const string Supervillain = \"\\U0001F9B9\";\n\n            /// <summary>\n            /// Gets the \"sushi\" emoji.\n            /// Description: Sushi.\n            /// </summary>\n            public const string Sushi = \"\\U0001F363\";\n\n            /// <summary>\n            /// Gets the \"suspension_railway\" emoji.\n            /// Description: Suspension railway.\n            /// </summary>\n            public const string SuspensionRailway = \"\\U0001F69F\";\n\n            /// <summary>\n            /// Gets the \"swan\" emoji.\n            /// Description: Swan.\n            /// </summary>\n            public const string Swan = \"\\U0001F9A2\";\n\n            /// <summary>\n            /// Gets the \"sweat_droplets\" emoji.\n            /// Description: Sweat droplets.\n            /// </summary>\n            public const string SweatDroplets = \"\\U0001F4A6\";\n\n            /// <summary>\n            /// Gets the \"synagogue\" emoji.\n            /// Description: Synagogue.\n            /// </summary>\n            public const string Synagogue = \"\\U0001F54D\";\n\n            /// <summary>\n            /// Gets the \"syringe\" emoji.\n            /// Description: Syringe.\n            /// </summary>\n            public const string Syringe = \"\\U0001F489\";\n\n            /// <summary>\n            /// Gets the \"taco\" emoji.\n            /// Description: Taco.\n            /// </summary>\n            public const string Taco = \"\\U0001F32E\";\n\n            /// <summary>\n            /// Gets the \"takeout_box\" emoji.\n            /// Description: Takeout box.\n            /// </summary>\n            public const string TakeoutBox = \"\\U0001F961\";\n\n            /// <summary>\n            /// Gets the \"tamale\" emoji.\n            /// Description: Tamale.\n            /// </summary>\n            public const string Tamale = \"\\U0001FAD4\";\n\n            /// <summary>\n            /// Gets the \"tanabata_tree\" emoji.\n            /// Description: Tanabata tree.\n            /// </summary>\n            public const string TanabataTree = \"\\U0001F38B\";\n\n            /// <summary>\n            /// Gets the \"tangerine\" emoji.\n            /// Description: Tangerine.\n            /// </summary>\n            public const string Tangerine = \"\\U0001F34A\";\n\n            /// <summary>\n            /// Gets the \"taurus\" emoji.\n            /// Description: Taurus.\n            /// </summary>\n            public const string Taurus = \"\\U00002649\";\n\n            /// <summary>\n            /// Gets the \"taxi\" emoji.\n            /// Description: Taxi.\n            /// </summary>\n            public const string Taxi = \"\\U0001F695\";\n\n            /// <summary>\n            /// Gets the \"teacup_without_handle\" emoji.\n            /// Description: Teacup without handle.\n            /// </summary>\n            public const string TeacupWithoutHandle = \"\\U0001F375\";\n\n            /// <summary>\n            /// Gets the \"teapot\" emoji.\n            /// Description: Teapot.\n            /// </summary>\n            public const string Teapot = \"\\U0001FAD6\";\n\n            /// <summary>\n            /// Gets the \"tear_off_calendar\" emoji.\n            /// Description: tear off calendar.\n            /// </summary>\n            public const string TearOffCalendar = \"\\U0001F4C6\";\n\n            /// <summary>\n            /// Gets the \"teddy_bear\" emoji.\n            /// Description: Teddy bear.\n            /// </summary>\n            public const string TeddyBear = \"\\U0001F9F8\";\n\n            /// <summary>\n            /// Gets the \"telephone\" emoji.\n            /// Description: Telephone.\n            /// </summary>\n            public const string Telephone = \"\\U0000260E\";\n\n            /// <summary>\n            /// Gets the \"telephone_receiver\" emoji.\n            /// Description: Telephone receiver.\n            /// </summary>\n            public const string TelephoneReceiver = \"\\U0001F4DE\";\n\n            /// <summary>\n            /// Gets the \"telescope\" emoji.\n            /// Description: Telescope.\n            /// </summary>\n            public const string Telescope = \"\\U0001F52D\";\n\n            /// <summary>\n            /// Gets the \"television\" emoji.\n            /// Description: Television.\n            /// </summary>\n            public const string Television = \"\\U0001F4FA\";\n\n            /// <summary>\n            /// Gets the \"tennis\" emoji.\n            /// Description: Tennis.\n            /// </summary>\n            public const string Tennis = \"\\U0001F3BE\";\n\n            /// <summary>\n            /// Gets the \"ten_o_clock\" emoji.\n            /// Description: Ten o clock.\n            /// </summary>\n            public const string TenOClock = \"\\U0001F559\";\n\n            /// <summary>\n            /// Gets the \"tent\" emoji.\n            /// Description: Tent.\n            /// </summary>\n            public const string Tent = \"\\U000026FA\";\n\n            /// <summary>\n            /// Gets the \"ten_thirty\" emoji.\n            /// Description: ten thirty.\n            /// </summary>\n            public const string TenThirty = \"\\U0001F565\";\n\n            /// <summary>\n            /// Gets the \"test_tube\" emoji.\n            /// Description: Test tube.\n            /// </summary>\n            public const string TestTube = \"\\U0001F9EA\";\n\n            /// <summary>\n            /// Gets the \"thermometer\" emoji.\n            /// Description: Thermometer.\n            /// </summary>\n            public const string Thermometer = \"\\U0001F321\";\n\n            /// <summary>\n            /// Gets the \"thinking_face\" emoji.\n            /// Description: Thinking face.\n            /// </summary>\n            public const string ThinkingFace = \"\\U0001F914\";\n\n            /// <summary>\n            /// Gets the \"3rd_place_medal\" emoji.\n            /// Description: 3rd place medal.\n            /// </summary>\n            public const string ThirdPlaceMedal = \"\\U0001F949\";\n\n            /// <summary>\n            /// Gets the \"thong_sandal\" emoji.\n            /// Description: Thong sandal.\n            /// </summary>\n            public const string ThongSandal = \"\\U0001FA74\";\n\n            /// <summary>\n            /// Gets the \"thought_balloon\" emoji.\n            /// Description: Thought balloon.\n            /// </summary>\n            public const string ThoughtBalloon = \"\\U0001F4AD\";\n\n            /// <summary>\n            /// Gets the \"thread\" emoji.\n            /// Description: Thread.\n            /// </summary>\n            public const string Thread = \"\\U0001F9F5\";\n\n            /// <summary>\n            /// Gets the \"three_o_clock\" emoji.\n            /// Description: Three o clock.\n            /// </summary>\n            public const string ThreeOClock = \"\\U0001F552\";\n\n            /// <summary>\n            /// Gets the \"three_thirty\" emoji.\n            /// Description: three thirty.\n            /// </summary>\n            public const string ThreeThirty = \"\\U0001F55E\";\n\n            /// <summary>\n            /// Gets the \"thumbs_down\" emoji.\n            /// Description: Thumbs down.\n            /// </summary>\n            public const string ThumbsDown = \"\\U0001F44E\";\n\n            /// <summary>\n            /// Gets the \"thumbs_up\" emoji.\n            /// Description: Thumbs up.\n            /// </summary>\n            public const string ThumbsUp = \"\\U0001F44D\";\n\n            /// <summary>\n            /// Gets the \"ticket\" emoji.\n            /// Description: Ticket.\n            /// </summary>\n            public const string Ticket = \"\\U0001F3AB\";\n\n            /// <summary>\n            /// Gets the \"tiger\" emoji.\n            /// Description: Tiger.\n            /// </summary>\n            public const string Tiger = \"\\U0001F405\";\n\n            /// <summary>\n            /// Gets the \"tiger_face\" emoji.\n            /// Description: Tiger face.\n            /// </summary>\n            public const string TigerFace = \"\\U0001F42F\";\n\n            /// <summary>\n            /// Gets the \"timer_clock\" emoji.\n            /// Description: Timer clock.\n            /// </summary>\n            public const string TimerClock = \"\\U000023F2\";\n\n            /// <summary>\n            /// Gets the \"tired_face\" emoji.\n            /// Description: Tired face.\n            /// </summary>\n            public const string TiredFace = \"\\U0001F62B\";\n\n            /// <summary>\n            /// Gets the \"toilet\" emoji.\n            /// Description: Toilet.\n            /// </summary>\n            public const string Toilet = \"\\U0001F6BD\";\n\n            /// <summary>\n            /// Gets the \"tokyo_tower\" emoji.\n            /// Description: Tokyo tower.\n            /// </summary>\n            public const string TokyoTower = \"\\U0001F5FC\";\n\n            /// <summary>\n            /// Gets the \"tomato\" emoji.\n            /// Description: Tomato.\n            /// </summary>\n            public const string Tomato = \"\\U0001F345\";\n\n            /// <summary>\n            /// Gets the \"tongue\" emoji.\n            /// Description: Tongue.\n            /// </summary>\n            public const string Tongue = \"\\U0001F445\";\n\n            /// <summary>\n            /// Gets the \"toolbox\" emoji.\n            /// Description: Toolbox.\n            /// </summary>\n            public const string Toolbox = \"\\U0001F9F0\";\n\n            /// <summary>\n            /// Gets the \"tooth\" emoji.\n            /// Description: Tooth.\n            /// </summary>\n            public const string Tooth = \"\\U0001F9B7\";\n\n            /// <summary>\n            /// Gets the \"toothbrush\" emoji.\n            /// Description: Toothbrush.\n            /// </summary>\n            public const string Toothbrush = \"\\U0001FAA5\";\n\n            /// <summary>\n            /// Gets the \"top_arrow\" emoji.\n            /// Description: TOP arrow.\n            /// </summary>\n            public const string TopArrow = \"\\U0001F51D\";\n\n            /// <summary>\n            /// Gets the \"top_hat\" emoji.\n            /// Description: Top hat.\n            /// </summary>\n            public const string TopHat = \"\\U0001F3A9\";\n\n            /// <summary>\n            /// Gets the \"tornado\" emoji.\n            /// Description: Tornado.\n            /// </summary>\n            public const string Tornado = \"\\U0001F32A\";\n\n            /// <summary>\n            /// Gets the \"trackball\" emoji.\n            /// Description: Trackball.\n            /// </summary>\n            public const string Trackball = \"\\U0001F5B2\";\n\n            /// <summary>\n            /// Gets the \"tractor\" emoji.\n            /// Description: Tractor.\n            /// </summary>\n            public const string Tractor = \"\\U0001F69C\";\n\n            /// <summary>\n            /// Gets the \"trade_mark\" emoji.\n            /// Description: Trade mark.\n            /// </summary>\n            public const string TradeMark = \"\\U00002122\";\n\n            /// <summary>\n            /// Gets the \"train\" emoji.\n            /// Description: Train.\n            /// </summary>\n            public const string Train = \"\\U0001F686\";\n\n            /// <summary>\n            /// Gets the \"tram\" emoji.\n            /// Description: Tram.\n            /// </summary>\n            public const string Tram = \"\\U0001F68A\";\n\n            /// <summary>\n            /// Gets the \"tram_car\" emoji.\n            /// Description: Tram car.\n            /// </summary>\n            public const string TramCar = \"\\U0001F68B\";\n\n            /// <summary>\n            /// Gets the \"transgender_symbol\" emoji.\n            /// Description: Transgender symbol.\n            /// </summary>\n            public const string TransgenderSymbol = \"\\U000026A7\";\n\n            /// <summary>\n            /// Gets the \"t_rex\" emoji.\n            /// Description: T Rex.\n            /// </summary>\n            public const string TRex = \"\\U0001F996\";\n\n            /// <summary>\n            /// Gets the \"triangular_flag\" emoji.\n            /// Description: Triangular flag.\n            /// </summary>\n            public const string TriangularFlag = \"\\U0001F6A9\";\n\n            /// <summary>\n            /// Gets the \"triangular_ruler\" emoji.\n            /// Description: Triangular ruler.\n            /// </summary>\n            public const string TriangularRuler = \"\\U0001F4D0\";\n\n            /// <summary>\n            /// Gets the \"trident_emblem\" emoji.\n            /// Description: Trident emblem.\n            /// </summary>\n            public const string TridentEmblem = \"\\U0001F531\";\n\n            /// <summary>\n            /// Gets the \"trolleybus\" emoji.\n            /// Description: Trolleybus.\n            /// </summary>\n            public const string Trolleybus = \"\\U0001F68E\";\n\n            /// <summary>\n            /// Gets the \"trophy\" emoji.\n            /// Description: Trophy.\n            /// </summary>\n            public const string Trophy = \"\\U0001F3C6\";\n\n            /// <summary>\n            /// Gets the \"tropical_drink\" emoji.\n            /// Description: Tropical drink.\n            /// </summary>\n            public const string TropicalDrink = \"\\U0001F379\";\n\n            /// <summary>\n            /// Gets the \"tropical_fish\" emoji.\n            /// Description: Tropical fish.\n            /// </summary>\n            public const string TropicalFish = \"\\U0001F420\";\n\n            /// <summary>\n            /// Gets the \"trumpet\" emoji.\n            /// Description: Trumpet.\n            /// </summary>\n            public const string Trumpet = \"\\U0001F3BA\";\n\n            /// <summary>\n            /// Gets the \"t_shirt\" emoji.\n            /// Description: t shirt.\n            /// </summary>\n            public const string TShirt = \"\\U0001F455\";\n\n            /// <summary>\n            /// Gets the \"tulip\" emoji.\n            /// Description: Tulip.\n            /// </summary>\n            public const string Tulip = \"\\U0001F337\";\n\n            /// <summary>\n            /// Gets the \"tumbler_glass\" emoji.\n            /// Description: Tumbler glass.\n            /// </summary>\n            public const string TumblerGlass = \"\\U0001F943\";\n\n            /// <summary>\n            /// Gets the \"turkey\" emoji.\n            /// Description: Turkey.\n            /// </summary>\n            public const string Turkey = \"\\U0001F983\";\n\n            /// <summary>\n            /// Gets the \"turtle\" emoji.\n            /// Description: Turtle.\n            /// </summary>\n            public const string Turtle = \"\\U0001F422\";\n\n            /// <summary>\n            /// Gets the \"twelve_o_clock\" emoji.\n            /// Description: Twelve o clock.\n            /// </summary>\n            public const string TwelveOClock = \"\\U0001F55B\";\n\n            /// <summary>\n            /// Gets the \"twelve_thirty\" emoji.\n            /// Description: twelve thirty.\n            /// </summary>\n            public const string TwelveThirty = \"\\U0001F567\";\n\n            /// <summary>\n            /// Gets the \"two_hearts\" emoji.\n            /// Description: Two hearts.\n            /// </summary>\n            public const string TwoHearts = \"\\U0001F495\";\n\n            /// <summary>\n            /// Gets the \"two_hump_camel\" emoji.\n            /// Description: two hump camel.\n            /// </summary>\n            public const string TwoHumpCamel = \"\\U0001F42B\";\n\n            /// <summary>\n            /// Gets the \"two_o_clock\" emoji.\n            /// Description: Two o clock.\n            /// </summary>\n            public const string TwoOClock = \"\\U0001F551\";\n\n            /// <summary>\n            /// Gets the \"two_thirty\" emoji.\n            /// Description: two thirty.\n            /// </summary>\n            public const string TwoThirty = \"\\U0001F55D\";\n\n            /// <summary>\n            /// Gets the \"umbrella\" emoji.\n            /// Description: Umbrella.\n            /// </summary>\n            public const string Umbrella = \"\\U00002602\";\n\n            /// <summary>\n            /// Gets the \"umbrella_on_ground\" emoji.\n            /// Description: Umbrella on ground.\n            /// </summary>\n            public const string UmbrellaOnGround = \"\\U000026F1\";\n\n            /// <summary>\n            /// Gets the \"umbrella_with_rain_drops\" emoji.\n            /// Description: Umbrella with rain drops.\n            /// </summary>\n            public const string UmbrellaWithRainDrops = \"\\U00002614\";\n\n            /// <summary>\n            /// Gets the \"unamused_face\" emoji.\n            /// Description: Unamused face.\n            /// </summary>\n            public const string UnamusedFace = \"\\U0001F612\";\n\n            /// <summary>\n            /// Gets the \"unicorn\" emoji.\n            /// Description: Unicorn.\n            /// </summary>\n            public const string Unicorn = \"\\U0001F984\";\n\n            /// <summary>\n            /// Gets the \"unlocked\" emoji.\n            /// Description: Unlocked.\n            /// </summary>\n            public const string Unlocked = \"\\U0001F513\";\n\n            /// <summary>\n            /// Gets the \"up_arrow\" emoji.\n            /// Description: Up arrow.\n            /// </summary>\n            public const string UpArrow = \"\\U00002B06\";\n\n            /// <summary>\n            /// Gets the \"up_button\" emoji.\n            /// Description: UP button.\n            /// </summary>\n            public const string UpButton = \"\\U0001F199\";\n\n            /// <summary>\n            /// Gets the \"up_down_arrow\" emoji.\n            /// Description: up down arrow.\n            /// </summary>\n            public const string UpDownArrow = \"\\U00002195\";\n\n            /// <summary>\n            /// Gets the \"up_left_arrow\" emoji.\n            /// Description: up left arrow.\n            /// </summary>\n            public const string UpLeftArrow = \"\\U00002196\";\n\n            /// <summary>\n            /// Gets the \"up_right_arrow\" emoji.\n            /// Description: up right arrow.\n            /// </summary>\n            public const string UpRightArrow = \"\\U00002197\";\n\n            /// <summary>\n            /// Gets the \"upside_down_face\" emoji.\n            /// Description: upside down face.\n            /// </summary>\n            public const string UpsideDownFace = \"\\U0001F643\";\n\n            /// <summary>\n            /// Gets the \"upwards_button\" emoji.\n            /// Description: Upwards button.\n            /// </summary>\n            public const string UpwardsButton = \"\\U0001F53C\";\n\n            /// <summary>\n            /// Gets the \"vampire\" emoji.\n            /// Description: Vampire.\n            /// </summary>\n            public const string Vampire = \"\\U0001F9DB\";\n\n            /// <summary>\n            /// Gets the \"vertical_traffic_light\" emoji.\n            /// Description: Vertical traffic light.\n            /// </summary>\n            public const string VerticalTrafficLight = \"\\U0001F6A6\";\n\n            /// <summary>\n            /// Gets the \"vibration_mode\" emoji.\n            /// Description: Vibration mode.\n            /// </summary>\n            public const string VibrationMode = \"\\U0001F4F3\";\n\n            /// <summary>\n            /// Gets the \"victory_hand\" emoji.\n            /// Description: Victory hand.\n            /// </summary>\n            public const string VictoryHand = \"\\U0000270C\";\n\n            /// <summary>\n            /// Gets the \"video_camera\" emoji.\n            /// Description: Video camera.\n            /// </summary>\n            public const string VideoCamera = \"\\U0001F4F9\";\n\n            /// <summary>\n            /// Gets the \"videocassette\" emoji.\n            /// Description: Videocassette.\n            /// </summary>\n            public const string Videocassette = \"\\U0001F4FC\";\n\n            /// <summary>\n            /// Gets the \"video_game\" emoji.\n            /// Description: Video game.\n            /// </summary>\n            public const string VideoGame = \"\\U0001F3AE\";\n\n            /// <summary>\n            /// Gets the \"violin\" emoji.\n            /// Description: Violin.\n            /// </summary>\n            public const string Violin = \"\\U0001F3BB\";\n\n            /// <summary>\n            /// Gets the \"virgo\" emoji.\n            /// Description: Virgo.\n            /// </summary>\n            public const string Virgo = \"\\U0000264D\";\n\n            /// <summary>\n            /// Gets the \"volcano\" emoji.\n            /// Description: Volcano.\n            /// </summary>\n            public const string Volcano = \"\\U0001F30B\";\n\n            /// <summary>\n            /// Gets the \"volleyball\" emoji.\n            /// Description: Volleyball.\n            /// </summary>\n            public const string Volleyball = \"\\U0001F3D0\";\n\n            /// <summary>\n            /// Gets the \"vs_button\" emoji.\n            /// Description: VS button.\n            /// </summary>\n            public const string VsButton = \"\\U0001F19A\";\n\n            /// <summary>\n            /// Gets the \"vulcan_salute\" emoji.\n            /// Description: Vulcan salute.\n            /// </summary>\n            public const string VulcanSalute = \"\\U0001F596\";\n\n            /// <summary>\n            /// Gets the \"waffle\" emoji.\n            /// Description: Waffle.\n            /// </summary>\n            public const string Waffle = \"\\U0001F9C7\";\n\n            /// <summary>\n            /// Gets the \"waning_crescent_moon\" emoji.\n            /// Description: Waning crescent moon.\n            /// </summary>\n            public const string WaningCrescentMoon = \"\\U0001F318\";\n\n            /// <summary>\n            /// Gets the \"waning_gibbous_moon\" emoji.\n            /// Description: Waning gibbous moon.\n            /// </summary>\n            public const string WaningGibbousMoon = \"\\U0001F316\";\n\n            /// <summary>\n            /// Gets the \"warning\" emoji.\n            /// Description: Warning.\n            /// </summary>\n            public const string Warning = \"\\U000026A0\";\n\n            /// <summary>\n            /// Gets the \"wastebasket\" emoji.\n            /// Description: Wastebasket.\n            /// </summary>\n            public const string Wastebasket = \"\\U0001F5D1\";\n\n            /// <summary>\n            /// Gets the \"watch\" emoji.\n            /// Description: Watch.\n            /// </summary>\n            public const string Watch = \"\\U0000231A\";\n\n            /// <summary>\n            /// Gets the \"water_buffalo\" emoji.\n            /// Description: Water buffalo.\n            /// </summary>\n            public const string WaterBuffalo = \"\\U0001F403\";\n\n            /// <summary>\n            /// Gets the \"water_closet\" emoji.\n            /// Description: Water closet.\n            /// </summary>\n            public const string WaterCloset = \"\\U0001F6BE\";\n\n            /// <summary>\n            /// Gets the \"watermelon\" emoji.\n            /// Description: Watermelon.\n            /// </summary>\n            public const string Watermelon = \"\\U0001F349\";\n\n            /// <summary>\n            /// Gets the \"water_pistol\" emoji.\n            /// Description: Water pistol.\n            /// </summary>\n            public const string WaterPistol = \"\\U0001F52B\";\n\n            /// <summary>\n            /// Gets the \"water_wave\" emoji.\n            /// Description: Water wave.\n            /// </summary>\n            public const string WaterWave = \"\\U0001F30A\";\n\n            /// <summary>\n            /// Gets the \"waving_hand\" emoji.\n            /// Description: Waving hand.\n            /// </summary>\n            public const string WavingHand = \"\\U0001F44B\";\n\n            /// <summary>\n            /// Gets the \"wavy_dash\" emoji.\n            /// Description: Wavy dash.\n            /// </summary>\n            public const string WavyDash = \"\\U00003030\";\n\n            /// <summary>\n            /// Gets the \"waxing_crescent_moon\" emoji.\n            /// Description: Waxing crescent moon.\n            /// </summary>\n            public const string WaxingCrescentMoon = \"\\U0001F312\";\n\n            /// <summary>\n            /// Gets the \"waxing_gibbous_moon\" emoji.\n            /// Description: Waxing gibbous moon.\n            /// </summary>\n            public const string WaxingGibbousMoon = \"\\U0001F314\";\n\n            /// <summary>\n            /// Gets the \"weary_cat\" emoji.\n            /// Description: Weary cat.\n            /// </summary>\n            public const string WearyCat = \"\\U0001F640\";\n\n            /// <summary>\n            /// Gets the \"weary_face\" emoji.\n            /// Description: Weary face.\n            /// </summary>\n            public const string WearyFace = \"\\U0001F629\";\n\n            /// <summary>\n            /// Gets the \"wedding\" emoji.\n            /// Description: Wedding.\n            /// </summary>\n            public const string Wedding = \"\\U0001F492\";\n\n            /// <summary>\n            /// Gets the \"whale\" emoji.\n            /// Description: Whale.\n            /// </summary>\n            public const string Whale = \"\\U0001F40B\";\n\n            /// <summary>\n            /// Gets the \"wheelchair_symbol\" emoji.\n            /// Description: Wheelchair symbol.\n            /// </summary>\n            public const string WheelchairSymbol = \"\\U0000267F\";\n\n            /// <summary>\n            /// Gets the \"wheel_of_dharma\" emoji.\n            /// Description: Wheel of dharma.\n            /// </summary>\n            public const string WheelOfDharma = \"\\U00002638\";\n\n            /// <summary>\n            /// Gets the \"white_cane\" emoji.\n            /// Description: White cane.\n            /// </summary>\n            public const string WhiteCane = \"\\U0001F9AF\";\n\n            /// <summary>\n            /// Gets the \"white_circle\" emoji.\n            /// Description: White circle.\n            /// </summary>\n            public const string WhiteCircle = \"\\U000026AA\";\n\n            /// <summary>\n            /// Gets the \"white_exclamation_mark\" emoji.\n            /// Description: White exclamation mark.\n            /// </summary>\n            public const string WhiteExclamationMark = \"\\U00002755\";\n\n            /// <summary>\n            /// Gets the \"white_flag\" emoji.\n            /// Description: White flag.\n            /// </summary>\n            public const string WhiteFlag = \"\\U0001F3F3\";\n\n            /// <summary>\n            /// Gets the \"white_flower\" emoji.\n            /// Description: White flower.\n            /// </summary>\n            public const string WhiteFlower = \"\\U0001F4AE\";\n\n            /// <summary>\n            /// Gets the \"white_hair\" emoji.\n            /// Description: White hair.\n            /// </summary>\n            public const string WhiteHair = \"\\U0001F9B3\";\n\n            /// <summary>\n            /// Gets the \"white_heart\" emoji.\n            /// Description: White heart.\n            /// </summary>\n            public const string WhiteHeart = \"\\U0001F90D\";\n\n            /// <summary>\n            /// Gets the \"white_large_square\" emoji.\n            /// Description: White large square.\n            /// </summary>\n            public const string WhiteLargeSquare = \"\\U00002B1C\";\n\n            /// <summary>\n            /// Gets the \"white_medium_small_square\" emoji.\n            /// Description: white medium small square.\n            /// </summary>\n            public const string WhiteMediumSmallSquare = \"\\U000025FD\";\n\n            /// <summary>\n            /// Gets the \"white_medium_square\" emoji.\n            /// Description: White medium square.\n            /// </summary>\n            public const string WhiteMediumSquare = \"\\U000025FB\";\n\n            /// <summary>\n            /// Gets the \"white_question_mark\" emoji.\n            /// Description: White question mark.\n            /// </summary>\n            public const string WhiteQuestionMark = \"\\U00002754\";\n\n            /// <summary>\n            /// Gets the \"white_small_square\" emoji.\n            /// Description: White small square.\n            /// </summary>\n            public const string WhiteSmallSquare = \"\\U000025AB\";\n\n            /// <summary>\n            /// Gets the \"white_square_button\" emoji.\n            /// Description: White square button.\n            /// </summary>\n            public const string WhiteSquareButton = \"\\U0001F533\";\n\n            /// <summary>\n            /// Gets the \"wilted_flower\" emoji.\n            /// Description: Wilted flower.\n            /// </summary>\n            public const string WiltedFlower = \"\\U0001F940\";\n\n            /// <summary>\n            /// Gets the \"wind_chime\" emoji.\n            /// Description: Wind chime.\n            /// </summary>\n            public const string WindChime = \"\\U0001F390\";\n\n            /// <summary>\n            /// Gets the \"wind_face\" emoji.\n            /// Description: Wind face.\n            /// </summary>\n            public const string WindFace = \"\\U0001F32C\";\n\n            /// <summary>\n            /// Gets the \"window\" emoji.\n            /// Description: Window.\n            /// </summary>\n            public const string Window = \"\\U0001FA9F\";\n\n            /// <summary>\n            /// Gets the \"wine_glass\" emoji.\n            /// Description: Wine glass.\n            /// </summary>\n            public const string WineGlass = \"\\U0001F377\";\n\n            /// <summary>\n            /// Gets the \"winking_face\" emoji.\n            /// Description: Winking face.\n            /// </summary>\n            public const string WinkingFace = \"\\U0001F609\";\n\n            /// <summary>\n            /// Gets the \"winking_face_with_tongue\" emoji.\n            /// Description: Winking face with tongue.\n            /// </summary>\n            public const string WinkingFaceWithTongue = \"\\U0001F61C\";\n\n            /// <summary>\n            /// Gets the \"wolf\" emoji.\n            /// Description: Wolf.\n            /// </summary>\n            public const string Wolf = \"\\U0001F43A\";\n\n            /// <summary>\n            /// Gets the \"woman\" emoji.\n            /// Description: Woman.\n            /// </summary>\n            public const string Woman = \"\\U0001F469\";\n\n            /// <summary>\n            /// Gets the \"woman_and_man_holding_hands\" emoji.\n            /// Description: Woman and man holding hands.\n            /// </summary>\n            public const string WomanAndManHoldingHands = \"\\U0001F46B\";\n\n            /// <summary>\n            /// Gets the \"woman_dancing\" emoji.\n            /// Description: Woman dancing.\n            /// </summary>\n            public const string WomanDancing = \"\\U0001F483\";\n\n            /// <summary>\n            /// Gets the \"womans_boot\" emoji.\n            /// Description: Woman s boot.\n            /// </summary>\n            public const string WomansBoot = \"\\U0001F462\";\n\n            /// <summary>\n            /// Gets the \"womans_clothes\" emoji.\n            /// Description: Woman s clothes.\n            /// </summary>\n            public const string WomansClothes = \"\\U0001F45A\";\n\n            /// <summary>\n            /// Gets the \"womans_hat\" emoji.\n            /// Description: Woman s hat.\n            /// </summary>\n            public const string WomansHat = \"\\U0001F452\";\n\n            /// <summary>\n            /// Gets the \"womans_sandal\" emoji.\n            /// Description: Woman s sandal.\n            /// </summary>\n            public const string WomansSandal = \"\\U0001F461\";\n\n            /// <summary>\n            /// Gets the \"woman_with_headscarf\" emoji.\n            /// Description: Woman with headscarf.\n            /// </summary>\n            public const string WomanWithHeadscarf = \"\\U0001F9D5\";\n\n            /// <summary>\n            /// Gets the \"women_holding_hands\" emoji.\n            /// Description: Women holding hands.\n            /// </summary>\n            public const string WomenHoldingHands = \"\\U0001F46D\";\n\n            /// <summary>\n            /// Gets the \"womens_room\" emoji.\n            /// Description: Women s room.\n            /// </summary>\n            public const string WomensRoom = \"\\U0001F6BA\";\n\n            /// <summary>\n            /// Gets the \"wood\" emoji.\n            /// Description: Wood.\n            /// </summary>\n            public const string Wood = \"\\U0001FAB5\";\n\n            /// <summary>\n            /// Gets the \"woozy_face\" emoji.\n            /// Description: Woozy face.\n            /// </summary>\n            public const string WoozyFace = \"\\U0001F974\";\n\n            /// <summary>\n            /// Gets the \"world_map\" emoji.\n            /// Description: World map.\n            /// </summary>\n            public const string WorldMap = \"\\U0001F5FA\";\n\n            /// <summary>\n            /// Gets the \"worm\" emoji.\n            /// Description: Worm.\n            /// </summary>\n            public const string Worm = \"\\U0001FAB1\";\n\n            /// <summary>\n            /// Gets the \"worried_face\" emoji.\n            /// Description: Worried face.\n            /// </summary>\n            public const string WorriedFace = \"\\U0001F61F\";\n\n            /// <summary>\n            /// Gets the \"wrapped_gift\" emoji.\n            /// Description: Wrapped gift.\n            /// </summary>\n            public const string WrappedGift = \"\\U0001F381\";\n\n            /// <summary>\n            /// Gets the \"wrench\" emoji.\n            /// Description: Wrench.\n            /// </summary>\n            public const string Wrench = \"\\U0001F527\";\n\n            /// <summary>\n            /// Gets the \"writing_hand\" emoji.\n            /// Description: Writing hand.\n            /// </summary>\n            public const string WritingHand = \"\\U0000270D\";\n\n            /// <summary>\n            /// Gets the \"yarn\" emoji.\n            /// Description: Yarn.\n            /// </summary>\n            public const string Yarn = \"\\U0001F9F6\";\n\n            /// <summary>\n            /// Gets the \"yawning_face\" emoji.\n            /// Description: Yawning face.\n            /// </summary>\n            public const string YawningFace = \"\\U0001F971\";\n\n            /// <summary>\n            /// Gets the \"yellow_circle\" emoji.\n            /// Description: Yellow circle.\n            /// </summary>\n            public const string YellowCircle = \"\\U0001F7E1\";\n\n            /// <summary>\n            /// Gets the \"yellow_heart\" emoji.\n            /// Description: Yellow heart.\n            /// </summary>\n            public const string YellowHeart = \"\\U0001F49B\";\n\n            /// <summary>\n            /// Gets the \"yellow_square\" emoji.\n            /// Description: Yellow square.\n            /// </summary>\n            public const string YellowSquare = \"\\U0001F7E8\";\n\n            /// <summary>\n            /// Gets the \"yen_banknote\" emoji.\n            /// Description: Yen banknote.\n            /// </summary>\n            public const string YenBanknote = \"\\U0001F4B4\";\n\n            /// <summary>\n            /// Gets the \"yin_yang\" emoji.\n            /// Description: Yin yang.\n            /// </summary>\n            public const string YinYang = \"\\U0000262F\";\n\n            /// <summary>\n            /// Gets the \"yo_yo\" emoji.\n            /// Description: yo yo.\n            /// </summary>\n            public const string YoYo = \"\\U0001FA80\";\n\n            /// <summary>\n            /// Gets the \"zany_face\" emoji.\n            /// Description: Zany face.\n            /// </summary>\n            public const string ZanyFace = \"\\U0001F92A\";\n\n            /// <summary>\n            /// Gets the \"zebra\" emoji.\n            /// Description: Zebra.\n            /// </summary>\n            public const string Zebra = \"\\U0001F993\";\n\n            /// <summary>\n            /// Gets the \"zipper_mouth_face\" emoji.\n            /// Description: zipper mouth face.\n            /// </summary>\n            public const string ZipperMouthFace = \"\\U0001F910\";\n\n            /// <summary>\n            /// Gets the \"zombie\" emoji.\n            /// Description: Zombie.\n            /// </summary>\n            public const string Zombie = \"\\U0001F9DF\";\n\n            /// <summary>\n            /// Gets the \"zzz\" emoji.\n            /// Description: Zzz.\n            /// </summary>\n            public const string Zzz = \"\\U0001F4A4\";\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Legacy/Spinner.Generated.cs",
    "content": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Partly generated from\n//     https://github.com/sindresorhus/cli-spinners/blob/master/spinners.json\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Spectre.Console.Tests.Legacy\n{\n\n    /// <summary>\n    /// Represents a spinner used in a <see cref=\"SpinnerColumn\"/>.\n    /// </summary>\n    public abstract partial class Spinner\n    {\n        /// <summary>\n        /// Gets the update interval for the spinner.\n        /// </summary>\n        public abstract TimeSpan Interval { get; }\n\n        /// <summary>\n        /// Gets a value indicating whether or not the spinner\n        /// uses Unicode characters.\n        /// </summary>\n        public abstract bool IsUnicode { get; }\n\n        /// <summary>\n        /// Gets the spinner frames.\n        /// </summary>\n        public abstract IReadOnlyList<string> Frames { get; }\n    }\n\n    public abstract partial class Spinner\n    {\n        private sealed class DefaultSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⣷\",\n                    \"⣯\",\n                    \"⣟\",\n                    \"⡿\",\n                    \"⢿\",\n                    \"⣻\",\n                    \"⣽\",\n                    \"⣾\",\n            };\n        }\n        private sealed class AsciiSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"-\",\n                    \"\\\\\",\n                    \"|\",\n                    \"/\",\n                    \"-\",\n                    \"\\\\\",\n                    \"|\",\n                    \"/\",\n            };\n        }\n        private sealed class DotsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠋\",\n                    \"⠙\",\n                    \"⠹\",\n                    \"⠸\",\n                    \"⠼\",\n                    \"⠴\",\n                    \"⠦\",\n                    \"⠧\",\n                    \"⠇\",\n                    \"⠏\",\n            };\n        }\n        private sealed class Dots2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⣾\",\n                    \"⣽\",\n                    \"⣻\",\n                    \"⢿\",\n                    \"⡿\",\n                    \"⣟\",\n                    \"⣯\",\n                    \"⣷\",\n            };\n        }\n        private sealed class Dots3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠋\",\n                    \"⠙\",\n                    \"⠚\",\n                    \"⠞\",\n                    \"⠖\",\n                    \"⠦\",\n                    \"⠴\",\n                    \"⠲\",\n                    \"⠳\",\n                    \"⠓\",\n            };\n        }\n        private sealed class Dots4Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠄\",\n                    \"⠆\",\n                    \"⠇\",\n                    \"⠋\",\n                    \"⠙\",\n                    \"⠸\",\n                    \"⠰\",\n                    \"⠠\",\n                    \"⠰\",\n                    \"⠸\",\n                    \"⠙\",\n                    \"⠋\",\n                    \"⠇\",\n                    \"⠆\",\n            };\n        }\n        private sealed class Dots5Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠋\",\n                    \"⠙\",\n                    \"⠚\",\n                    \"⠒\",\n                    \"⠂\",\n                    \"⠂\",\n                    \"⠒\",\n                    \"⠲\",\n                    \"⠴\",\n                    \"⠦\",\n                    \"⠖\",\n                    \"⠒\",\n                    \"⠐\",\n                    \"⠐\",\n                    \"⠒\",\n                    \"⠓\",\n                    \"⠋\",\n            };\n        }\n        private sealed class Dots6Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠁\",\n                    \"⠉\",\n                    \"⠙\",\n                    \"⠚\",\n                    \"⠒\",\n                    \"⠂\",\n                    \"⠂\",\n                    \"⠒\",\n                    \"⠲\",\n                    \"⠴\",\n                    \"⠤\",\n                    \"⠄\",\n                    \"⠄\",\n                    \"⠤\",\n                    \"⠴\",\n                    \"⠲\",\n                    \"⠒\",\n                    \"⠂\",\n                    \"⠂\",\n                    \"⠒\",\n                    \"⠚\",\n                    \"⠙\",\n                    \"⠉\",\n                    \"⠁\",\n            };\n        }\n        private sealed class Dots7Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠈\",\n                    \"⠉\",\n                    \"⠋\",\n                    \"⠓\",\n                    \"⠒\",\n                    \"⠐\",\n                    \"⠐\",\n                    \"⠒\",\n                    \"⠖\",\n                    \"⠦\",\n                    \"⠤\",\n                    \"⠠\",\n                    \"⠠\",\n                    \"⠤\",\n                    \"⠦\",\n                    \"⠖\",\n                    \"⠒\",\n                    \"⠐\",\n                    \"⠐\",\n                    \"⠒\",\n                    \"⠓\",\n                    \"⠋\",\n                    \"⠉\",\n                    \"⠈\",\n            };\n        }\n        private sealed class Dots8Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠁\",\n                    \"⠁\",\n                    \"⠉\",\n                    \"⠙\",\n                    \"⠚\",\n                    \"⠒\",\n                    \"⠂\",\n                    \"⠂\",\n                    \"⠒\",\n                    \"⠲\",\n                    \"⠴\",\n                    \"⠤\",\n                    \"⠄\",\n                    \"⠄\",\n                    \"⠤\",\n                    \"⠠\",\n                    \"⠠\",\n                    \"⠤\",\n                    \"⠦\",\n                    \"⠖\",\n                    \"⠒\",\n                    \"⠐\",\n                    \"⠐\",\n                    \"⠒\",\n                    \"⠓\",\n                    \"⠋\",\n                    \"⠉\",\n                    \"⠈\",\n                    \"⠈\",\n            };\n        }\n        private sealed class Dots9Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⢹\",\n                    \"⢺\",\n                    \"⢼\",\n                    \"⣸\",\n                    \"⣇\",\n                    \"⡧\",\n                    \"⡗\",\n                    \"⡏\",\n            };\n        }\n        private sealed class Dots10Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⢄\",\n                    \"⢂\",\n                    \"⢁\",\n                    \"⡁\",\n                    \"⡈\",\n                    \"⡐\",\n                    \"⡠\",\n            };\n        }\n        private sealed class Dots11Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠁\",\n                    \"⠂\",\n                    \"⠄\",\n                    \"⡀\",\n                    \"⢀\",\n                    \"⠠\",\n                    \"⠐\",\n                    \"⠈\",\n            };\n        }\n        private sealed class Dots12Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⢀⠀\",\n                    \"⡀⠀\",\n                    \"⠄⠀\",\n                    \"⢂⠀\",\n                    \"⡂⠀\",\n                    \"⠅⠀\",\n                    \"⢃⠀\",\n                    \"⡃⠀\",\n                    \"⠍⠀\",\n                    \"⢋⠀\",\n                    \"⡋⠀\",\n                    \"⠍⠁\",\n                    \"⢋⠁\",\n                    \"⡋⠁\",\n                    \"⠍⠉\",\n                    \"⠋⠉\",\n                    \"⠋⠉\",\n                    \"⠉⠙\",\n                    \"⠉⠙\",\n                    \"⠉⠩\",\n                    \"⠈⢙\",\n                    \"⠈⡙\",\n                    \"⢈⠩\",\n                    \"⡀⢙\",\n                    \"⠄⡙\",\n                    \"⢂⠩\",\n                    \"⡂⢘\",\n                    \"⠅⡘\",\n                    \"⢃⠨\",\n                    \"⡃⢐\",\n                    \"⠍⡐\",\n                    \"⢋⠠\",\n                    \"⡋⢀\",\n                    \"⠍⡁\",\n                    \"⢋⠁\",\n                    \"⡋⠁\",\n                    \"⠍⠉\",\n                    \"⠋⠉\",\n                    \"⠋⠉\",\n                    \"⠉⠙\",\n                    \"⠉⠙\",\n                    \"⠉⠩\",\n                    \"⠈⢙\",\n                    \"⠈⡙\",\n                    \"⠈⠩\",\n                    \"⠀⢙\",\n                    \"⠀⡙\",\n                    \"⠀⠩\",\n                    \"⠀⢘\",\n                    \"⠀⡘\",\n                    \"⠀⠨\",\n                    \"⠀⢐\",\n                    \"⠀⡐\",\n                    \"⠀⠠\",\n                    \"⠀⢀\",\n                    \"⠀⡀\",\n            };\n        }\n        private sealed class Dots13Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⣼\",\n                    \"⣹\",\n                    \"⢻\",\n                    \"⠿\",\n                    \"⡟\",\n                    \"⣏\",\n                    \"⣧\",\n                    \"⣶\",\n            };\n        }\n        private sealed class Dots14Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠉⠉\",\n                    \"⠈⠙\",\n                    \"⠀⠹\",\n                    \"⠀⢸\",\n                    \"⠀⣰\",\n                    \"⢀⣠\",\n                    \"⣀⣀\",\n                    \"⣄⡀\",\n                    \"⣆⠀\",\n                    \"⡇⠀\",\n                    \"⠏⠀\",\n                    \"⠋⠁\",\n            };\n        }\n        private sealed class Dots8BitSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠀\",\n                    \"⠁\",\n                    \"⠂\",\n                    \"⠃\",\n                    \"⠄\",\n                    \"⠅\",\n                    \"⠆\",\n                    \"⠇\",\n                    \"⡀\",\n                    \"⡁\",\n                    \"⡂\",\n                    \"⡃\",\n                    \"⡄\",\n                    \"⡅\",\n                    \"⡆\",\n                    \"⡇\",\n                    \"⠈\",\n                    \"⠉\",\n                    \"⠊\",\n                    \"⠋\",\n                    \"⠌\",\n                    \"⠍\",\n                    \"⠎\",\n                    \"⠏\",\n                    \"⡈\",\n                    \"⡉\",\n                    \"⡊\",\n                    \"⡋\",\n                    \"⡌\",\n                    \"⡍\",\n                    \"⡎\",\n                    \"⡏\",\n                    \"⠐\",\n                    \"⠑\",\n                    \"⠒\",\n                    \"⠓\",\n                    \"⠔\",\n                    \"⠕\",\n                    \"⠖\",\n                    \"⠗\",\n                    \"⡐\",\n                    \"⡑\",\n                    \"⡒\",\n                    \"⡓\",\n                    \"⡔\",\n                    \"⡕\",\n                    \"⡖\",\n                    \"⡗\",\n                    \"⠘\",\n                    \"⠙\",\n                    \"⠚\",\n                    \"⠛\",\n                    \"⠜\",\n                    \"⠝\",\n                    \"⠞\",\n                    \"⠟\",\n                    \"⡘\",\n                    \"⡙\",\n                    \"⡚\",\n                    \"⡛\",\n                    \"⡜\",\n                    \"⡝\",\n                    \"⡞\",\n                    \"⡟\",\n                    \"⠠\",\n                    \"⠡\",\n                    \"⠢\",\n                    \"⠣\",\n                    \"⠤\",\n                    \"⠥\",\n                    \"⠦\",\n                    \"⠧\",\n                    \"⡠\",\n                    \"⡡\",\n                    \"⡢\",\n                    \"⡣\",\n                    \"⡤\",\n                    \"⡥\",\n                    \"⡦\",\n                    \"⡧\",\n                    \"⠨\",\n                    \"⠩\",\n                    \"⠪\",\n                    \"⠫\",\n                    \"⠬\",\n                    \"⠭\",\n                    \"⠮\",\n                    \"⠯\",\n                    \"⡨\",\n                    \"⡩\",\n                    \"⡪\",\n                    \"⡫\",\n                    \"⡬\",\n                    \"⡭\",\n                    \"⡮\",\n                    \"⡯\",\n                    \"⠰\",\n                    \"⠱\",\n                    \"⠲\",\n                    \"⠳\",\n                    \"⠴\",\n                    \"⠵\",\n                    \"⠶\",\n                    \"⠷\",\n                    \"⡰\",\n                    \"⡱\",\n                    \"⡲\",\n                    \"⡳\",\n                    \"⡴\",\n                    \"⡵\",\n                    \"⡶\",\n                    \"⡷\",\n                    \"⠸\",\n                    \"⠹\",\n                    \"⠺\",\n                    \"⠻\",\n                    \"⠼\",\n                    \"⠽\",\n                    \"⠾\",\n                    \"⠿\",\n                    \"⡸\",\n                    \"⡹\",\n                    \"⡺\",\n                    \"⡻\",\n                    \"⡼\",\n                    \"⡽\",\n                    \"⡾\",\n                    \"⡿\",\n                    \"⢀\",\n                    \"⢁\",\n                    \"⢂\",\n                    \"⢃\",\n                    \"⢄\",\n                    \"⢅\",\n                    \"⢆\",\n                    \"⢇\",\n                    \"⣀\",\n                    \"⣁\",\n                    \"⣂\",\n                    \"⣃\",\n                    \"⣄\",\n                    \"⣅\",\n                    \"⣆\",\n                    \"⣇\",\n                    \"⢈\",\n                    \"⢉\",\n                    \"⢊\",\n                    \"⢋\",\n                    \"⢌\",\n                    \"⢍\",\n                    \"⢎\",\n                    \"⢏\",\n                    \"⣈\",\n                    \"⣉\",\n                    \"⣊\",\n                    \"⣋\",\n                    \"⣌\",\n                    \"⣍\",\n                    \"⣎\",\n                    \"⣏\",\n                    \"⢐\",\n                    \"⢑\",\n                    \"⢒\",\n                    \"⢓\",\n                    \"⢔\",\n                    \"⢕\",\n                    \"⢖\",\n                    \"⢗\",\n                    \"⣐\",\n                    \"⣑\",\n                    \"⣒\",\n                    \"⣓\",\n                    \"⣔\",\n                    \"⣕\",\n                    \"⣖\",\n                    \"⣗\",\n                    \"⢘\",\n                    \"⢙\",\n                    \"⢚\",\n                    \"⢛\",\n                    \"⢜\",\n                    \"⢝\",\n                    \"⢞\",\n                    \"⢟\",\n                    \"⣘\",\n                    \"⣙\",\n                    \"⣚\",\n                    \"⣛\",\n                    \"⣜\",\n                    \"⣝\",\n                    \"⣞\",\n                    \"⣟\",\n                    \"⢠\",\n                    \"⢡\",\n                    \"⢢\",\n                    \"⢣\",\n                    \"⢤\",\n                    \"⢥\",\n                    \"⢦\",\n                    \"⢧\",\n                    \"⣠\",\n                    \"⣡\",\n                    \"⣢\",\n                    \"⣣\",\n                    \"⣤\",\n                    \"⣥\",\n                    \"⣦\",\n                    \"⣧\",\n                    \"⢨\",\n                    \"⢩\",\n                    \"⢪\",\n                    \"⢫\",\n                    \"⢬\",\n                    \"⢭\",\n                    \"⢮\",\n                    \"⢯\",\n                    \"⣨\",\n                    \"⣩\",\n                    \"⣪\",\n                    \"⣫\",\n                    \"⣬\",\n                    \"⣭\",\n                    \"⣮\",\n                    \"⣯\",\n                    \"⢰\",\n                    \"⢱\",\n                    \"⢲\",\n                    \"⢳\",\n                    \"⢴\",\n                    \"⢵\",\n                    \"⢶\",\n                    \"⢷\",\n                    \"⣰\",\n                    \"⣱\",\n                    \"⣲\",\n                    \"⣳\",\n                    \"⣴\",\n                    \"⣵\",\n                    \"⣶\",\n                    \"⣷\",\n                    \"⢸\",\n                    \"⢹\",\n                    \"⢺\",\n                    \"⢻\",\n                    \"⢼\",\n                    \"⢽\",\n                    \"⢾\",\n                    \"⢿\",\n                    \"⣸\",\n                    \"⣹\",\n                    \"⣺\",\n                    \"⣻\",\n                    \"⣼\",\n                    \"⣽\",\n                    \"⣾\",\n                    \"⣿\",\n            };\n        }\n        private sealed class DotsCircleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⢎ \",\n                    \"⠎⠁\",\n                    \"⠊⠑\",\n                    \"⠈⠱\",\n                    \" ⡱\",\n                    \"⢀⡰\",\n                    \"⢄⡠\",\n                    \"⢆⡀\",\n            };\n        }\n        private sealed class SandSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠁\",\n                    \"⠂\",\n                    \"⠄\",\n                    \"⡀\",\n                    \"⡈\",\n                    \"⡐\",\n                    \"⡠\",\n                    \"⣀\",\n                    \"⣁\",\n                    \"⣂\",\n                    \"⣄\",\n                    \"⣌\",\n                    \"⣔\",\n                    \"⣤\",\n                    \"⣥\",\n                    \"⣦\",\n                    \"⣮\",\n                    \"⣶\",\n                    \"⣷\",\n                    \"⣿\",\n                    \"⡿\",\n                    \"⠿\",\n                    \"⢟\",\n                    \"⠟\",\n                    \"⡛\",\n                    \"⠛\",\n                    \"⠫\",\n                    \"⢋\",\n                    \"⠋\",\n                    \"⠍\",\n                    \"⡉\",\n                    \"⠉\",\n                    \"⠑\",\n                    \"⠡\",\n                    \"⢁\",\n            };\n        }\n        private sealed class LineSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(130);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"-\",\n                    \"\\\\\",\n                    \"|\",\n                    \"/\",\n            };\n        }\n        private sealed class Line2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠂\",\n                    \"-\",\n                    \"–\",\n                    \"—\",\n                    \"–\",\n                    \"-\",\n            };\n        }\n        private sealed class PipeSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"┤\",\n                    \"┘\",\n                    \"┴\",\n                    \"└\",\n                    \"├\",\n                    \"┌\",\n                    \"┬\",\n                    \"┐\",\n            };\n        }\n        private sealed class SimpleDotsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(400);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \".  \",\n                    \".. \",\n                    \"...\",\n                    \"   \",\n            };\n        }\n        private sealed class SimpleDotsScrollingSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \".  \",\n                    \".. \",\n                    \"...\",\n                    \" ..\",\n                    \"  .\",\n                    \"   \",\n            };\n        }\n        private sealed class StarSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(70);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"✶\",\n                    \"✸\",\n                    \"✹\",\n                    \"✺\",\n                    \"✹\",\n                    \"✷\",\n            };\n        }\n        private sealed class Star2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"+\",\n                    \"x\",\n                    \"*\",\n            };\n        }\n        private sealed class FlipSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(70);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"-\",\n                    \"`\",\n                    \"`\",\n                    \"'\",\n                    \"´\",\n                    \"-\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n            };\n        }\n        private sealed class HamburgerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"☱\",\n                    \"☲\",\n                    \"☴\",\n            };\n        }\n        private sealed class GrowVerticalSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▁\",\n                    \"▃\",\n                    \"▄\",\n                    \"▅\",\n                    \"▆\",\n                    \"▇\",\n                    \"▆\",\n                    \"▅\",\n                    \"▄\",\n                    \"▃\",\n            };\n        }\n        private sealed class GrowHorizontalSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▏\",\n                    \"▎\",\n                    \"▍\",\n                    \"▌\",\n                    \"▋\",\n                    \"▊\",\n                    \"▉\",\n                    \"▊\",\n                    \"▋\",\n                    \"▌\",\n                    \"▍\",\n                    \"▎\",\n            };\n        }\n        private sealed class BalloonSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(140);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \" \",\n                    \".\",\n                    \"o\",\n                    \"O\",\n                    \"@\",\n                    \"*\",\n                    \" \",\n            };\n        }\n        private sealed class Balloon2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \".\",\n                    \"o\",\n                    \"O\",\n                    \"°\",\n                    \"O\",\n                    \"o\",\n                    \".\",\n            };\n        }\n        private sealed class NoiseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▓\",\n                    \"▒\",\n                    \"░\",\n            };\n        }\n        private sealed class BounceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⠁\",\n                    \"⠂\",\n                    \"⠄\",\n                    \"⠂\",\n            };\n        }\n        private sealed class BoxBounceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▖\",\n                    \"▘\",\n                    \"▝\",\n                    \"▗\",\n            };\n        }\n        private sealed class BoxBounce2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▌\",\n                    \"▀\",\n                    \"▐\",\n                    \"▄\",\n            };\n        }\n        private sealed class TriangleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◢\",\n                    \"◣\",\n                    \"◤\",\n                    \"◥\",\n            };\n        }\n        private sealed class BinarySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"010010\",\n                    \"001100\",\n                    \"100101\",\n                    \"111010\",\n                    \"111101\",\n                    \"010111\",\n                    \"101011\",\n                    \"111000\",\n                    \"110011\",\n                    \"110101\",\n            };\n        }\n        private sealed class ArcSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◜\",\n                    \"◠\",\n                    \"◝\",\n                    \"◞\",\n                    \"◡\",\n                    \"◟\",\n            };\n        }\n        private sealed class CircleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◡\",\n                    \"⊙\",\n                    \"◠\",\n            };\n        }\n        private sealed class SquareCornersSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(180);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◰\",\n                    \"◳\",\n                    \"◲\",\n                    \"◱\",\n            };\n        }\n        private sealed class CircleQuartersSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◴\",\n                    \"◷\",\n                    \"◶\",\n                    \"◵\",\n            };\n        }\n        private sealed class CircleHalvesSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◐\",\n                    \"◓\",\n                    \"◑\",\n                    \"◒\",\n            };\n        }\n        private sealed class SquishSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"╫\",\n                    \"╪\",\n            };\n        }\n        private sealed class ToggleSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(250);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⊶\",\n                    \"⊷\",\n            };\n        }\n        private sealed class Toggle2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▫\",\n                    \"▪\",\n            };\n        }\n        private sealed class Toggle3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"□\",\n                    \"■\",\n            };\n        }\n        private sealed class Toggle4Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"■\",\n                    \"□\",\n                    \"▪\",\n                    \"▫\",\n            };\n        }\n        private sealed class Toggle5Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▮\",\n                    \"▯\",\n            };\n        }\n        private sealed class Toggle6Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(300);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"ဝ\",\n                    \"၀\",\n            };\n        }\n        private sealed class Toggle7Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⦾\",\n                    \"⦿\",\n            };\n        }\n        private sealed class Toggle8Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◍\",\n                    \"◌\",\n            };\n        }\n        private sealed class Toggle9Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"◉\",\n                    \"◎\",\n            };\n        }\n        private sealed class Toggle10Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"㊂\",\n                    \"㊀\",\n                    \"㊁\",\n            };\n        }\n        private sealed class Toggle11Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(50);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⧇\",\n                    \"⧆\",\n            };\n        }\n        private sealed class Toggle12Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"☗\",\n                    \"☖\",\n            };\n        }\n        private sealed class Toggle13Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"=\",\n                    \"*\",\n                    \"-\",\n            };\n        }\n        private sealed class ArrowSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"←\",\n                    \"↖\",\n                    \"↑\",\n                    \"↗\",\n                    \"→\",\n                    \"↘\",\n                    \"↓\",\n                    \"↙\",\n            };\n        }\n        private sealed class Arrow2Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"⬆️ \",\n                    \"↗️ \",\n                    \"➡️ \",\n                    \"↘️ \",\n                    \"⬇️ \",\n                    \"↙️ \",\n                    \"⬅️ \",\n                    \"↖️ \",\n            };\n        }\n        private sealed class Arrow3Spinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▹▹▹▹▹\",\n                    \"▸▹▹▹▹\",\n                    \"▹▸▹▹▹\",\n                    \"▹▹▸▹▹\",\n                    \"▹▹▹▸▹\",\n                    \"▹▹▹▹▸\",\n            };\n        }\n        private sealed class BouncingBarSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"[    ]\",\n                    \"[=   ]\",\n                    \"[==  ]\",\n                    \"[=== ]\",\n                    \"[====]\",\n                    \"[ ===]\",\n                    \"[  ==]\",\n                    \"[   =]\",\n                    \"[    ]\",\n                    \"[   =]\",\n                    \"[  ==]\",\n                    \"[ ===]\",\n                    \"[====]\",\n                    \"[=== ]\",\n                    \"[==  ]\",\n                    \"[=   ]\",\n            };\n        }\n        private sealed class BouncingBallSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"( ●    )\",\n                    \"(  ●   )\",\n                    \"(   ●  )\",\n                    \"(    ● )\",\n                    \"(     ●)\",\n                    \"(    ● )\",\n                    \"(   ●  )\",\n                    \"(  ●   )\",\n                    \"( ●    )\",\n                    \"(●     )\",\n            };\n        }\n        private sealed class SmileySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(200);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"😄 \",\n                    \"😝 \",\n            };\n        }\n        private sealed class MonkeySpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(300);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🙈 \",\n                    \"🙈 \",\n                    \"🙉 \",\n                    \"🙊 \",\n            };\n        }\n        private sealed class HeartsSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"💛 \",\n                    \"💙 \",\n                    \"💜 \",\n                    \"💚 \",\n                    \"❤️ \",\n            };\n        }\n        private sealed class ClockSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🕛 \",\n                    \"🕐 \",\n                    \"🕑 \",\n                    \"🕒 \",\n                    \"🕓 \",\n                    \"🕔 \",\n                    \"🕕 \",\n                    \"🕖 \",\n                    \"🕗 \",\n                    \"🕘 \",\n                    \"🕙 \",\n                    \"🕚 \",\n            };\n        }\n        private sealed class EarthSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(180);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🌍 \",\n                    \"🌎 \",\n                    \"🌏 \",\n            };\n        }\n        private sealed class MaterialSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(17);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"██████████▁▁▁▁▁▁▁▁▁▁\",\n                    \"███████████▁▁▁▁▁▁▁▁▁\",\n                    \"█████████████▁▁▁▁▁▁▁\",\n                    \"██████████████▁▁▁▁▁▁\",\n                    \"██████████████▁▁▁▁▁▁\",\n                    \"▁██████████████▁▁▁▁▁\",\n                    \"▁██████████████▁▁▁▁▁\",\n                    \"▁██████████████▁▁▁▁▁\",\n                    \"▁▁██████████████▁▁▁▁\",\n                    \"▁▁▁██████████████▁▁▁\",\n                    \"▁▁▁▁█████████████▁▁▁\",\n                    \"▁▁▁▁██████████████▁▁\",\n                    \"▁▁▁▁██████████████▁▁\",\n                    \"▁▁▁▁▁██████████████▁\",\n                    \"▁▁▁▁▁██████████████▁\",\n                    \"▁▁▁▁▁██████████████▁\",\n                    \"▁▁▁▁▁▁██████████████\",\n                    \"▁▁▁▁▁▁██████████████\",\n                    \"▁▁▁▁▁▁▁█████████████\",\n                    \"▁▁▁▁▁▁▁█████████████\",\n                    \"▁▁▁▁▁▁▁▁████████████\",\n                    \"▁▁▁▁▁▁▁▁████████████\",\n                    \"▁▁▁▁▁▁▁▁▁███████████\",\n                    \"▁▁▁▁▁▁▁▁▁███████████\",\n                    \"▁▁▁▁▁▁▁▁▁▁██████████\",\n                    \"▁▁▁▁▁▁▁▁▁▁██████████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                    \"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                    \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                    \"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                    \"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                    \"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                    \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"█████████▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"███████████▁▁▁▁▁▁▁▁▁\",\n                    \"████████████▁▁▁▁▁▁▁▁\",\n                    \"████████████▁▁▁▁▁▁▁▁\",\n                    \"██████████████▁▁▁▁▁▁\",\n                    \"██████████████▁▁▁▁▁▁\",\n                    \"▁██████████████▁▁▁▁▁\",\n                    \"▁██████████████▁▁▁▁▁\",\n                    \"▁▁▁█████████████▁▁▁▁\",\n                    \"▁▁▁▁▁████████████▁▁▁\",\n                    \"▁▁▁▁▁████████████▁▁▁\",\n                    \"▁▁▁▁▁▁███████████▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁█████████▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁█████████▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁█████████▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n                    \"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\n            };\n        }\n        private sealed class MoonSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🌑 \",\n                    \"🌒 \",\n                    \"🌓 \",\n                    \"🌔 \",\n                    \"🌕 \",\n                    \"🌖 \",\n                    \"🌗 \",\n                    \"🌘 \",\n            };\n        }\n        private sealed class RunnerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(140);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🚶 \",\n                    \"🏃 \",\n            };\n        }\n        private sealed class PongSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▐⠂       ▌\",\n                    \"▐⠈       ▌\",\n                    \"▐ ⠂      ▌\",\n                    \"▐ ⠠      ▌\",\n                    \"▐  ⡀     ▌\",\n                    \"▐  ⠠     ▌\",\n                    \"▐   ⠂    ▌\",\n                    \"▐   ⠈    ▌\",\n                    \"▐    ⠂   ▌\",\n                    \"▐    ⠠   ▌\",\n                    \"▐     ⡀  ▌\",\n                    \"▐     ⠠  ▌\",\n                    \"▐      ⠂ ▌\",\n                    \"▐      ⠈ ▌\",\n                    \"▐       ⠂▌\",\n                    \"▐       ⠠▌\",\n                    \"▐       ⡀▌\",\n                    \"▐      ⠠ ▌\",\n                    \"▐      ⠂ ▌\",\n                    \"▐     ⠈  ▌\",\n                    \"▐     ⠂  ▌\",\n                    \"▐    ⠠   ▌\",\n                    \"▐    ⡀   ▌\",\n                    \"▐   ⠠    ▌\",\n                    \"▐   ⠂    ▌\",\n                    \"▐  ⠈     ▌\",\n                    \"▐  ⠂     ▌\",\n                    \"▐ ⠠      ▌\",\n                    \"▐ ⡀      ▌\",\n                    \"▐⠠       ▌\",\n            };\n        }\n        private sealed class SharkSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(120);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▐|\\\\____________▌\",\n                    \"▐_|\\\\___________▌\",\n                    \"▐__|\\\\__________▌\",\n                    \"▐___|\\\\_________▌\",\n                    \"▐____|\\\\________▌\",\n                    \"▐_____|\\\\_______▌\",\n                    \"▐______|\\\\______▌\",\n                    \"▐_______|\\\\_____▌\",\n                    \"▐________|\\\\____▌\",\n                    \"▐_________|\\\\___▌\",\n                    \"▐__________|\\\\__▌\",\n                    \"▐___________|\\\\_▌\",\n                    \"▐____________|\\\\▌\",\n                    \"▐____________/|▌\",\n                    \"▐___________/|_▌\",\n                    \"▐__________/|__▌\",\n                    \"▐_________/|___▌\",\n                    \"▐________/|____▌\",\n                    \"▐_______/|_____▌\",\n                    \"▐______/|______▌\",\n                    \"▐_____/|_______▌\",\n                    \"▐____/|________▌\",\n                    \"▐___/|_________▌\",\n                    \"▐__/|__________▌\",\n                    \"▐_/|___________▌\",\n                    \"▐/|____________▌\",\n            };\n        }\n        private sealed class DqpbSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => false;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"d\",\n                    \"q\",\n                    \"p\",\n                    \"b\",\n            };\n        }\n        private sealed class WeatherSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"☀️ \",\n                    \"☀️ \",\n                    \"☀️ \",\n                    \"🌤 \",\n                    \"⛅️ \",\n                    \"🌥 \",\n                    \"☁️ \",\n                    \"🌧 \",\n                    \"🌨 \",\n                    \"🌧 \",\n                    \"🌨 \",\n                    \"🌧 \",\n                    \"🌨 \",\n                    \"⛈ \",\n                    \"🌨 \",\n                    \"🌧 \",\n                    \"🌨 \",\n                    \"☁️ \",\n                    \"🌥 \",\n                    \"⛅️ \",\n                    \"🌤 \",\n                    \"☀️ \",\n                    \"☀️ \",\n            };\n        }\n        private sealed class ChristmasSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(400);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🌲\",\n                    \"🎄\",\n            };\n        }\n        private sealed class GrenadeSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"،  \",\n                    \"′  \",\n                    \" ´ \",\n                    \" ‾ \",\n                    \"  ⸌\",\n                    \"  ⸊\",\n                    \"  |\",\n                    \"  ⁎\",\n                    \"  ⁕\",\n                    \" ෴ \",\n                    \"  ⁓\",\n                    \"   \",\n                    \"   \",\n                    \"   \",\n            };\n        }\n        private sealed class PointSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(125);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"∙∙∙\",\n                    \"●∙∙\",\n                    \"∙●∙\",\n                    \"∙∙●\",\n                    \"∙∙∙\",\n            };\n        }\n        private sealed class LayerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(150);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"-\",\n                    \"=\",\n                    \"≡\",\n            };\n        }\n        private sealed class BetaWaveSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"ρββββββ\",\n                    \"βρβββββ\",\n                    \"ββρββββ\",\n                    \"βββρβββ\",\n                    \"ββββρββ\",\n                    \"βββββρβ\",\n                    \"ββββββρ\",\n            };\n        }\n        private sealed class FingerDanceSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🤘 \",\n                    \"🤟 \",\n                    \"🖖 \",\n                    \"✋ \",\n                    \"🤚 \",\n                    \"👆 \",\n            };\n        }\n        private sealed class FistBumpSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🤜　　　　🤛 \",\n                    \"🤜　　　　🤛 \",\n                    \"🤜　　　　🤛 \",\n                    \"　🤜　　🤛　 \",\n                    \"　　🤜🤛　　 \",\n                    \"　🤜✨🤛　　 \",\n                    \"🤜　✨　🤛　 \",\n            };\n        }\n        private sealed class SoccerHeaderSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \" 🧑⚽️       🧑 \",\n                    \"🧑  ⚽️      🧑 \",\n                    \"🧑   ⚽️     🧑 \",\n                    \"🧑    ⚽️    🧑 \",\n                    \"🧑     ⚽️   🧑 \",\n                    \"🧑      ⚽️  🧑 \",\n                    \"🧑       ⚽️🧑  \",\n                    \"🧑      ⚽️  🧑 \",\n                    \"🧑     ⚽️   🧑 \",\n                    \"🧑    ⚽️    🧑 \",\n                    \"🧑   ⚽️     🧑 \",\n                    \"🧑  ⚽️      🧑 \",\n            };\n        }\n        private sealed class MindblownSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"😐 \",\n                    \"😐 \",\n                    \"😮 \",\n                    \"😮 \",\n                    \"😦 \",\n                    \"😦 \",\n                    \"😧 \",\n                    \"😧 \",\n                    \"🤯 \",\n                    \"💥 \",\n                    \"✨ \",\n                    \"　 \",\n                    \"　 \",\n                    \"　 \",\n            };\n        }\n        private sealed class SpeakerSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(160);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🔈 \",\n                    \"🔉 \",\n                    \"🔊 \",\n                    \"🔉 \",\n            };\n        }\n        private sealed class OrangePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🔸 \",\n                    \"🔶 \",\n                    \"🟠 \",\n                    \"🟠 \",\n                    \"🔶 \",\n            };\n        }\n        private sealed class BluePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🔹 \",\n                    \"🔷 \",\n                    \"🔵 \",\n                    \"🔵 \",\n                    \"🔷 \",\n            };\n        }\n        private sealed class OrangeBluePulseSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🔸 \",\n                    \"🔶 \",\n                    \"🟠 \",\n                    \"🟠 \",\n                    \"🔶 \",\n                    \"🔹 \",\n                    \"🔷 \",\n                    \"🔵 \",\n                    \"🔵 \",\n                    \"🔷 \",\n            };\n        }\n        private sealed class TimeTravelSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"🕛 \",\n                    \"🕚 \",\n                    \"🕙 \",\n                    \"🕘 \",\n                    \"🕗 \",\n                    \"🕖 \",\n                    \"🕕 \",\n                    \"🕔 \",\n                    \"🕓 \",\n                    \"🕒 \",\n                    \"🕑 \",\n                    \"🕐 \",\n            };\n        }\n        private sealed class AestheticSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \"▰▱▱▱▱▱▱\",\n                    \"▰▰▱▱▱▱▱\",\n                    \"▰▰▰▱▱▱▱\",\n                    \"▰▰▰▰▱▱▱\",\n                    \"▰▰▰▰▰▱▱\",\n                    \"▰▰▰▰▰▰▱\",\n                    \"▰▰▰▰▰▰▰\",\n                    \"▰▱▱▱▱▱▱\",\n            };\n        }\n        private sealed class DwarfFortressSpinner : Spinner\n        {\n            public override TimeSpan Interval => TimeSpan.FromMilliseconds(80);\n            public override bool IsUnicode => true;\n            public override IReadOnlyList<string> Frames => new List<string>\n            {\n                    \" ██████£££  \",\n                    \"☺██████£££  \",\n                    \"☺██████£££  \",\n                    \"☺▓█████£££  \",\n                    \"☺▓█████£££  \",\n                    \"☺▒█████£££  \",\n                    \"☺▒█████£££  \",\n                    \"☺░█████£££  \",\n                    \"☺░█████£££  \",\n                    \"☺ █████£££  \",\n                    \" ☺█████£££  \",\n                    \" ☺█████£££  \",\n                    \" ☺▓████£££  \",\n                    \" ☺▓████£££  \",\n                    \" ☺▒████£££  \",\n                    \" ☺▒████£££  \",\n                    \" ☺░████£££  \",\n                    \" ☺░████£££  \",\n                    \" ☺ ████£££  \",\n                    \"  ☺████£££  \",\n                    \"  ☺████£££  \",\n                    \"  ☺▓███£££  \",\n                    \"  ☺▓███£££  \",\n                    \"  ☺▒███£££  \",\n                    \"  ☺▒███£££  \",\n                    \"  ☺░███£££  \",\n                    \"  ☺░███£££  \",\n                    \"  ☺ ███£££  \",\n                    \"   ☺███£££  \",\n                    \"   ☺███£££  \",\n                    \"   ☺▓██£££  \",\n                    \"   ☺▓██£££  \",\n                    \"   ☺▒██£££  \",\n                    \"   ☺▒██£££  \",\n                    \"   ☺░██£££  \",\n                    \"   ☺░██£££  \",\n                    \"   ☺ ██£££  \",\n                    \"    ☺██£££  \",\n                    \"    ☺██£££  \",\n                    \"    ☺▓█£££  \",\n                    \"    ☺▓█£££  \",\n                    \"    ☺▒█£££  \",\n                    \"    ☺▒█£££  \",\n                    \"    ☺░█£££  \",\n                    \"    ☺░█£££  \",\n                    \"    ☺ █£££  \",\n                    \"     ☺█£££  \",\n                    \"     ☺█£££  \",\n                    \"     ☺▓£££  \",\n                    \"     ☺▓£££  \",\n                    \"     ☺▒£££  \",\n                    \"     ☺▒£££  \",\n                    \"     ☺░£££  \",\n                    \"     ☺░£££  \",\n                    \"     ☺ £££  \",\n                    \"      ☺£££  \",\n                    \"      ☺£££  \",\n                    \"      ☺▓££  \",\n                    \"      ☺▓££  \",\n                    \"      ☺▒££  \",\n                    \"      ☺▒££  \",\n                    \"      ☺░££  \",\n                    \"      ☺░££  \",\n                    \"      ☺ ££  \",\n                    \"       ☺££  \",\n                    \"       ☺££  \",\n                    \"       ☺▓£  \",\n                    \"       ☺▓£  \",\n                    \"       ☺▒£  \",\n                    \"       ☺▒£  \",\n                    \"       ☺░£  \",\n                    \"       ☺░£  \",\n                    \"       ☺ £  \",\n                    \"        ☺£  \",\n                    \"        ☺£  \",\n                    \"        ☺▓  \",\n                    \"        ☺▓  \",\n                    \"        ☺▒  \",\n                    \"        ☺▒  \",\n                    \"        ☺░  \",\n                    \"        ☺░  \",\n                    \"        ☺   \",\n                    \"        ☺  &\",\n                    \"        ☺ ☼&\",\n                    \"       ☺ ☼ &\",\n                    \"       ☺☼  &\",\n                    \"      ☺☼  & \",\n                    \"      ‼   & \",\n                    \"     ☺   &  \",\n                    \"    ‼    &  \",\n                    \"   ☺    &   \",\n                    \"  ‼     &   \",\n                    \" ☺     &    \",\n                    \"‼      &    \",\n                    \"      &     \",\n                    \"      &     \",\n                    \"     &   ░  \",\n                    \"     &   ▒  \",\n                    \"    &    ▓  \",\n                    \"    &    £  \",\n                    \"   &    ░£  \",\n                    \"   &    ▒£  \",\n                    \"  &     ▓£  \",\n                    \"  &     ££  \",\n                    \" &     ░££  \",\n                    \" &     ▒££  \",\n                    \"&      ▓££  \",\n                    \"&      £££  \",\n                    \"      ░£££  \",\n                    \"      ▒£££  \",\n                    \"      ▓£££  \",\n                    \"      █£££  \",\n                    \"     ░█£££  \",\n                    \"     ▒█£££  \",\n                    \"     ▓█£££  \",\n                    \"     ██£££  \",\n                    \"    ░██£££  \",\n                    \"    ▒██£££  \",\n                    \"    ▓██£££  \",\n                    \"    ███£££  \",\n                    \"   ░███£££  \",\n                    \"   ▒███£££  \",\n                    \"   ▓███£££  \",\n                    \"   ████£££  \",\n                    \"  ░████£££  \",\n                    \"  ▒████£££  \",\n                    \"  ▓████£££  \",\n                    \"  █████£££  \",\n                    \" ░█████£££  \",\n                    \" ▒█████£££  \",\n                    \" ▓█████£££  \",\n                    \" ██████£££  \",\n                    \" ██████£££  \",\n            };\n        }\n\n        /// <summary>\n        /// Contains all predefined spinners.\n        /// </summary>\n        public static class Known\n        {\n            /// <summary>\n            /// Gets the \"Default\" spinner.\n            /// </summary>\n            public static Spinner Default { get; } = new DefaultSpinner();\n            /// <summary>\n            /// Gets the \"Ascii\" spinner.\n            /// </summary>\n            public static Spinner Ascii { get; } = new AsciiSpinner();\n            /// <summary>\n            /// Gets the \"dots\" spinner.\n            /// </summary>\n            public static Spinner Dots { get; } = new DotsSpinner();\n            /// <summary>\n            /// Gets the \"dots2\" spinner.\n            /// </summary>\n            public static Spinner Dots2 { get; } = new Dots2Spinner();\n            /// <summary>\n            /// Gets the \"dots3\" spinner.\n            /// </summary>\n            public static Spinner Dots3 { get; } = new Dots3Spinner();\n            /// <summary>\n            /// Gets the \"dots4\" spinner.\n            /// </summary>\n            public static Spinner Dots4 { get; } = new Dots4Spinner();\n            /// <summary>\n            /// Gets the \"dots5\" spinner.\n            /// </summary>\n            public static Spinner Dots5 { get; } = new Dots5Spinner();\n            /// <summary>\n            /// Gets the \"dots6\" spinner.\n            /// </summary>\n            public static Spinner Dots6 { get; } = new Dots6Spinner();\n            /// <summary>\n            /// Gets the \"dots7\" spinner.\n            /// </summary>\n            public static Spinner Dots7 { get; } = new Dots7Spinner();\n            /// <summary>\n            /// Gets the \"dots8\" spinner.\n            /// </summary>\n            public static Spinner Dots8 { get; } = new Dots8Spinner();\n            /// <summary>\n            /// Gets the \"dots9\" spinner.\n            /// </summary>\n            public static Spinner Dots9 { get; } = new Dots9Spinner();\n            /// <summary>\n            /// Gets the \"dots10\" spinner.\n            /// </summary>\n            public static Spinner Dots10 { get; } = new Dots10Spinner();\n            /// <summary>\n            /// Gets the \"dots11\" spinner.\n            /// </summary>\n            public static Spinner Dots11 { get; } = new Dots11Spinner();\n            /// <summary>\n            /// Gets the \"dots12\" spinner.\n            /// </summary>\n            public static Spinner Dots12 { get; } = new Dots12Spinner();\n            /// <summary>\n            /// Gets the \"dots13\" spinner.\n            /// </summary>\n            public static Spinner Dots13 { get; } = new Dots13Spinner();\n            /// <summary>\n            /// Gets the \"dots14\" spinner.\n            /// </summary>\n            public static Spinner Dots14 { get; } = new Dots14Spinner();\n            /// <summary>\n            /// Gets the \"dots8Bit\" spinner.\n            /// </summary>\n            public static Spinner Dots8Bit { get; } = new Dots8BitSpinner();\n            /// <summary>\n            /// Gets the \"dotsCircle\" spinner.\n            /// </summary>\n            public static Spinner DotsCircle { get; } = new DotsCircleSpinner();\n            /// <summary>\n            /// Gets the \"sand\" spinner.\n            /// </summary>\n            public static Spinner Sand { get; } = new SandSpinner();\n            /// <summary>\n            /// Gets the \"line\" spinner.\n            /// </summary>\n            public static Spinner Line { get; } = new LineSpinner();\n            /// <summary>\n            /// Gets the \"line2\" spinner.\n            /// </summary>\n            public static Spinner Line2 { get; } = new Line2Spinner();\n            /// <summary>\n            /// Gets the \"pipe\" spinner.\n            /// </summary>\n            public static Spinner Pipe { get; } = new PipeSpinner();\n            /// <summary>\n            /// Gets the \"simpleDots\" spinner.\n            /// </summary>\n            public static Spinner SimpleDots { get; } = new SimpleDotsSpinner();\n            /// <summary>\n            /// Gets the \"simpleDotsScrolling\" spinner.\n            /// </summary>\n            public static Spinner SimpleDotsScrolling { get; } = new SimpleDotsScrollingSpinner();\n            /// <summary>\n            /// Gets the \"star\" spinner.\n            /// </summary>\n            public static Spinner Star { get; } = new StarSpinner();\n            /// <summary>\n            /// Gets the \"star2\" spinner.\n            /// </summary>\n            public static Spinner Star2 { get; } = new Star2Spinner();\n            /// <summary>\n            /// Gets the \"flip\" spinner.\n            /// </summary>\n            public static Spinner Flip { get; } = new FlipSpinner();\n            /// <summary>\n            /// Gets the \"hamburger\" spinner.\n            /// </summary>\n            public static Spinner Hamburger { get; } = new HamburgerSpinner();\n            /// <summary>\n            /// Gets the \"growVertical\" spinner.\n            /// </summary>\n            public static Spinner GrowVertical { get; } = new GrowVerticalSpinner();\n            /// <summary>\n            /// Gets the \"growHorizontal\" spinner.\n            /// </summary>\n            public static Spinner GrowHorizontal { get; } = new GrowHorizontalSpinner();\n            /// <summary>\n            /// Gets the \"balloon\" spinner.\n            /// </summary>\n            public static Spinner Balloon { get; } = new BalloonSpinner();\n            /// <summary>\n            /// Gets the \"balloon2\" spinner.\n            /// </summary>\n            public static Spinner Balloon2 { get; } = new Balloon2Spinner();\n            /// <summary>\n            /// Gets the \"noise\" spinner.\n            /// </summary>\n            public static Spinner Noise { get; } = new NoiseSpinner();\n            /// <summary>\n            /// Gets the \"bounce\" spinner.\n            /// </summary>\n            public static Spinner Bounce { get; } = new BounceSpinner();\n            /// <summary>\n            /// Gets the \"boxBounce\" spinner.\n            /// </summary>\n            public static Spinner BoxBounce { get; } = new BoxBounceSpinner();\n            /// <summary>\n            /// Gets the \"boxBounce2\" spinner.\n            /// </summary>\n            public static Spinner BoxBounce2 { get; } = new BoxBounce2Spinner();\n            /// <summary>\n            /// Gets the \"triangle\" spinner.\n            /// </summary>\n            public static Spinner Triangle { get; } = new TriangleSpinner();\n            /// <summary>\n            /// Gets the \"binary\" spinner.\n            /// </summary>\n            public static Spinner Binary { get; } = new BinarySpinner();\n            /// <summary>\n            /// Gets the \"arc\" spinner.\n            /// </summary>\n            public static Spinner Arc { get; } = new ArcSpinner();\n            /// <summary>\n            /// Gets the \"circle\" spinner.\n            /// </summary>\n            public static Spinner Circle { get; } = new CircleSpinner();\n            /// <summary>\n            /// Gets the \"squareCorners\" spinner.\n            /// </summary>\n            public static Spinner SquareCorners { get; } = new SquareCornersSpinner();\n            /// <summary>\n            /// Gets the \"circleQuarters\" spinner.\n            /// </summary>\n            public static Spinner CircleQuarters { get; } = new CircleQuartersSpinner();\n            /// <summary>\n            /// Gets the \"circleHalves\" spinner.\n            /// </summary>\n            public static Spinner CircleHalves { get; } = new CircleHalvesSpinner();\n            /// <summary>\n            /// Gets the \"squish\" spinner.\n            /// </summary>\n            public static Spinner Squish { get; } = new SquishSpinner();\n            /// <summary>\n            /// Gets the \"toggle\" spinner.\n            /// </summary>\n            public static Spinner Toggle { get; } = new ToggleSpinner();\n            /// <summary>\n            /// Gets the \"toggle2\" spinner.\n            /// </summary>\n            public static Spinner Toggle2 { get; } = new Toggle2Spinner();\n            /// <summary>\n            /// Gets the \"toggle3\" spinner.\n            /// </summary>\n            public static Spinner Toggle3 { get; } = new Toggle3Spinner();\n            /// <summary>\n            /// Gets the \"toggle4\" spinner.\n            /// </summary>\n            public static Spinner Toggle4 { get; } = new Toggle4Spinner();\n            /// <summary>\n            /// Gets the \"toggle5\" spinner.\n            /// </summary>\n            public static Spinner Toggle5 { get; } = new Toggle5Spinner();\n            /// <summary>\n            /// Gets the \"toggle6\" spinner.\n            /// </summary>\n            public static Spinner Toggle6 { get; } = new Toggle6Spinner();\n            /// <summary>\n            /// Gets the \"toggle7\" spinner.\n            /// </summary>\n            public static Spinner Toggle7 { get; } = new Toggle7Spinner();\n            /// <summary>\n            /// Gets the \"toggle8\" spinner.\n            /// </summary>\n            public static Spinner Toggle8 { get; } = new Toggle8Spinner();\n            /// <summary>\n            /// Gets the \"toggle9\" spinner.\n            /// </summary>\n            public static Spinner Toggle9 { get; } = new Toggle9Spinner();\n            /// <summary>\n            /// Gets the \"toggle10\" spinner.\n            /// </summary>\n            public static Spinner Toggle10 { get; } = new Toggle10Spinner();\n            /// <summary>\n            /// Gets the \"toggle11\" spinner.\n            /// </summary>\n            public static Spinner Toggle11 { get; } = new Toggle11Spinner();\n            /// <summary>\n            /// Gets the \"toggle12\" spinner.\n            /// </summary>\n            public static Spinner Toggle12 { get; } = new Toggle12Spinner();\n            /// <summary>\n            /// Gets the \"toggle13\" spinner.\n            /// </summary>\n            public static Spinner Toggle13 { get; } = new Toggle13Spinner();\n            /// <summary>\n            /// Gets the \"arrow\" spinner.\n            /// </summary>\n            public static Spinner Arrow { get; } = new ArrowSpinner();\n            /// <summary>\n            /// Gets the \"arrow2\" spinner.\n            /// </summary>\n            public static Spinner Arrow2 { get; } = new Arrow2Spinner();\n            /// <summary>\n            /// Gets the \"arrow3\" spinner.\n            /// </summary>\n            public static Spinner Arrow3 { get; } = new Arrow3Spinner();\n            /// <summary>\n            /// Gets the \"bouncingBar\" spinner.\n            /// </summary>\n            public static Spinner BouncingBar { get; } = new BouncingBarSpinner();\n            /// <summary>\n            /// Gets the \"bouncingBall\" spinner.\n            /// </summary>\n            public static Spinner BouncingBall { get; } = new BouncingBallSpinner();\n            /// <summary>\n            /// Gets the \"smiley\" spinner.\n            /// </summary>\n            public static Spinner Smiley { get; } = new SmileySpinner();\n            /// <summary>\n            /// Gets the \"monkey\" spinner.\n            /// </summary>\n            public static Spinner Monkey { get; } = new MonkeySpinner();\n            /// <summary>\n            /// Gets the \"hearts\" spinner.\n            /// </summary>\n            public static Spinner Hearts { get; } = new HeartsSpinner();\n            /// <summary>\n            /// Gets the \"clock\" spinner.\n            /// </summary>\n            public static Spinner Clock { get; } = new ClockSpinner();\n            /// <summary>\n            /// Gets the \"earth\" spinner.\n            /// </summary>\n            public static Spinner Earth { get; } = new EarthSpinner();\n            /// <summary>\n            /// Gets the \"material\" spinner.\n            /// </summary>\n            public static Spinner Material { get; } = new MaterialSpinner();\n            /// <summary>\n            /// Gets the \"moon\" spinner.\n            /// </summary>\n            public static Spinner Moon { get; } = new MoonSpinner();\n            /// <summary>\n            /// Gets the \"runner\" spinner.\n            /// </summary>\n            public static Spinner Runner { get; } = new RunnerSpinner();\n            /// <summary>\n            /// Gets the \"pong\" spinner.\n            /// </summary>\n            public static Spinner Pong { get; } = new PongSpinner();\n            /// <summary>\n            /// Gets the \"shark\" spinner.\n            /// </summary>\n            public static Spinner Shark { get; } = new SharkSpinner();\n            /// <summary>\n            /// Gets the \"dqpb\" spinner.\n            /// </summary>\n            public static Spinner Dqpb { get; } = new DqpbSpinner();\n            /// <summary>\n            /// Gets the \"weather\" spinner.\n            /// </summary>\n            public static Spinner Weather { get; } = new WeatherSpinner();\n            /// <summary>\n            /// Gets the \"christmas\" spinner.\n            /// </summary>\n            public static Spinner Christmas { get; } = new ChristmasSpinner();\n            /// <summary>\n            /// Gets the \"grenade\" spinner.\n            /// </summary>\n            public static Spinner Grenade { get; } = new GrenadeSpinner();\n            /// <summary>\n            /// Gets the \"point\" spinner.\n            /// </summary>\n            public static Spinner Point { get; } = new PointSpinner();\n            /// <summary>\n            /// Gets the \"layer\" spinner.\n            /// </summary>\n            public static Spinner Layer { get; } = new LayerSpinner();\n            /// <summary>\n            /// Gets the \"betaWave\" spinner.\n            /// </summary>\n            public static Spinner BetaWave { get; } = new BetaWaveSpinner();\n            /// <summary>\n            /// Gets the \"fingerDance\" spinner.\n            /// </summary>\n            public static Spinner FingerDance { get; } = new FingerDanceSpinner();\n            /// <summary>\n            /// Gets the \"fistBump\" spinner.\n            /// </summary>\n            public static Spinner FistBump { get; } = new FistBumpSpinner();\n            /// <summary>\n            /// Gets the \"soccerHeader\" spinner.\n            /// </summary>\n            public static Spinner SoccerHeader { get; } = new SoccerHeaderSpinner();\n            /// <summary>\n            /// Gets the \"mindblown\" spinner.\n            /// </summary>\n            public static Spinner Mindblown { get; } = new MindblownSpinner();\n            /// <summary>\n            /// Gets the \"speaker\" spinner.\n            /// </summary>\n            public static Spinner Speaker { get; } = new SpeakerSpinner();\n            /// <summary>\n            /// Gets the \"orangePulse\" spinner.\n            /// </summary>\n            public static Spinner OrangePulse { get; } = new OrangePulseSpinner();\n            /// <summary>\n            /// Gets the \"bluePulse\" spinner.\n            /// </summary>\n            public static Spinner BluePulse { get; } = new BluePulseSpinner();\n            /// <summary>\n            /// Gets the \"orangeBluePulse\" spinner.\n            /// </summary>\n            public static Spinner OrangeBluePulse { get; } = new OrangeBluePulseSpinner();\n            /// <summary>\n            /// Gets the \"timeTravel\" spinner.\n            /// </summary>\n            public static Spinner TimeTravel { get; } = new TimeTravelSpinner();\n            /// <summary>\n            /// Gets the \"aesthetic\" spinner.\n            /// </summary>\n            public static Spinner Aesthetic { get; } = new AestheticSpinner();\n            /// <summary>\n            /// Gets the \"dwarfFortress\" spinner.\n            /// </summary>\n            public static Spinner DwarfFortress { get; } = new DwarfFortressSpinner();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Properties/Usings.cs",
    "content": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.Globalization;\nglobal using System.IO;\nglobal using System.Linq;\nglobal using System.Reflection;\nglobal using System.Runtime.CompilerServices;\nglobal using System.Text.RegularExpressions;\nglobal using System.Threading.Tasks;\nglobal using Shouldly;\nglobal using Spectre.Console.Json;\nglobal using Spectre.Console.Rendering;\nglobal using Spectre.Console.Testing;\nglobal using Spectre.Console.Tests.Data;\nglobal using VerifyTests;\nglobal using VerifyXunit;\nglobal using Xunit;"
  },
  {
    "path": "src/Spectre.Console.Tests/Spectre.Console.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>\n    <GenerateDocumentationFile>false</GenerateDocumentationFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"Data\\example.json\" />\n    <EmbeddedResource Include=\"Data\\starwars.flf\" />\n    <EmbeddedResource Include=\"Data\\poison.flf\" />\n    <None Remove=\"Data\\example.json\" />\n    <None Remove=\"Data\\starwars.flf\" />\n    <None Remove=\"Data\\poison.flf\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" />\n    <PackageReference Include=\"Shouldly\" />\n    <PackageReference Include=\"Spectre.Verify.Extensions\" />\n    <PackageReference Include=\"Verify.Xunit\" />\n    <PackageReference Include=\"xunit\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Spectre.Console.Testing\\Spectre.Console.Testing.csproj\" />\n    <ProjectReference Include=\"..\\Spectre.Console\\Spectre.Console.csproj\" />\n    <ProjectReference Include=\"..\\Extensions\\Spectre.Console.Json\\Spectre.Console.Json.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AlternateScreenTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"AlternateScreen\")]\npublic sealed class AlternateScreenTests\n{\n    [Fact]\n    public void Should_Throw_If_Alternative_Buffer_Is_Not_Supported_By_Terminal()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.AlternateBuffer = false;\n\n        // When\n        var result = Record.Exception(() =>\n        {\n            console.WriteLine(\"Foo\");\n            console.AlternateScreen(() =>\n            {\n                console.WriteLine(\"Bar\");\n            });\n        });\n\n        // Then\n        result.ShouldNotBeNull();\n        result.Message.ShouldBe(\"Alternate buffers are not supported by your terminal.\");\n    }\n\n    [Fact]\n    public void Should_Throw_If_Ansi_Is_Not_Supported_By_Terminal()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Ansi = false;\n        console.Profile.Capabilities.AlternateBuffer = true;\n\n        // When\n        var result = Record.Exception(() =>\n        {\n            console.WriteLine(\"Foo\");\n            console.AlternateScreen(() =>\n            {\n                console.WriteLine(\"Bar\");\n            });\n        });\n\n        // Then\n        result.ShouldNotBeNull();\n        result.Message.ShouldBe(\"Alternate buffers are not supported since your terminal does not support ANSI.\");\n    }\n\n    [Fact]\n    [Expectation(\"Show\")]\n    public async Task Should_Write_To_Alternate_Screen()\n    {\n        // Given\n        var console = new TestConsole();\n        console.EmitAnsiSequences = true;\n        console.Profile.Capabilities.AlternateBuffer = true;\n\n        // When\n        console.WriteLine(\"Foo\");\n        console.AlternateScreen(() =>\n        {\n            console.WriteLine(\"Bar\");\n        });\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Ansi.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed partial class AnsiConsoleTests\n{\n    public sealed class Ansi\n    {\n        [Fact]\n        public void Should_Write_Ansi_Codes_To_Console_If_Supported()\n        {\n            // Given\n            var console = new TestConsole()\n                .SupportsAnsi(true)\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.WriteAnsi(\"\u001b[101mHello\u001b[0m\");\n\n            // Then\n            console.Output.NormalizeLineEndings()\n                .ShouldBe(\"\u001b[101mHello\u001b[0m\");\n        }\n\n        [Fact]\n        public void Should_Not_Write_Ansi_Codes_To_Console_If_Not_Supported()\n        {\n            // Given\n            var console = new TestConsole()\n                .SupportsAnsi(false)\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.WriteAnsi(\"\u001b[101mHello\u001b[0m\");\n\n            // Then\n            console.Output.NormalizeLineEndings()\n                .ShouldBeEmpty();\n        }\n\n        [Fact]\n        public void Should_Return_Ansi_For_Renderable()\n        {\n            // Given\n            var console = new TestConsole().Colors(ColorSystem.TrueColor);\n            var markup = new Console.Markup(\"[yellow]Hello [blue]World[/]![/]\");\n\n            // When\n            var result = console.ToAnsi(markup);\n\n            // Then\n            result.ShouldBe(\"\u001b[38;5;11mHello \u001b[0m\u001b[38;5;12mWorld\u001b[0m\u001b[38;5;11m!\u001b[0m\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Colors.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    [Theory]\n    [InlineData(ColorSystemSupport.NoColors, ColorSystem.NoColors)]\n    [InlineData(ColorSystemSupport.Legacy, ColorSystem.Legacy)]\n    [InlineData(ColorSystemSupport.Standard, ColorSystem.Standard)]\n    [InlineData(ColorSystemSupport.EightBit, ColorSystem.EightBit)]\n    [InlineData(ColorSystemSupport.TrueColor, ColorSystem.TrueColor)]\n    public void Should_Create_Console_With_Requested_ColorSystem(ColorSystemSupport requested, ColorSystem expected)\n    {\n        // Given, When\n        var console = AnsiConsole.Create(new AnsiConsoleSettings\n        {\n            ColorSystem = requested,\n            Out = new AnsiConsoleOutput(new StringWriter()),\n        });\n\n        // Then\n        console.Profile.Capabilities.ColorSystem.ShouldBe(expected);\n    }\n\n    public sealed class TrueColor\n    {\n        [Theory]\n        [InlineData(true, \"\\u001b[38;2;128;0;128mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[48;2;128;0;128mHello\\u001b[0m\")]\n        public void Should_Return_Correct_Code(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.TrueColor)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(128, 0, 128), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, \"\\u001b[38;5;5mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[48;5;5mHello\\u001b[0m\")]\n        public void Should_Return_Eight_Bit_Ansi_Code_For_Known_Colors(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.TrueColor)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(Color.Purple, foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n\n    public sealed class EightBit\n    {\n        [Theory]\n        [InlineData(true, \"\\u001b[38;5;3mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[48;5;3mHello\\u001b[0m\")]\n        public void Should_Return_Correct_Code_For_Known_Color(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.EightBit)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(Color.Olive, foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, \"\\u001b[38;5;3mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[48;5;3mHello\\u001b[0m\")]\n        public void Should_Map_TrueColor_To_Nearest_Eight_Bit_Color_If_Possible(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.EightBit)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(128, 128, 0), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, \"\\u001b[38;5;3mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[48;5;3mHello\\u001b[0m\")]\n        public void Should_Estimate_TrueColor_To_Nearest_Eight_Bit_Color(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.EightBit)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(126, 127, 0), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n\n    public sealed class Standard\n    {\n        [Theory]\n        [InlineData(true, \"\\u001b[33mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[43mHello\\u001b[0m\")]\n        public void Should_Return_Correct_Code_For_Known_Color(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(Color.Olive, foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, 128, 128, 128, \"\\u001b[90mHello\\u001b[0m\")]\n        [InlineData(false, 128, 128, 128, \"\\u001b[100mHello\\u001b[0m\")]\n        [InlineData(true, 0, 128, 0, \"\\u001b[32mHello\\u001b[0m\")]\n        [InlineData(false, 0, 128, 0, \"\\u001b[42mHello\\u001b[0m\")]\n        public void Should_Map_TrueColor_To_Nearest_Four_Bit_Color_If_Possible(\n            bool foreground,\n            byte r, byte g, byte b,\n            string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(r, g, b), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, 112, 120, 128, \"\\u001b[90mHello\\u001b[0m\")]\n        [InlineData(false, 112, 120, 128, \"\\u001b[100mHello\\u001b[0m\")]\n        [InlineData(true, 0, 120, 12, \"\\u001b[32mHello\\u001b[0m\")]\n        [InlineData(false, 0, 120, 12, \"\\u001b[42mHello\\u001b[0m\")]\n        public void Should_Estimate_TrueColor_To_Nearest_Four_Bit_Color(\n            bool foreground,\n            byte r, byte g, byte b,\n            string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(r, g, b), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n\n    public sealed class Legacy\n    {\n        [Theory]\n        [InlineData(true, \"\\u001b[33mHello\\u001b[0m\")]\n        [InlineData(false, \"\\u001b[43mHello\\u001b[0m\")]\n        public void Should_Return_Correct_Code_For_Known_Color(bool foreground, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Legacy)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(Color.Olive, foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, 128, 128, 128, \"\\u001b[37mHello\\u001b[0m\")]\n        [InlineData(false, 128, 128, 128, \"\\u001b[47mHello\\u001b[0m\")]\n        [InlineData(true, 0, 128, 0, \"\\u001b[32mHello\\u001b[0m\")]\n        [InlineData(false, 0, 128, 0, \"\\u001b[42mHello\\u001b[0m\")]\n        public void Should_Map_TrueColor_To_Nearest_Three_Bit_Color_If_Possible(\n            bool foreground,\n            byte r, byte g, byte b,\n            string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Legacy)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(r, g, b), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(true, 112, 120, 128, \"\\u001b[36mHello\\u001b[0m\")]\n        [InlineData(false, 112, 120, 128, \"\\u001b[46mHello\\u001b[0m\")]\n        [InlineData(true, 0, 120, 12, \"\\u001b[32mHello\\u001b[0m\")]\n        [InlineData(false, 0, 120, 12, \"\\u001b[42mHello\\u001b[0m\")]\n        public void Should_Estimate_TrueColor_To_Nearest_Three_Bit_Color(\n            bool foreground,\n            byte r, byte g, byte b,\n            string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Legacy)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\", new Style().SetColor(new Color(r, g, b), foreground));\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Cursor.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    public sealed class Cursor\n    {\n        public sealed class TheMoveMethod\n        {\n            [Theory]\n            [InlineData(CursorDirection.Up, \"Hello\u001b[2AWorld\")]\n            [InlineData(CursorDirection.Down, \"Hello\u001b[2BWorld\")]\n            [InlineData(CursorDirection.Right, \"Hello\u001b[2CWorld\")]\n            [InlineData(CursorDirection.Left, \"Hello\u001b[2DWorld\")]\n            public void Should_Return_Correct_Ansi_Code(CursorDirection direction, string expected)\n            {\n                // Given\n                var console = new TestConsole().EmitAnsiSequences();\n\n                // When\n                console.Write(\"Hello\");\n                console.Cursor.Move(direction, 2);\n                console.Write(\"World\");\n\n                // Then\n                console.Output.ShouldBe(expected);\n            }\n        }\n\n        public sealed class TheSetPositionMethod\n        {\n            [Fact]\n            public void Should_Return_Correct_Ansi_Code()\n            {\n                // Given\n                var console = new TestConsole().EmitAnsiSequences();\n\n                // When\n                console.Write(\"Hello\");\n                console.Cursor.SetPosition(5, 3);\n                console.Write(\"World\");\n\n                // Then\n                console.Output.ShouldBe(\"Hello\u001b[3;5HWorld\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Markup.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    public sealed class Markup\n    {\n        [Theory]\n        [InlineData(\"[yellow]Hello[/]\", \"\u001b[93mHello\u001b[0m\")]\n        [InlineData(\"[yellow]Hello [italic]World[/]![/]\", \"\u001b[93mHello \u001b[0m\u001b[3;93mWorld\u001b[0m\u001b[93m!\u001b[0m\")]\n        public void Should_Output_Expected_Ansi_For_Markup(string markup, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Markup(markup);\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Url_And_Text()\n        {\n            // Given\n            var console = new TestConsole()\n                .EmitAnsiSequences();\n\n            // When\n            console.Markup(\"[link=https://patriksvensson.se]Click to visit my blog[/]\");\n\n            // Then\n            console.Output.ShouldMatch(\"\u001b]8;id=[0-9]*;https:\\\\/\\\\/patriksvensson\\\\.se\u001b\\\\\\\\Click to visit my blog\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Only_Url()\n        {\n            // Given\n            var console = new TestConsole()\n                .EmitAnsiSequences();\n\n            // When\n            console.Markup(\"[link]https://patriksvensson.se[/]\");\n\n            // Then\n            console.Output.ShouldMatch(\"\u001b]8;id=[0-9]*;https:\\\\/\\\\/patriksvensson\\\\.se\u001b\\\\\\\\https:\\\\/\\\\/patriksvensson\\\\.se\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Bracket_In_Url_Only()\n        {\n            // Given\n            var console = new TestConsole()\n                .EmitAnsiSequences();\n\n            // When\n            const string Path = \"file://c:/temp/[x].txt\";\n            console.Markup($\"[link]{Path.EscapeMarkup()}[/]\");\n\n            // Then\n            console.Output.ShouldMatch(\"\u001b]8;id=[0-9]*;file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b\\\\\\\\file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Fact]\n        public void Should_Output_Expected_Ansi_For_Link_With_Bracket_In_Url()\n        {\n            // Given\n            var console = new TestConsole()\n                .EmitAnsiSequences();\n\n            // When\n            const string Path = \"file://c:/temp/[x].txt\";\n            console.Markup($\"[link={Path.EscapeMarkup()}]{Path.EscapeMarkup()}[/]\");\n\n            // Then\n            console.Output.ShouldMatch(\"\u001b]8;id=[0-9]*;file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b\\\\\\\\file:\\\\/\\\\/c:\\\\/temp\\\\/\\\\[x\\\\].txt\u001b]8;;\u001b\\\\\\\\\");\n        }\n\n        [Theory]\n        [InlineData(\"[yellow]Hello [[ World[/]\", \"\u001b[93mHello [ World\u001b[0m\")]\n        public void Should_Be_Able_To_Escape_Tags(string markup, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Markup(markup);\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(\"[yellow]Hello[\", \"Encountered malformed markup tag at position 14.\")]\n        [InlineData(\"[yellow]Hello[/\", \"Encountered malformed markup tag at position 15.\")]\n        [InlineData(\"[yellow]Hello[/foo\", \"Encountered malformed markup tag at position 15.\")]\n        [InlineData(\"[yellow Hello\", \"Encountered malformed markup tag at position 13.\")]\n        [InlineData(\"[yellow[green]]Hello\", \"Encountered malformed markup tag at position 7.\")]\n        public void Should_Throw_If_Encounters_Malformed_Tag(string markup, string expected)\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            var result = Record.Exception(() => console.Markup(markup));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Tags_Are_Unbalanced()\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            var result = Record.Exception(() => console.Markup(\"[yellow][blue]Hello[/]\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Unbalanced markup stack. Did you forget to close a tag?\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Encounters_Closing_Tag()\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            var result = Record.Exception(() => console.Markup(\"Hello[/]World\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Encountered closing tag when none was expected near position 5.\");\n        }\n\n        [Fact]\n        public void Should_Not_Get_Confused_When_Mixing_Escaped_And_Unescaped()\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            console.Markup(\"[grey][[grey]][/][white][[white]][/]\");\n\n            // Then\n            console.Output.ShouldBe(\"[grey][white]\");\n        }\n\n        [Theory]\n        [InlineData(\"[white][[[/][white]]][/]\", \"[]\")]\n        [InlineData(\"[white][[[/]\", \"[\")]\n        [InlineData(\"[white]]][/]\", \"]\")]\n        [InlineData(\"[black on white link=https://www.gooole.com/q=]]]Search for a bracket[/]\", \"Search for a bracket\")]\n        [InlineData(\"[link=https://www.gooole.com/q=]] black on white]Search for a bracket[/]\", \"Search for a bracket\")]\n        [InlineData(\"[link]https://www.gooole.com/q=]][/]\", \"https://www.gooole.com/q=]\")]\n        public void Should_Not_Fail_As_In_GH1024(string markup, string expected)\n        {\n            // Given\n            var console = new TestConsole();\n            console.EmitAnsiSequences = false;\n\n            // When\n            console.Markup(markup);\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.MarkupInterpolated.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    public sealed class MarkupInterpolated\n    {\n        [Fact]\n        public void Should_Print_Simple_Interpolated_Strings()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            const string Path = \"file://c:/temp/[x].txt\";\n            console.MarkupInterpolated($\"[Green]{Path}[/]\");\n\n            // Then\n            console.Output.ShouldBe($\"\u001b[32m{Path}\u001b[0m\");\n        }\n\n        [Fact]\n        public void Should_Not_Throw_Error_On_Links_Brackets()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            const string Path = \"file://c:/temp/[x].txt\";\n            console.MarkupInterpolated($\"[link={Path}]{Path}[/]\");\n\n            // Then\n            var pathAsRegEx = Regex.Replace(Path, \"([/\\\\[\\\\]\\\\\\\\])\", \"\\\\$1\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            console.Output.ShouldMatch($\"\u001b\\\\]8;id=[0-9]+;{pathAsRegEx}\u001b\\\\\\\\{pathAsRegEx}\u001b\\\\]8;;\u001b\\\\\\\\\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Prompt.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    public sealed class Confirm\n    {\n        [Theory]\n        [InlineData(true, true, true)]\n        [InlineData(false, true, true)]\n        [InlineData(true, false, false)]\n        [InlineData(false, false, false)]\n        public async Task Should_Return_Default_Value_If_Nothing_Is_Entered(bool async, bool defaultValue, bool expected)\n        {\n            // Given\n            var console = new TestConsole().EmitAnsiSequences();\n            console.Input.PushKey(ConsoleKey.Enter);\n\n            // When\n            bool result;\n            if (async)\n            {\n                result = await console.ConfirmAsync(\"Want some prompt?\", defaultValue);\n            }\n            else\n            {\n                result = console.Confirm(\"Want some prompt?\", defaultValue);\n            }\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class Ask\n    {\n        [Theory]\n        [InlineData(true)]\n        [InlineData(false)]\n        public async Task Should_Return_Correct_DateTime_When_Asked_PL_Culture(bool async)\n        {\n            // Given\n            var console = new TestConsole().EmitAnsiSequences();\n            console.Input.PushTextWithEnter(\"1/2/1998\");\n\n            // When\n            DateTime dateTime;\n            if (async)\n            {\n                dateTime = await console.AskAsync<DateTime>(string.Empty, CultureInfo.GetCultureInfo(\"pl-PL\"));\n            }\n            else\n            {\n                dateTime = console.Ask<DateTime>(string.Empty, CultureInfo.GetCultureInfo(\"pl-PL\"));\n            }\n\n            // Then\n            dateTime.ShouldBe(new DateTime(1998, 2, 1));\n        }\n\n        [Theory]\n        [InlineData(true)]\n        [InlineData(false)]\n        public async Task Should_Return_Correct_DateTime_When_Asked_US_Culture(bool async)\n        {\n            // Given\n            var console = new TestConsole().EmitAnsiSequences();\n            console.Input.PushTextWithEnter(\"2/1/1998\");\n\n            // When\n            DateTime dateTime;\n            if (async)\n            {\n                dateTime = await console.AskAsync<DateTime>(string.Empty, CultureInfo.GetCultureInfo(\"en-US\"));\n            }\n            else\n            {\n                dateTime = console.Ask<DateTime>(string.Empty, CultureInfo.GetCultureInfo(\"en-US\"));\n            }\n\n            // Then\n            dateTime.ShouldBe(new DateTime(1998, 2, 1));\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.Style.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    [Theory]\n    [InlineData(Decoration.Bold, \"\\u001b[1mHello World\u001b[0m\")]\n    [InlineData(Decoration.Dim, \"\\u001b[2mHello World\u001b[0m\")]\n    [InlineData(Decoration.Italic, \"\\u001b[3mHello World\u001b[0m\")]\n    [InlineData(Decoration.Underline, \"\\u001b[4mHello World\u001b[0m\")]\n    [InlineData(Decoration.Invert, \"\\u001b[7mHello World\u001b[0m\")]\n    [InlineData(Decoration.Conceal, \"\\u001b[8mHello World\u001b[0m\")]\n    [InlineData(Decoration.SlowBlink, \"\\u001b[5mHello World\u001b[0m\")]\n    [InlineData(Decoration.RapidBlink, \"\\u001b[6mHello World\u001b[0m\")]\n    [InlineData(Decoration.Strikethrough, \"\\u001b[9mHello World\u001b[0m\")]\n    public void Should_Write_Decorated_Text_Correctly(Decoration decoration, string expected)\n    {\n        // Given\n        var console = new TestConsole()\n            .EmitAnsiSequences();\n\n        // When\n        console.Write(\"Hello World\", new Style().Decoration(decoration));\n\n        // Then\n        console.Output.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(Decoration.Bold | Decoration.Underline, \"\\u001b[1;4mHello World\u001b[0m\")]\n    [InlineData(Decoration.Bold | Decoration.Underline | Decoration.Conceal, \"\\u001b[1;4;8mHello World\u001b[0m\")]\n    public void Should_Write_Text_With_Multiple_Decorations_Correctly(Decoration decoration, string expected)\n    {\n        // Given\n        var console = new TestConsole()\n            .EmitAnsiSequences();\n\n        // When\n        console.Write(\"Hello World\", new Style().Decoration(decoration));\n\n        // Then\n        console.Output.ShouldBe(expected);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic partial class AnsiConsoleTests\n{\n    public sealed class Clear\n    {\n        [Theory]\n        [InlineData(false, \"Hello\u001b[2J\u001b[3JWorld\")]\n        [InlineData(true, \"Hello\u001b[2J\u001b[3J\u001b[1;1HWorld\")]\n        public void Should_Clear_Screen(bool home, string expected)\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\"Hello\");\n            console.Clear(home);\n            console.Write(\"World\");\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n\n    public sealed class Write\n    {\n        [Fact]\n        public void Should_Combine_Decoration_And_Colors()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\n                \"Hello\",\n                new Style()\n                    .Foreground(Color.RoyalBlue1)\n                    .Background(Color.NavajoWhite1)\n                    .Decoration(Decoration.Italic));\n\n            // Then\n            console.Output.ShouldBe(\"\\u001b[3;90;47mHello\\u001b[0m\");\n        }\n\n        [Fact]\n        public void Should_Not_Include_Foreground_If_Set_To_Default_Color()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\n                \"Hello\",\n                new Style()\n                    .Foreground(Color.Default)\n                    .Background(Color.NavajoWhite1)\n                    .Decoration(Decoration.Italic));\n\n            // Then\n            console.Output.ShouldBe(\"\\u001b[3;47mHello\\u001b[0m\");\n        }\n\n        [Fact]\n        public void Should_Not_Include_Background_If_Set_To_Default_Color()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\n                \"Hello\",\n                new Style()\n                    .Foreground(Color.RoyalBlue1)\n                    .Background(Color.Default)\n                    .Decoration(Decoration.Italic));\n\n            // Then\n            console.Output.ShouldBe(\"\\u001b[3;90mHello\\u001b[0m\");\n        }\n\n        [Fact]\n        public void Should_Not_Include_Decoration_If_Set_To_None()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.Write(\n                \"Hello\",\n                new Style()\n                    .Foreground(Color.RoyalBlue1)\n                    .Background(Color.NavajoWhite1)\n                    .Decoration(Decoration.None));\n\n            // Then\n            console.Output.ShouldBe(\"\\u001b[90;47mHello\\u001b[0m\");\n        }\n    }\n\n    public sealed class WriteLine\n    {\n        [Fact]\n        public void Should_Reset_Colors_Correctly_After_Line_Break()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.WriteLine(\"Hello\", new Style().Background(ConsoleColor.Red));\n            console.WriteLine(\"World\", new Style().Background(ConsoleColor.Green));\n\n            // Then\n            console.Output.NormalizeLineEndings()\n                .ShouldBe(\"\u001b[101mHello\u001b[0m\\n\u001b[102mWorld\u001b[0m\\n\");\n        }\n\n        [Fact]\n        public void Should_Reset_Colors_Correctly_After_Line_Break_In_Text()\n        {\n            // Given\n            var console = new TestConsole()\n                .Colors(ColorSystem.Standard)\n                .EmitAnsiSequences();\n\n            // When\n            console.WriteLine(\"Hello\\nWorld\", new Style().Background(ConsoleColor.Red));\n\n            // Then\n            console.Output.NormalizeLineEndings()\n                .ShouldBe(\"\u001b[101mHello\u001b[0m\\n\u001b[101mWorld\u001b[0m\\n\");\n        }\n    }\n\n    public sealed class WriteException\n    {\n        [Fact]\n        public void Should_Not_Throw_If_Exception_Has_No_StackTrace()\n        {\n            // Given\n            var console = new TestConsole();\n            var exception = new InvalidOperationException(\"An exception.\");\n\n            // When\n            void When() => console.WriteException(exception);\n\n            // Then\n            Should.NotThrow(When);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/AnsiDetectorTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class AnsiDetectorTests\n{\n    [Fact]\n    public void Should_Not_Support_Ansi_When_Output_Is_Redirected()\n    {\n        var result = AnsiDetector.Detect(\n            global::System.Console.Out,\n            AnsiSupport.Detect,\n            isOutputRedirected: true,\n            isErrorRedirected: false);\n\n        result.Ansi.ShouldBeFalse();\n        result.Legacy.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Not_Support_Ansi_When_Error_Is_Redirected()\n    {\n        var result = AnsiDetector.Detect(\n            global::System.Console.Error,\n            AnsiSupport.Detect,\n            isOutputRedirected: false,\n            isErrorRedirected: true);\n\n        result.Ansi.ShouldBeFalse();\n        result.Legacy.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Support_Ansi_When_Explicitly_Enabled_Even_If_Output_Is_Redirected()\n    {\n        var result = AnsiDetector.Detect(\n            global::System.Console.Out,\n            AnsiSupport.Yes,\n            isOutputRedirected: true,\n            isErrorRedirected: false);\n\n        result.Ansi.ShouldBeTrue();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/BackwardsCompatibilityTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n/// <summary>\n/// Tests to ensure backwards compatibility with legacy generated code.\n/// All names that existed in the legacy generated files must continue to exist with the same values.\n/// </summary>\npublic class BackwardsCompatibilityTests\n{\n    [Fact]\n    public void Color_Should_Have_All_Legacy_Properties_With_Same_Values()\n    {\n        // Get legacy Color static properties (excluding non-color properties like R, G, B)\n        var legacyColorProps = typeof(Legacy.Color)\n            .GetProperties(BindingFlags.Public | BindingFlags.Static)\n            .Where(p => p.PropertyType == typeof(Legacy.Color))\n            .ToList();\n\n        // Get current Color static properties as dictionary for lookup\n        var currentColorProps = typeof(Color)\n            .GetProperties(BindingFlags.Public | BindingFlags.Static)\n            .Where(p => p.PropertyType == typeof(Color))\n            .ToDictionary(p => p.Name);\n\n        var missing = new List<string>();\n        var valueMismatches = new List<string>();\n\n        foreach (var legacyProp in legacyColorProps)\n        {\n            if (!currentColorProps.TryGetValue(legacyProp.Name, out var currentProp))\n            {\n                missing.Add(legacyProp.Name);\n                continue;\n            }\n\n            // Compare RGB values\n            var legacyColor = (Legacy.Color)legacyProp.GetValue(null)!;\n            var currentColor = (Color)currentProp.GetValue(null)!;\n\n            if (legacyColor.R != currentColor.R ||\n                legacyColor.G != currentColor.G ||\n                legacyColor.B != currentColor.B)\n            {\n                valueMismatches.Add($\"{legacyProp.Name}: legacy=({legacyColor.R},{legacyColor.G},{legacyColor.B}) current=({currentColor.R},{currentColor.G},{currentColor.B})\");\n            }\n        }\n\n        missing.ShouldBeEmpty($\"Missing colors: {string.Join(\", \", missing)}\");\n        valueMismatches.ShouldBeEmpty($\"Color value mismatches:\\n{string.Join(\"\\n\", valueMismatches)}\");\n    }\n\n    [Fact]\n    public void Spinner_Known_Should_Have_All_Legacy_Properties_With_Same_Values()\n    {\n        // Get legacy Spinner.Known static properties\n        var legacySpinnerProps = typeof(Legacy.Spinner.Known)\n            .GetProperties(BindingFlags.Public | BindingFlags.Static)\n            .ToList();\n\n        // Get current Spinner.Known static properties as dictionary for lookup\n        var currentSpinnerProps = typeof(Spinner.Known)\n            .GetProperties(BindingFlags.Public | BindingFlags.Static)\n            .ToDictionary(p => p.Name);\n\n        var missing = new List<string>();\n        var valueMismatches = new List<string>();\n\n        foreach (var legacyProp in legacySpinnerProps)\n        {\n            if (!currentSpinnerProps.TryGetValue(legacyProp.Name, out var currentProp))\n            {\n                missing.Add(legacyProp.Name);\n                continue;\n            }\n\n            // Compare Interval values\n            var legacySpinner = (Legacy.Spinner)legacyProp.GetValue(null)!;\n            var currentSpinner = (Spinner)currentProp.GetValue(null)!;\n\n            if (legacySpinner.Interval != currentSpinner.Interval || legacySpinner.Frames.Count != currentSpinner.Frames.Count || legacySpinner.Frames[0] != currentSpinner.Frames[0])\n            {\n                valueMismatches.Add($\"{legacyProp.Name}: legacy interval={legacySpinner.Interval} current interval={currentSpinner.Interval}, legacy frames count={legacySpinner.Frames.Count} current frames count={currentSpinner.Frames.Count}, legacy first frame={legacySpinner.Frames[0]} current first frame={currentSpinner.Frames[0]}\");\n            }\n        }\n\n        missing.ShouldBeEmpty($\"Missing spinners: {string.Join(\", \", missing)}\");\n        valueMismatches.ShouldBeEmpty($\"Spinner value mismatches:\\n{string.Join(\"\\n\", valueMismatches)}\");\n    }\n\n    [Fact]\n    public void Emoji_Known_Should_Have_All_Legacy_Fields_With_Same_Values()\n    {\n        // Get legacy Emoji.Known const fields\n        var legacyEmojiFields = typeof(Legacy.Emoji.Known)\n            .GetFields(BindingFlags.Public | BindingFlags.Static)\n            .Where(f => f.IsLiteral) // const fields only\n            .ToList();\n\n        // Get current Emoji.Known const fields as dictionary for lookup\n        var currentEmojiFields = typeof(Emoji.Known)\n            .GetFields(BindingFlags.Public | BindingFlags.Static)\n            .Where(f => f.IsLiteral) // const fields only\n            .ToDictionary(f => f.Name);\n\n        var missing = new List<string>();\n        var valueMismatches = new List<string>();\n\n        foreach (var legacyField in legacyEmojiFields)\n        {\n            if (!currentEmojiFields.TryGetValue(legacyField.Name, out var currentField))\n            {\n                missing.Add(legacyField.Name);\n                continue;\n            }\n\n            // Compare const string values\n            var legacyValue = (string)legacyField.GetRawConstantValue()!;\n            var currentValue = (string)currentField.GetRawConstantValue()!;\n\n            if (legacyValue != currentValue)\n            {\n                valueMismatches.Add($\"{legacyField.Name}: legacy=\\\"{legacyValue}\\\" current=\\\"{currentValue}\\\"\");\n            }\n        }\n\n        missing.ShouldBeEmpty($\"Missing emojis: {string.Join(\", \", missing)}\");\n        valueMismatches.ShouldBeEmpty($\"Emoji value mismatches:\\n{string.Join(\"\\n\", valueMismatches)}\");\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/EmojiTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class EmojiTests\n{\n    [Fact]\n    public void Should_Substitute_Emoji_Shortcodes_In_Markdown()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Markup(\"Hello :globe_showing_europe_africa:!\");\n\n        // Then\n        console.Output.ShouldBe(\"Hello 🌍!\");\n    }\n\n    [Fact]\n    public void Should_Contain_Predefined_Emojis()\n    {\n        // Given, When\n        const string result = \"Hello \" + Emoji.Known.GlobeShowingEuropeAfrica + \"!\";\n\n        // Then\n        result.ShouldBe(\"Hello 🌍!\");\n    }\n\n    public sealed class TheReplaceMethod\n    {\n        [Fact]\n        public void Should_Replace_Emojis_In_Text()\n        {\n            // Given, When\n            var result = Emoji.Replace(\"Hello :globe_showing_europe_africa:!\");\n\n            // Then\n            result.ShouldBe(\"Hello 🌍!\");\n        }\n    }\n\n    public sealed class Parsing\n    {\n        [Theory]\n        [InlineData(\":\", \":\")]\n        [InlineData(\"::\", \"::\")]\n        [InlineData(\":::\", \":::\")]\n        [InlineData(\"::::\", \"::::\")]\n        [InlineData(\"::i:\", \"::i:\")]\n        [InlineData(\":i:i:\", \":i:i:\")]\n        [InlineData(\"::globe_showing_europe_africa::\", \":🌍:\")]\n        [InlineData(\":globe_showing_europe_africa::globe_showing_europe_africa:\", \"🌍🌍\")]\n        [InlineData(\"::globe_showing_europe_africa:::test:::globe_showing_europe_africa:::\", \":🌍::test::🌍::\")]\n        public void Can_Handle_Different_Combinations(string markup, string expected)\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            console.Markup(markup);\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n\n        [Fact]\n        public void Should_Leave_Single_Colons()\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            console.Markup(\"Hello :globe_showing_europe_africa:! Output: good\");\n\n            // Then\n            console.Output.ShouldBe(\"Hello 🌍! Output: good\");\n        }\n\n        [Fact]\n        public void Unknown_emojis_should_remain_unchanged()\n        {\n            // Given\n            var console = new TestConsole();\n\n            // When\n            console.Markup(\"Hello :globe_showing_flat_earth:!\");\n\n            // Then\n            console.Output.ShouldBe(\"Hello :globe_showing_flat_earth:!\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/ExceptionTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Exception\")]\npublic sealed class ExceptionTests\n{\n    [Fact]\n    [Expectation(\"Default\")]\n    public Task Should_Write_Exception()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.MethodThatThrows(null));\n\n        // When\n        var result = console.WriteNormalizedException(dex);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"ShortenedTypes\")]\n    public Task Should_Write_Exception_With_Shortened_Types()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.MethodThatThrows(null));\n\n        // When\n        var result = console.WriteNormalizedException(dex, ExceptionFormats.ShortenTypes);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"ShortenedMethods\")]\n    public Task Should_Write_Exception_With_Shortened_Methods()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.MethodThatThrows(null));\n\n        // When\n        var result = console.WriteNormalizedException(dex, ExceptionFormats.ShortenMethods);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"InnerException\")]\n    public Task Should_Write_Exception_With_Inner_Exception()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.ThrowWithInnerException());\n\n        // When\n        var result = console.WriteNormalizedException(dex);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"CallSite\")]\n    public Task Should_Write_Exceptions_With_Generic_Type_Parameters_In_Callsite_As_Expected()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.ThrowWithGenericInnerException());\n\n        // When\n        var result = console.WriteNormalizedException(dex);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"OutParam\")]\n    public Task Should_Write_Exception_With_Output_Param()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.GenericMethodWithOutThatThrows<int>(out _));\n\n        // When\n        var result = console.WriteNormalizedException(dex, ExceptionFormats.ShortenTypes);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"Tuple\")]\n    public Task Should_Write_Exception_With_Tuple_Return()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.GetTuplesWithInnerException<int>((0, \"value\")));\n\n        // When\n        var result = console.WriteNormalizedException(dex, ExceptionFormats.ShortenTypes);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"NoStackTrace\")]\n    public Task Should_Write_Exception_With_No_StackTrace()\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(TestExceptions.ThrowWithInnerException);\n\n        // When\n        var result = console.WriteNormalizedException(dex, ExceptionFormats.NoStackTrace);\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Theory]\n    [InlineData(ExceptionFormats.Default)]\n    [InlineData(ExceptionFormats.ShortenTypes)]\n    [InlineData(ExceptionFormats.ShortenMethods)]\n    [InlineData(ExceptionFormats.ShortenEverything)]\n    [Expectation(\"GenericException\")]\n    public Task Should_Write_GenericException(ExceptionFormats exceptionFormats)\n    {\n        // Given\n        var console = new TestConsole().Width(1024);\n        var dex = GetException(() => TestExceptions.MethodThatThrowsGenericException<IAnsiConsole>());\n\n        // When\n        var result = console.WriteNormalizedException(dex, exceptionFormats);\n\n        // Then\n        return Verifier.Verify(result).UseParameters(exceptionFormats);\n    }\n\n    public static Exception GetException(Action action)\n    {\n        try\n        {\n            action?.Invoke();\n        }\n        catch (Exception e)\n        {\n            return e;\n        }\n\n        throw new InvalidOperationException(\"Exception harness failed\");\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/InteractionDetectorTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class InteractionDetectorTests\n{\n    [Fact]\n    public void Should_Not_Be_Interactive_When_Output_Is_Redirected()\n    {\n        var result = InteractionDetector.IsInteractive(\n            InteractionSupport.Detect,\n            isInputRedirected: false,\n            isOutputRedirected: true,\n            isErrorRedirected: false);\n\n        result.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Not_Be_Interactive_When_Error_Is_Redirected()\n    {\n        var result = InteractionDetector.IsInteractive(\n            InteractionSupport.Detect,\n            isInputRedirected: false,\n            isOutputRedirected: false,\n            isErrorRedirected: true);\n\n        result.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Be_Interactive_When_Nothing_Is_Redirected()\n    {\n        var result = InteractionDetector.IsInteractive(\n            InteractionSupport.Detect,\n            isInputRedirected: false,\n            isOutputRedirected: false,\n            isErrorRedirected: false);\n\n        result.ShouldBeTrue();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Internal/FileSizeTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit.Internal;\n\npublic sealed class FileSizeTests\n{\n    [Theory]\n    [InlineData(0, \"0 bytes\")]\n    [InlineData(37, \"37 bytes\")]\n    [InlineData(512, \"512 bytes\")]\n    [InlineData(15 * 1024, \"15.0 KiB\")]\n    [InlineData(1024 * 512, \"512.0 KiB\")]\n    [InlineData(5 * 1024 * 1024, \"5.0 MiB\")]\n    [InlineData(9 * 1024 * 1024, \"9.0 MiB\")]\n    public void Binary_Unit_In_Bytes_Should_Return_Expected(double bytes, string expected)\n    {\n        // Given\n        var filesize = new FileSize(bytes, FileSizeBase.Binary);\n\n        // When\n        var result = filesize.ToString();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(0, \"0 bits\")]\n    [InlineData(37, \"296 bits\")]\n    [InlineData(512, \"4.0 Kibit\")]\n    [InlineData(15 * 1024, \"120.0 Kibit\")]\n    [InlineData(1024 * 512, \"4.0 Mibit\")]\n    [InlineData(5 * 1024 * 1024, \"40.0 Mibit\")]\n    [InlineData(210 * 1024 * 1024, \"1.6 Gibit\")]\n    [InlineData(900 * 1024 * 1024, \"7.0 Gibit\")]\n    public void Binary_Unit_In_Bits_Should_Return_Expected(double bytes, string expected)\n    {\n        // Given\n        var filesize = new FileSize(bytes, FileSizeBase.Binary, showBits: true);\n\n        // When\n        var result = filesize.ToString();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(0, \"0 bytes\")]\n    [InlineData(37, \"37 bytes\")]\n    [InlineData(512, \"512 bytes\")]\n    [InlineData(15 * 1024, \"15.4 KB\")]\n    [InlineData(1024 * 512, \"524.3 KB\")]\n    [InlineData(5 * 1024 * 1024, \"5.2 MB\")]\n    [InlineData(9 * 1024 * 1024, \"9.4 MB\")]\n    public void Decimal_Unit_In_Bytes_Should_Return_Expected(double bytes, string expected)\n    {\n        // Given\n        var filesize = new FileSize(bytes, FileSizeBase.Decimal);\n\n        // When\n        var result = filesize.ToString();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(0, \"0 bits\")]\n    [InlineData(37, \"296 bits\")]\n    [InlineData(512, \"4.1 Kbit\")]\n    [InlineData(15 * 1024, \"122.9 Kbit\")]\n    [InlineData(1024 * 512, \"4.2 Mbit\")]\n    [InlineData(5 * 1024 * 1024, \"41.9 Mbit\")]\n    [InlineData(900 * 1024 * 1024, \"7.5 Gbit\")]\n    public void Decimal_Unit_In_Bits_Should_Return_Expected(double bytes, string expected)\n    {\n        // Given\n        var filesize = new FileSize(bytes, FileSizeBase.Decimal, showBits: true);\n\n        // When\n        var result = filesize.ToString();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Internal/WhiteSpaceSegmentEnumeratorTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit.Internal;\n\npublic class WhiteSpaceSegmentEnumeratorTests\n{\n    public class TheoryData : TheoryData<string, string[]>\n    {\n        public TheoryData()\n        {\n            Add(\"\", []);\n            Add(\" \", [\" \"]);\n            Add(\"a\", [\"a\"]);\n            Add(\"a \", [\"a\", \" \"]);\n            Add(\"a  \", [\"a\", \"  \"]);\n            Add(\" a  \", [\" \", \"a\", \"  \"]);\n            Add(\"a \\n\", [\"a\", \" \\n\"]);\n            Add(\"a \\nb\", [\"a\", \" \\n\", \"b\"]);\n        }\n    }\n\n    public static readonly TheoryData Data = new();\n\n    [Theory]\n    [MemberData(nameof(Data))]\n    public void Should_Produce_Expected_Segments(string input, string[] expected)\n    {\n        var splitWords = input.SplitWords();\n        var segmenter = new WhiteSpaceSegmentEnumerator(input);\n\n        splitWords.ShouldBeEquivalentTo(expected);\n        var index = 0;\n        foreach (var segment in segmenter)\n        {\n            segment.ToString().ShouldBeEquivalentTo(expected[index++]);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Live/Progress/DownloadedColumnTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class DownloadedColumnTests\n{\n    [Theory]\n    [InlineData(0, 1, \"0/1 byte\")]\n    [InlineData(37, 101, \"37/101 bytes\")]\n    [InlineData(101, 101, \"101 bytes\")]\n    [InlineData(512, 1024, \"0.5/1.0 KiB\")]\n    [InlineData(1024, 1024, \"1.0 KiB\")]\n    [InlineData(1024 * 512, 5 * 1024 * 1024, \"0.5/5.0 MiB\")]\n    [InlineData(5 * 1024 * 1024, 5 * 1024 * 1024, \"5.0 MiB\")]\n    public void Binary_Unit_In_Bytes_Should_Return_Expected(double value, double total, string expected)\n    {\n        // Given\n        var fixture = new ProgressColumnFixture<DownloadedColumn>(value, total);\n        fixture.Column.Culture = CultureInfo.InvariantCulture;\n        fixture.Column.Base = FileSizeBase.Binary;\n        fixture.Column.ShowBits = false;\n\n        // When\n        var result = fixture.Render();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(512, 1024, \"4.0/8.0 Kibit\")]\n    [InlineData(1024, 1024, \"8.0 Kibit\")]\n    public void Binary_Unit_In_Bits_Should_Return_Expected(double value, double total, string expected)\n    {\n        // Given\n        var fixture = new ProgressColumnFixture<DownloadedColumn>(value, total);\n        fixture.Column.Culture = CultureInfo.InvariantCulture;\n        fixture.Column.Base = FileSizeBase.Binary;\n        fixture.Column.ShowBits = true;\n\n        // When\n        var result = fixture.Render();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(500, 1000, \"0.5/1.0 KB\")]\n    [InlineData(1000, 1000, \"1.0 KB\")]\n    public void Decimal_Unit_In_Bytes_Should_Return_Expected(double value, double total, string expected)\n    {\n        // Given\n        var fixture = new ProgressColumnFixture<DownloadedColumn>(value, total);\n        fixture.Column.Culture = CultureInfo.InvariantCulture;\n        fixture.Column.Base = FileSizeBase.Decimal;\n        fixture.Column.ShowBits = false;\n\n        // When\n        var result = fixture.Render();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(500, 1000, \"4.0/8.0 Kbit\")]\n    [InlineData(1000, 1000, \"8.0 Kbit\")]\n    public void Decimal_Unit_In_Bits_Should_Return_Expected(double value, double total, string expected)\n    {\n        // Given\n        var fixture = new ProgressColumnFixture<DownloadedColumn>(value, total);\n        fixture.Column.Culture = CultureInfo.InvariantCulture;\n        fixture.Column.Base = FileSizeBase.Decimal;\n        fixture.Column.ShowBits = true;\n\n        // When\n        var result = fixture.Render();\n\n        // Then\n        result.ShouldBe(expected);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Live/Progress/ProgressColumnFixture.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class ProgressColumnFixture<T>\n    where T : ProgressColumn, new()\n{\n    public T Column { get; }\n    public ProgressTask Task { get; set; }\n\n    public ProgressColumnFixture(double completed, double total)\n    {\n        Column = new T();\n        Task = new ProgressTask(1, \"Foo\", total);\n        Task.Increment(completed);\n    }\n\n    public string Render()\n    {\n        var console = new TestConsole();\n        var context = RenderOptions.Create(console, console.Profile.Capabilities);\n        console.Write(Column.Render(context, Task, TimeSpan.Zero));\n        return console.Output;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Live/Progress/ProgressTaskTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class ProgressTaskTests\n{\n    [Fact]\n    public void StartTime_Is_Set_From_TimeProvider_When_AutoStart_Is_True()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var expectedStartTime = timeProvider.GetLocalNow().LocalDateTime;\n\n        // When\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: true, timeProvider);\n\n        // Then\n        task.StartTime.ShouldBe(expectedStartTime);\n    }\n\n    [Fact]\n    public void StartTime_Is_Null_When_AutoStart_Is_False()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n\n        // When\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: false, timeProvider);\n\n        // Then\n        task.StartTime.ShouldBeNull();\n    }\n\n    [Fact]\n    public void StartTask_Uses_TimeProvider()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: false, timeProvider);\n        var expectedStartTime = timeProvider.GetLocalNow().LocalDateTime;\n\n        // When\n        task.StartTask();\n\n        // Then\n        task.StartTime.ShouldBe(expectedStartTime);\n    }\n\n    [Fact]\n    public void StopTask_Uses_TimeProvider()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: true, timeProvider);\n        timeProvider.Advance(TimeSpan.FromSeconds(30));\n        var expectedStopTime = timeProvider.GetLocalNow().LocalDateTime;\n\n        // When\n        task.StopTask();\n\n        // Then\n        task.StopTime.ShouldBe(expectedStopTime);\n    }\n\n    [Fact]\n    public void ElapsedTime_Uses_TimeProvider()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: true, timeProvider);\n\n        // When\n        timeProvider.Advance(TimeSpan.FromSeconds(42));\n\n        // Then\n        task.ElapsedTime.ShouldBe(TimeSpan.FromSeconds(42));\n    }\n\n    [Fact]\n    public void ElapsedTime_Is_Fixed_After_StopTask()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: true, timeProvider);\n        timeProvider.Advance(TimeSpan.FromSeconds(10));\n        task.StopTask();\n\n        // When\n        timeProvider.Advance(TimeSpan.FromSeconds(100));\n\n        // Then\n        task.ElapsedTime.ShouldBe(TimeSpan.FromSeconds(10));\n    }\n\n    [Fact]\n    public void Speed_Uses_TimeProvider()\n    {\n        // Given\n        var timeProvider = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var task = new ProgressTask(1, \"Foo\", 100, autoStart: true, timeProvider);\n\n        // When\n        task.Increment(25);\n        timeProvider.Advance(TimeSpan.FromSeconds(5));\n        task.Increment(25);\n\n        // Then\n        task.Speed.ShouldNotBeNull();\n        task.Speed!.Value.ShouldBe(10.0, tolerance: 0.001);\n    }\n}\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Live/Progress\")]\npublic sealed class ProgressTests\n{\n    [Fact]\n    public void Should_Render_Task_Correctly()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(true);\n\n        // When\n        progress.Start(ctx => ctx.AddTask(\"foo\"));\n\n        // Then\n        console.Output\n            .NormalizeLineEndings()\n            .ShouldBe(\n                \"\u001b[?25l\" + // Hide cursor\n                \"          \\n\" + // Top padding\n                \"\u001b[38;5;8m━━━━━━━━━━\u001b[0m\\n\" + // Task\n                \"          \" + // Bottom padding\n                \"\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[?25h\"); // Clear + show cursor\n    }\n\n    [Fact]\n    public void Should_Not_Auto_Clear_If_Specified()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx => ctx.AddTask(\"foo\"));\n\n        // Then\n        console.Output\n            .NormalizeLineEndings()\n            .ShouldBe(\n                \"\u001b[?25l\" + // Hide cursor\n                \"          \\n\" + // Top padding\n                \"\u001b[38;5;8m━━━━━━━━━━\u001b[0m\\n\" + // Task\n                \"          \\n\" + // Bottom padding\n                \"\u001b[?25h\"); // show cursor\n    }\n\n    [Fact]\n    [Expectation(\"Render_ReduceWidth\")]\n    public Task Should_Reduce_Width_If_Needed()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(20)\n            .Interactive();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn(), new RemainingTimeColumn(), new SpinnerColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            ctx.AddTask(\"foo\");\n            ctx.AddTask(\"bar\");\n            ctx.AddTask(\"baz\");\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    public void Setting_Max_Value_Should_Set_The_MaxValue_And_Cap_Value()\n    {\n        // Given\n        var console = new TestConsole()\n            .Interactive();\n\n        var task = default(ProgressTask);\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Increment(100);\n            task.MaxValue = 20;\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.MaxValue.ShouldBe(20);\n        task.Value.ShouldBe(20);\n    }\n\n    [Fact]\n    public void Setting_Max_Value_To_Zero_Should_Make_Percentage_OneHundred()\n    {\n        // Given\n        var console = new TestConsole()\n            .Interactive();\n\n        var task = default(ProgressTask);\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.MaxValue = 0;\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.Value.ShouldBe(0);\n        task.Percentage.ShouldBe(100);\n    }\n\n    [Fact]\n    public void Setting_Value_Should_Override_Incremented_Value()\n    {\n        // Given\n        var console = new TestConsole()\n            .Interactive();\n\n        var task = default(ProgressTask);\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Increment(50);\n            task.Value = 20;\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.MaxValue.ShouldBe(100);\n        task.Value.ShouldBe(20);\n    }\n\n    [Fact]\n    public void Setting_Value_To_MaxValue_Should_Finish_Task()\n    {\n        // Given\n        var console = new TestConsole()\n            .Interactive();\n\n        var task = default(ProgressTask);\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Value = task.MaxValue;\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.IsFinished.ShouldBe(true);\n    }\n\n    [Fact]\n    public void Should_Increment_Manually_Set_Value()\n    {\n        // Given\n        var console = new TestConsole()\n            .Interactive();\n\n        var task = default(ProgressTask);\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Value = 50;\n            task.Increment(10);\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.Value.ShouldBe(60);\n    }\n\n    [Fact]\n    public void Should_Hide_Completed_Tasks()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var taskFinished = default(ProgressTask);\n        var taskInProgress1 = default(ProgressTask);\n        var taskInProgress2 = default(ProgressTask);\n\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false)\n            .HideCompleted(true);\n\n        // When\n        progress.Start(ctx =>\n        {\n            taskInProgress1 = ctx.AddTask(\"foo\");\n            taskFinished = ctx.AddTask(\"bar\");\n            taskInProgress2 = ctx.AddTask(\"baz\");\n            taskInProgress2.Increment(20);\n            taskFinished.Value = taskFinished.MaxValue;\n        });\n\n        // Then\n        console.Output\n            .NormalizeLineEndings()\n            .ShouldBe(\n                \"\u001b[?25l\" + // Hide cursor\n                \"          \\n\" + // top padding\n                \"\u001b[38;5;8m━━━━━━━━━━\u001b[0m\\n\" + // taskInProgress1\n                \"\u001b[38;5;11m━━\u001b[0m\u001b[38;5;8m━━━━━━━━\u001b[0m\\n\" + // taskInProgress2\n                \"          \\n\" + // bottom padding\n                \"\u001b[?25h\"); // show cursor\n    }\n\n    [Fact]\n    public void Should_Report_Max_Remaining_Time_For_Extremely_Small_Progress()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var task = default(ProgressTask);\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new RemainingTimeColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Increment(double.Epsilon);\n\n            // Make sure that at least one millisecond has elapsed between the increments else the RemainingTime is null\n            // when the last timestamp is equal to the first timestamp of the samples.\n            time.Advance(TimeSpan.FromMilliseconds(1));\n\n            task.Increment(double.Epsilon);\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.RemainingTime.ShouldBe(TimeSpan.MaxValue);\n    }\n\n    [Fact]\n    public void Should_Render_Tasks_Added_Before_And_After_Correctly()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn())\n            .AutoRefresh(false)\n            .AutoClear(true);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var foo1 = ctx.AddTask(\"foo1\");\n            var foo2 = ctx.AddTask(\"foo2\");\n            var foo3 = ctx.AddTask(\"foo3\");\n\n            var afterFoo1 = ctx.AddTaskAfter(\"afterFoo1\", foo1);\n            var beforeFoo3 = ctx.AddTaskBefore(\"beforeFoo3\", foo3);\n        });\n\n        // Then\n        console.Output.SplitLines().Select(x => x.Trim()).ToArray()\n            .ShouldBeEquivalentTo(new[]\n            {\n                \"\u001b[?25l\", \"foo1\", \"afterFoo1\", \"foo2\", \"beforeFoo3\", \"foo3\",\n                \"\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[?25h\",\n            });\n    }\n\n    [Fact]\n    public void Should_Render_Tasks_At_Specified_Indexes_Correctly()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn())\n            .AutoRefresh(false)\n            .AutoClear(true);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var foo1 = ctx.AddTask(\"foo1\");\n            var foo2 = ctx.AddTask(\"foo2\");\n            var foo3 = ctx.AddTask(\"foo3\");\n\n            var afterFoo1 = ctx.AddTaskAt(\"afterFoo1\", 1);\n            var beforeFoo3 = ctx.AddTaskAt(\"beforeFoo3\", 3);\n        });\n\n        // Then\n        console.Output.SplitLines().Select(x => x.Trim()).ToArray()\n            .ShouldBeEquivalentTo(new[]\n            {\n                \"\u001b[?25l\", \"foo1\", \"afterFoo1\", \"foo2\", \"beforeFoo3\", \"foo3\",\n                \"\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[?25h\",\n            });\n    }\n\n    [Fact]\n    public void Should_Store_And_Retrieve_Task_Tag()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        var task = default(ProgressTask);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Tag = \"my custom tag\";\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.Tag.ShouldBe(\"my custom tag\");\n    }\n\n    [Fact]\n    public void Should_Expose_Task_Tag_In_RenderHook()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var tag = new object();\n        object? capturedTag = null;\n\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false)\n            .UseRenderHook((renderable, tasks) =>\n            {\n                capturedTag = tasks.Single().Tag;\n                return renderable;\n            });\n\n        // When\n        progress.Start(ctx =>\n        {\n            var task = ctx.AddTask(\"foo\");\n            task.Tag = tag;\n        });\n\n        // Then\n        capturedTag.ShouldBeSameAs(tag);\n    }\n\n    [Fact]\n    public void Should_Remove_Task_From_Context()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var progress = new Progress(console)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When, Then\n        progress.Start(ctx =>\n        {\n            var task = ctx.AddTask(\"foo\");\n            var removed = ctx.RemoveTask(task);\n            removed.ShouldBeTrue();\n\n            var removedAgain = ctx.RemoveTask(task);\n            removedAgain.ShouldBeFalse();\n        });\n    }\n\n    [Fact]\n    public void Should_Not_Render_Removed_Task_From_Context()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(20)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var removedTask = ctx.AddTask(\"removed\");\n            ctx.AddTask(\"kept\");\n            ctx.RemoveTask(removedTask).ShouldBeTrue();\n        });\n\n        // Then\n        console.Output.ShouldContain(\"kept\");\n        console.Output.ShouldNotContain(\"removed\");\n    }\n\n    [Fact]\n    public void Should_Override_HideCompleted_On_Per_Task_Basis()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn())\n            .AutoRefresh(false)\n            .AutoClear(false)\n            .HideCompleted(true);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var task1 = ctx.AddTask(\"foo\");\n            task1.HideWhenCompleted = false;\n            task1.Value = task1.MaxValue;\n\n            var task2 = ctx.AddTask(\"bar\");\n            task2.Value = task2.MaxValue;\n        });\n\n        // Then\n        console.Output.ShouldContain(\"foo\");\n        console.Output.ShouldNotContain(\"bar\");\n    }\n\n    [Fact]\n    public void Should_Override_HideCompleted_False_On_Per_Task_Basis()\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var progress = new Progress(console)\n            .Columns(new TaskDescriptionColumn())\n            .AutoRefresh(false)\n            .AutoClear(false)\n            .HideCompleted(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var task1 = ctx.AddTask(\"foo\");\n            task1.HideWhenCompleted = true;\n            task1.Value = task1.MaxValue;\n\n            var task2 = ctx.AddTask(\"bar\");\n            task2.Value = task2.MaxValue;\n        });\n\n        // Then\n        console.Output.ShouldNotContain(\"foo\");\n        console.Output.ShouldContain(\"bar\");\n    }\n\n    [Fact]\n    public void Should_Respect_MaxSamplesKept()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        var task = default(ProgressTask);\n\n        double? speed = 0;\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\", maxValue: 5000);\n            task.MaxSamplesKept = 3;\n            task.Increment(400);\n            task.Increment(10);\n            task.Increment(10);\n            time.Advance(TimeSpan.FromMilliseconds(100));\n            task.Increment(10);\n\n            speed = task.Speed;\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        speed.ShouldNotBeNull();\n        speed.Value.ShouldBe(300); // 30 over 100ms = 300 over 1 sec\n    }\n\n    [Fact]\n    public void RemainingTimeColumn_Should_Return_Blank_For_Indeterminate_Task()\n    {\n        // Given\n        var console = new TestConsole().Interactive().Width(10);\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new RemainingTimeColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        // When\n        progress.Start(ctx =>\n        {\n            var task = ctx.AddTask(\"foo\", autoStart: false);\n            task.IsIndeterminate = true;\n            task.StartTask();\n\n            // Need to progress to make sure it tries to calculate remaining time\n            task.Increment(10);\n            time.Advance(TimeSpan.FromSeconds(10));\n        });\n\n        // Then\n        console.Output.ShouldContain(\"**:**:**\");\n    }\n\n    [Fact]\n    public void Should_Drop_Samples_Older_Than_MaxSamplingAge()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        var task = default(ProgressTask);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.MaxSamplingAge = TimeSpan.FromMilliseconds(10);\n            task.Increment(10);\n            time.Advance(TimeSpan.FromMilliseconds(50));\n            task.Increment(10);\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        task.Speed.ShouldBeNull();\n    }\n\n    [Fact]\n    public void Should_Calculate_Speed_When_Task_Stopped()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        var task = default(ProgressTask);\n        var speedBeforeStop = default(double?);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\");\n            task.Increment(10);\n            time.Advance(TimeSpan.FromMilliseconds(100));\n            task.Increment(10);\n            task.Increment(10);\n            time.Advance(TimeSpan.FromMilliseconds(100));\n            task.Increment(10);\n\n            speedBeforeStop = task.Speed;\n            task.StopTask();\n        });\n\n        // Then\n        task.ShouldNotBeNull();\n        speedBeforeStop.ShouldNotBeNull();\n        speedBeforeStop.Value.ShouldBe(200); // at 40/200ms  that is 200/s or so\n    }\n\n    [Fact]\n    public void Should_Include_StartTime_In_Speed_Calculation()\n    {\n        // Given\n        var console = new TestConsole().Interactive();\n        var time = new FakeTimeProvider(new DateTime(2024, 1, 1, 12, 0, 0));\n        var progress = new Progress(console, time)\n            .Columns(new ProgressBarColumn())\n            .AutoRefresh(false)\n            .AutoClear(false);\n\n        var task = default(ProgressTask);\n\n        // When\n        progress.Start(ctx =>\n        {\n            task = ctx.AddTask(\"foo\", autoStart: false);\n            task.StartTask();\n            time.Advance(TimeSpan.FromMilliseconds(50));\n            task.Increment(10);\n        });\n\n        // Then\n        task?.Speed\n            .ShouldNotBeNull()\n            .ShouldBeGreaterThan(0);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Live/StatusTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Live/Status\")]\npublic sealed class StatusTests\n{\n    public sealed class DummySpinner1 : Spinner\n    {\n        public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n        public override bool IsUnicode => true;\n        public override IReadOnlyList<string> Frames => new List<string> { \"*\", };\n    }\n\n    public sealed class DummySpinner2 : Spinner\n    {\n        public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);\n        public override bool IsUnicode => true;\n        public override IReadOnlyList<string> Frames => new List<string> { \"-\", };\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Status_Correctly()\n    {\n        // Given\n        var console = new TestConsole()\n            .Colors(ColorSystem.TrueColor)\n            .Width(10)\n            .Interactive()\n            .EmitAnsiSequences();\n\n        var status = new Status(console)\n        {\n            AutoRefresh = false,\n            Spinner = new DummySpinner1(),\n        };\n\n        // When\n        status.Start(\"foo\", ctx =>\n        {\n            ctx.Refresh();\n            ctx.Spinner(new DummySpinner2());\n            ctx.Status(\"bar\");\n            ctx.Refresh();\n            ctx.Spinner(new DummySpinner1());\n            ctx.Status(\"baz\");\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Prompts/ListPromptStateTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class ListPromptStateTests\n{\n    private ListPromptState<string> CreateListPromptState(int count, int pageSize, bool shouldWrap, bool searchEnabled)\n        => new(\n            Enumerable.Range(0, count).Select(i => new ListPromptItem<string>(i.ToString())).ToList(),\n            text => text,\n            pageSize, shouldWrap, SelectionMode.Independent, true, searchEnabled);\n\n    [Fact]\n    public void Should_Have_Start_Index_Zero()\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, false, false);\n\n        // When\n        /* noop */\n\n        // Then\n        state.Index.ShouldBe(0);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.UpArrow)]\n    [InlineData(ConsoleKey.K)]\n    public void Should_Decrease_Index(ConsoleKey key)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, false, false);\n        state.Update(ConsoleKey.End.ToConsoleKeyInfo());\n        var index = state.Index;\n\n        // When\n        state.Update(key.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(index - 1);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.DownArrow, true)]\n    [InlineData(ConsoleKey.DownArrow, false)]\n    [InlineData(ConsoleKey.J, true)]\n    [InlineData(ConsoleKey.J, false)]\n    public void Should_Increase_Index(ConsoleKey key, bool wrap)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, wrap, false);\n        var index = state.Index;\n\n        // When\n        state.Update(key.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(index + 1);\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    public void Should_Go_To_End(bool wrap)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, wrap, false);\n\n        // When\n        state.Update(ConsoleKey.End.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(99);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.DownArrow)]\n    [InlineData(ConsoleKey.J)]\n    public void Should_Clamp_Index_If_No_Wrap(ConsoleKey key)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, false, false);\n        state.Update(ConsoleKey.End.ToConsoleKeyInfo());\n\n        // When\n        state.Update(key.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(99);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.DownArrow)]\n    [InlineData(ConsoleKey.J)]\n    public void Should_Wrap_Index_If_Wrap(ConsoleKey key)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, true, false);\n        state.Update(ConsoleKey.End.ToConsoleKeyInfo());\n\n        // When\n        state.Update(key.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(0);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.UpArrow)]\n    [InlineData(ConsoleKey.K)]\n    public void Should_Wrap_Index_If_Wrap_And_Down(ConsoleKey key)\n    {\n        // Given\n        var state = CreateListPromptState(100, 10, true, false);\n\n        // When\n        state.Update(key.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(99);\n    }\n\n    [Fact]\n    public void Should_Wrap_Index_If_Wrap_And_Page_Up()\n    {\n        // Given\n        var state = CreateListPromptState(10, 100, true, false);\n\n        // When\n        state.Update(ConsoleKey.PageUp.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(0);\n    }\n\n    [Theory]\n    [InlineData(ConsoleKey.UpArrow)]\n    [InlineData(ConsoleKey.K)]\n    public void Should_Wrap_Index_If_Wrap_And_Offset_And_Page_Down(ConsoleKey key)\n    {\n        // Given\n        var state = CreateListPromptState(10, 100, true, false);\n        state.Update(ConsoleKey.End.ToConsoleKeyInfo());\n        state.Update(key.ToConsoleKeyInfo());\n\n        // When\n        state.Update(ConsoleKey.PageDown.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(8);\n    }\n\n    [Fact]\n    public void Should_Jump_To_First_Matching_Item_When_Searching()\n    {\n        // Given\n        var state = CreateListPromptState(10, 100, true, true);\n\n        // When\n        state.Update(ConsoleKey.D3.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(3);\n    }\n\n    [Fact]\n    public void Should_Jump_Back_To_First_Item_When_Clearing_Search_Term()\n    {\n        // Given\n        var state = CreateListPromptState(10, 100, true, true);\n\n        // When\n        state.Update(ConsoleKey.D3.ToConsoleKeyInfo());\n        state.Update(ConsoleKey.Backspace.ToConsoleKeyInfo());\n\n        // Then\n        state.Index.ShouldBe(0);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Prompts/MultiSelectionPromptTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class MultiSelectionPromptTests\n{\n    [Fact]\n    public void Should_Not_Mark_Item_As_Selected_By_Default()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<int>();\n\n        // When\n        var choice = prompt.AddChoice(32);\n\n        // Then\n        choice.IsSelected.ShouldBeFalse();\n    }\n\n    [Fact]\n    public void Should_Mark_Item_As_Selected()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<int>();\n        var choice = prompt.AddChoice(32);\n\n        // When\n        prompt.Select(32);\n\n        // Then\n        choice.IsSelected.ShouldBeTrue();\n    }\n\n    [Fact]\n    public void Should_Mark_Custom_Item_As_Selected_If_The_Same_Reference_Is_Used()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<CustomItem>();\n        var item = new CustomItem { X = 18, Y = 32 };\n        var choice = prompt.AddChoice(item);\n\n        // When\n        prompt.Select(item);\n\n        // Then\n        choice.IsSelected.ShouldBeTrue();\n    }\n\n    [Fact]\n    public void Should_Mark_Custom_Item_As_Selected_If_A_Comparer_Is_Provided()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<CustomItem>(new CustomItem.Comparer());\n        var choice = prompt.AddChoice(new CustomItem { X = 18, Y = 32 });\n\n        // When\n        prompt.Select(new CustomItem { X = 18, Y = 32 });\n\n        // Then\n        choice.IsSelected.ShouldBeTrue();\n    }\n\n    [Fact]\n    public void Should_Get_The_Direct_Parent()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoice(\"root\").AddChild(\"level-1\").AddChild(\"level-2\").AddChild(\"item\");\n\n        // When\n        var actual = prompt.GetParent(\"item\");\n\n        // Then\n        actual.ShouldBe(\"level-2\");\n    }\n\n    [Fact]\n    public void Should_Get_The_List_Of_All_Parents()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoice(\"root\").AddChild(\"level-1\").AddChild(\"level-2\").AddChild(\"item\");\n\n        // When\n        var actual = prompt.GetParents(\"item\");\n\n        // Then\n        actual.ShouldBe([\"root\", \"level-1\", \"level-2\"]);\n    }\n\n    [Fact]\n    public void Should_Get_An_Empty_List_Of_Parents_For_Root_Node()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoice(\"root\");\n\n        // When\n        var actual = prompt.GetParents(\"root\");\n\n        // Then\n        actual.ShouldBeEmpty();\n    }\n\n    [Fact]\n    public void Should_Get_Null_As_Direct_Parent_Of_Root_Node()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoice(\"root\");\n\n        // When\n        var actual = prompt.GetParent(\"root\");\n\n        // Then\n        actual.ShouldBeNull();\n    }\n\n    [Fact]\n    public void Should_Throw_When_Getting_Parents_Of_Non_Existing_Node()\n    {\n        // Given\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoice(\"root\").AddChild(\"level-1\").AddChild(\"level-2\").AddChild(\"item\");\n\n        // When\n        Action action = () => prompt.GetParents(\"non-existing\");\n\n        // Then\n        action.ShouldThrow<ArgumentOutOfRangeException>();\n    }\n\n    [Fact]\n    public void Should_Throw_Meaningful_Exception_For_Empty_Prompt()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n\n        var prompt = new MultiSelectionPrompt<string>();\n\n        // When\n        Action action = () => prompt.Show(console);\n\n        // Then\n        var exception = action.ShouldThrow<InvalidOperationException>();\n        exception.Message.ShouldBe(\n            \"Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt.\");\n    }\n\n    [Fact]\n    public void Should_Return_All_Selected_Items()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.DownArrow);\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoices([\"A\", \"B\", \"C\", \"D\"]);\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe([\"A\", \"B\"]);\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_FuncVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.DownArrow);\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoices([\"A\", \"B\", \"C\", \"D\"]);\n        prompt.AddCancelResult(() => [\"E\"]);\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe([\"E\"]);\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_ListVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.DownArrow);\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoices([\"A\", \"B\", \"C\", \"D\"]);\n        prompt.AddCancelResult([\"E\", \"F\"]);\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe([\"E\", \"F\"]);\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_ItemVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.DownArrow);\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoices([\"A\", \"B\", \"C\", \"D\"]);\n        prompt.AddCancelResult(\"E\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe([\"E\"]);\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_EmptyVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.DownArrow);\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new MultiSelectionPrompt<string>();\n        prompt.AddChoices([\"A\", \"B\", \"C\", \"D\"]);\n        prompt.AddCancelResult();\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe([]);\n    }\n}\n\nfile sealed class CustomItem\n{\n    public int X { get; set; }\n    public int Y { get; set; }\n\n    public class Comparer : IEqualityComparer<CustomItem>\n    {\n        public bool Equals(CustomItem? x, CustomItem? y)\n        {\n            if (x == null && y == null)\n            {\n                return true;\n            }\n\n            if (x == null || y == null)\n            {\n                return false;\n            }\n\n            return x.X == y.X && x.Y == y.Y;\n        }\n\n        public int GetHashCode(CustomItem obj)\n        {\n            throw new NotSupportedException();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Prompts/SelectionPromptTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class SelectionPromptTests\n{\n    private const string ESC = \"\\u001b\";\n\n    [Fact]\n    public void Should_Not_Throw_When_Selecting_An_Item_With_Escaped_Markup()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Enter);\n        var input = \"[red]This text will never be red[/]\".EscapeMarkup();\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n                .Title(\"Select one\")\n                .AddChoices(input);\n        prompt.Show(console);\n\n        // Then\n        console.Output.ShouldContain(@\"[red]This text will never be red[/]\");\n    }\n\n    [Fact]\n    public void Should_Select_The_First_Leaf_Item()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n                .Title(\"Select one\")\n                .Mode(SelectionMode.Leaf)\n                .AddChoiceGroup(\"Group one\", \"A\", \"B\")\n                .AddChoiceGroup(\"Group two\", \"C\", \"D\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(\"A\");\n    }\n\n    [Fact]\n    public void Should_Select_The_Last_Leaf_Item_When_Wrapping_Around()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.UpArrow);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n            .Title(\"Select one\")\n            .Mode(SelectionMode.Leaf)\n            .WrapAround()\n            .AddChoiceGroup(\"Group one\", \"A\", \"B\")\n            .AddChoiceGroup(\"Group two\", \"C\", \"D\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(\"D\");\n    }\n\n    [Fact]\n    public void Should_Highlight_Search_Term()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.EmitAnsiSequences();\n        console.Input.PushText(\"1\");\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n            .Title(\"Select one\")\n            .EnableSearch()\n            .AddChoices(\"Item 1\");\n        prompt.Show(console);\n\n        // Then\n        console.Output.ShouldContain($\"{ESC}[38;5;12m> Item {ESC}[0m{ESC}[1;38;5;12;48;5;11m1{ESC}[0m\");\n    }\n\n    [Fact]\n    public void Should_Search_In_Remapped_Result()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.EmitAnsiSequences();\n        console.Input.PushText(\"2\");\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        var choices = new List<CustomSelectionItem>\n        {\n            new(33, \"Item 1\"),\n            new(34, \"Item 2\"),\n        };\n\n        var prompt = new SelectionPrompt<CustomSelectionItem>()\n            .Title(\"Select one\")\n            .EnableSearch()\n            .UseConverter(o => o.Name)\n            .AddChoices(choices);\n\n        // When\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(choices[1]);\n    }\n\n    [Fact]\n    public void Should_Throw_Meaningful_Exception_For_Empty_Prompt()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n\n        var prompt = new SelectionPrompt<string>();\n\n        // When\n        Action action = () => prompt.Show(console);\n\n        // Then\n        var exception = action.ShouldThrow<InvalidOperationException>();\n        exception.Message.ShouldBe(\"Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt.\");\n    }\n\n    [Fact]\n    public void Should_Append_Space_To_Search_If_Search_Is_Enabled()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.EmitAnsiSequences();\n        console.Input.PushText(\"Item\");\n        console.Input.PushKey(ConsoleKey.Spacebar);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n            .Title(\"Search for something with space\")\n            .EnableSearch()\n            .AddChoices(\"Item1\")\n            .AddChoices(\"Item 2\");\n        string result = prompt.Show(console);\n\n        // Then\n        result.ShouldBe(\"Item 2\");\n        console.Output.ShouldContain($\"{ESC}[38;5;12m> {ESC}[0m{ESC}[1;38;5;12;48;5;11mItem {ESC}[0m{ESC}[38;5;12m2{ESC}[0m \");\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_FuncVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n                .Title(\"Select one\")\n                .Mode(SelectionMode.Leaf)\n                .AddChoiceGroup(\"Group one\", \"A\", \"B\")\n                .AddChoiceGroup(\"Group two\", \"C\", \"D\")\n                .AddCancelResult(() => \"E\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(\"E\");\n    }\n\n    [Fact]\n    public void Should_Return_CancelResult_On_Cancel_ValueVersion()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Escape);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n                .Title(\"Select one\")\n                .Mode(SelectionMode.Leaf)\n                .AddChoiceGroup(\"Group one\", \"A\", \"B\")\n                .AddChoiceGroup(\"Group two\", \"C\", \"D\")\n                .AddCancelResult(\"E\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(\"E\");\n    }\n\n    [Fact]\n    public void Should_Ignore_Escape_If_CancelResult_Not_Set()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushKey(ConsoleKey.Escape);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n                .Title(\"Select one\")\n                .Mode(SelectionMode.Leaf)\n                .AddChoiceGroup(\"Group one\", \"A\", \"B\")\n                .AddChoiceGroup(\"Group two\", \"C\", \"D\");\n        var selection = prompt.Show(console);\n\n        // Then\n        selection.ShouldBe(\"A\");\n    }\n\n    [Fact]\n    public void Should_Not_Throw_When_Searching_With_Escaped_Brackets_In_Choices()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushText(\"M\");\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n            .Title(\"Select a subscription\")\n            .UseConverter(s => s.EscapeMarkup())\n            .EnableSearch()\n            .AddChoices(\n                \"MSFT-Provisioning-01[Prod] (guid-1)\",\n                \"Normal Subscription (guid-2)\");\n        var result = prompt.Show(console);\n\n        // Then\n        result.ShouldBe(\"MSFT-Provisioning-01[Prod] (guid-1)\");\n    }\n\n    [Fact]\n    public void Should_Search_And_Select_Item_With_Brackets()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Capabilities.Interactive = true;\n        console.Input.PushText(\"Dev\");\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        var prompt = new SelectionPrompt<string>()\n            .Title(\"Select\")\n            .UseConverter(s => s.EscapeMarkup())\n            .EnableSearch()\n            .AddChoices(\n                \"[Prod] Production\",\n                \"[Dev] Development\",\n                \"Staging\");\n        var result = prompt.Show(console);\n\n        // Then\n        result.ShouldBe(\"[Dev] Development\");\n    }\n}\n\nfile sealed class CustomSelectionItem\n{\n    public int Value { get; }\n    public string Name { get; }\n\n    public CustomSelectionItem(int value, string name)\n    {\n        Value = value;\n        Name = name ?? throw new ArgumentNullException(nameof(name));\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Prompts/TextPromptTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Prompts/Text\")]\npublic sealed class TextPromptTests\n{\n    [Fact]\n    public void Should_Return_Entered_Text()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"Hello World\");\n\n        // When\n        var result = console.Prompt(new TextPrompt<string>(\"Enter text:\"));\n\n        // Then\n        result.ShouldBe(\"Hello World\");\n    }\n\n    [Fact]\n    [Expectation(\"ConversionError\")]\n    public Task Should_Return_Validation_Error_If_Value_Cannot_Be_Converted()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"ninety-nine\");\n        console.Input.PushTextWithEnter(\"99\");\n\n        // When\n        console.Prompt(new TextPrompt<int>(\"Age?\"));\n\n        // Then\n        return Verifier.Verify(console.Lines);\n    }\n\n    [Fact]\n    [Expectation(\"DefaultValue\")]\n    public Task Should_Chose_Default_Value_If_Nothing_Is_Entered()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\")\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"InvalidChoice\")]\n    public Task Should_Return_Error_If_An_Invalid_Choice_Is_Made()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"Apple\");\n        console.Input.PushTextWithEnter(\"Banana\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\")\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"AcceptChoice\")]\n    public Task Should_Accept_Choice_In_List()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"Orange\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\")\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"AutoComplete_Empty\")]\n    public Task Should_Auto_Complete_To_First_Choice_If_Pressing_Tab_On_Empty_String()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushKey(ConsoleKey.Tab);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\")\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"AutoComplete_BestMatch\")]\n    public Task Should_Auto_Complete_To_Best_Match()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushText(\"Band\");\n        console.Input.PushKey(ConsoleKey.Tab);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Bandana\")\n                .AddChoice(\"Orange\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"AutoComplete_NextChoice\")]\n    public Task Should_Auto_Complete_To_Next_Choice_When_Pressing_Tab_On_A_Match()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushText(\"Apple\");\n        console.Input.PushKey(ConsoleKey.Tab);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Apple\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"AutoComplete_PreviousChoice\")]\n    public Task Should_Auto_Complete_To_Previous_Choice_When_Pressing_ShiftTab_On_A_Match()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushText(\"Ban\");\n        console.Input.PushKey(ConsoleKey.Tab);\n        console.Input.PushKey(ConsoleKey.Tab);\n        var shiftTab = new ConsoleKeyInfo((char)ConsoleKey.Tab, ConsoleKey.Tab, true, false, false);\n        console.Input.PushKey(shiftTab);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Bandana\")\n                .AddChoice(\"Orange\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"CustomValidation\")]\n    public Task Should_Return_Error_If_Custom_Validation_Fails()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"22\");\n        console.Input.PushTextWithEnter(\"102\");\n        console.Input.PushTextWithEnter(\"ABC\");\n        console.Input.PushTextWithEnter(\"99\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<int>(\"Guess number:\")\n                .ValidationErrorMessage(\"Invalid input\")\n                .Validate(age =>\n                {\n                    if (age < 99)\n                    {\n                        return ValidationResult.Error(\"Too low\");\n                    }\n                    else if (age > 99)\n                    {\n                        return ValidationResult.Error(\"Too high\");\n                    }\n\n                    return ValidationResult.Success();\n                }));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"CustomConverter\")]\n    public Task Should_Use_Custom_Converter()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"Banana\");\n\n        // When\n        var result = console.Prompt(\n            new TextPrompt<(int, string)>(\"Favorite fruit?\")\n                .AddChoice((1, \"Apple\"))\n                .AddChoice((2, \"Banana\"))\n                .WithConverter(testData => testData.Item2));\n\n        // Then\n        result.Item1.ShouldBe(2);\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"SecretDefaultValue\")]\n    public Task Should_Choose_Masked_Default_Value_If_Nothing_Is_Entered_And_Prompt_Is_Secret()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .Secret()\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"SecretValueBackspaceNullMask\")]\n    public Task Should_Not_Erase_Prompt_Text_On_Backspace_If_Prompt_Is_Secret_And_Mask_Is_Null()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushText(\"Bananas\");\n        console.Input.PushKey(ConsoleKey.Backspace);\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .Secret(null));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"SecretDefaultValueCustomMask\")]\n    public Task Should_Choose_Custom_Masked_Default_Value_If_Nothing_Is_Entered_And_Prompt_Is_Secret_And_Mask_Is_Custom()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .Secret('-')\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"SecretDefaultValueNullMask\")]\n    public Task Should_Choose_Empty_Masked_Default_Value_If_Nothing_Is_Entered_And_Prompt_Is_Secret_And_Mask_Is_Null()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushKey(ConsoleKey.Enter);\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .Secret(null)\n                .DefaultValue(\"Banana\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"NoSuffix\")]\n    public Task Should_Not_Append_Questionmark_Or_Colon_If_No_Choices_Are_Set()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"Orange\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Enter command$\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"DefaultValueStyleNotSet\")]\n    public Task Uses_default_style_for_default_value_if_no_style_is_set()\n    {\n        // Given\n        var console = new TestConsole\n        {\n            EmitAnsiSequences = true,\n        };\n        console.Input.PushTextWithEnter(\"Input\");\n\n        var prompt = new TextPrompt<string>(\"Enter Value:\")\n                .ShowDefaultValue()\n                .DefaultValue(\"default\");\n\n        // When\n        console.Prompt(prompt);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"DefaultValueStyleSet\")]\n    public Task Uses_specified_default_value_style()\n    {\n        // Given\n        var console = new TestConsole\n        {\n            EmitAnsiSequences = true,\n        };\n        console.Input.PushTextWithEnter(\"Input\");\n\n        var prompt = new TextPrompt<string>(\"Enter Value:\")\n                .ShowDefaultValue()\n                .DefaultValue(\"default\")\n                .DefaultValueStyle(Color.Red);\n\n        // When\n        console.Prompt(prompt);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"ChoicesStyleNotSet\")]\n    public Task Uses_default_style_for_choices_if_no_style_is_set()\n    {\n        // Given\n        var console = new TestConsole\n        {\n            EmitAnsiSequences = true,\n        };\n        console.Input.PushTextWithEnter(\"Choice 2\");\n\n        var prompt = new TextPrompt<string>(\"Enter Value:\")\n                .ShowChoices()\n                .AddChoice(\"Choice 1\")\n                .AddChoice(\"Choice 2\");\n\n        // When\n        console.Prompt(prompt);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"ChoicesStyleSet\")]\n    public Task Uses_the_specified_choices_style()\n    {\n        // Given\n        var console = new TestConsole\n        {\n            EmitAnsiSequences = true,\n        };\n        console.Input.PushTextWithEnter(\"Choice 2\");\n\n        var prompt = new TextPrompt<string>(\"Enter Value:\")\n                .ShowChoices()\n                .AddChoice(\"Choice 1\")\n                .AddChoice(\"Choice 2\")\n                .ChoicesStyle(Color.Red);\n\n        // When\n        console.Prompt(prompt);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"InvalidDefaultChoice\")]\n    public Task Should_Return_Error_If_Default_Choice_Invalid()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Input.PushTextWithEnter(\"\");\n        console.Input.PushTextWithEnter(\"a\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Favorite fruit?\")\n                .AddChoice(\"Banana\")\n                .AddChoice(\"Orange\")\n                .DefaultValue(\"Banan\")\n                .ShowDefaultValue(true)\n                .EditableDefaultValue(true));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"ClearOnFinish\")]\n    public Task Should_Clear_Prompt_Line_When_ClearOnFinish_Is_Enabled()\n    {\n        // Given\n        var console = new TestConsole\n        {\n            EmitAnsiSequences = true,\n        };\n        console.Input.PushTextWithEnter(\"secret-value\");\n\n        // When\n        console.Prompt(\n            new TextPrompt<string>(\"Enter a value\")\n                .Secret()\n                .ClearOnFinish());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/RecorderTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Recorder\")]\npublic sealed class RecorderTests\n{\n    [Fact]\n    [Expectation(\"Text\")]\n    public Task Should_Export_Text_As_Expected()\n    {\n        // Given\n        var console = new TestConsole();\n        var recorder = new Recorder(console);\n\n        recorder.Write(new Table()\n            .AddColumns(\"Foo\", \"Bar\", \"Qux\")\n            .AddRow(\"Corgi\", \"Waldo\", \"Zap\")\n            .AddRow(new Panel(\"Hello World\").RoundedBorder()));\n\n        // When\n        var result = recorder.ExportText();\n\n        // Then\n        return Verifier.Verify(result);\n    }\n\n    [Fact]\n    [Expectation(\"Html\")]\n    public Task Should_Export_Html_Text_As_Expected()\n    {\n        // Given\n        var console = new TestConsole();\n        var recorder = new Recorder(console);\n\n        recorder.Write(new Table()\n            .AddColumns(\"[red on black]Foo[/]\", \"[green bold]Bar[/]\", \"[blue italic]Qux[/]\")\n            .AddRow(\"[invert underline]Corgi[/]\", \"[bold strikethrough]Waldo[/]\", \"[dim]Zap[/]\")\n            .AddRow(new Panel(\"[blue]Hello World[/]\")\n                .BorderColor(Color.Red).RoundedBorder()));\n\n        // When\n        var result = recorder.ExportHtml();\n\n        // Then\n        return Verifier.Verify(result);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Rendering/Borders/BoxBorderTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Rendering/Borders/Box\")]\npublic sealed class BoxBorderTests\n{\n    public sealed class NoBorder\n    {\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = BoxExtensions.GetSafeBorder(BoxBorder.None, safe: true);\n\n                // Then\n                border.ShouldBeSameAs(BoxBorder.None);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"NoBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().NoBorder();\n            panel.Header = null;\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"NoBorder_With_Header\")]\n        public Task Should_Render_NoBorder_With_Header_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().NoBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class AsciiBorder\n    {\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = BoxExtensions.GetSafeBorder(BoxBorder.Ascii, safe: true);\n\n                // Then\n                border.ShouldBeSameAs(BoxBorder.Ascii);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"AsciiBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().AsciiBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class DoubleBorder\n    {\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = BoxExtensions.GetSafeBorder(BoxBorder.Double, safe: true);\n\n                // Then\n                border.ShouldBeSameAs(BoxBorder.Double);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"DoubleBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().DoubleBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class HeavyBorder\n    {\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = BoxExtensions.GetSafeBorder(BoxBorder.Heavy, safe: true);\n\n                // Then\n                border.ShouldBeSameAs(BoxBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"HeavyBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().HeavyBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class RoundedBorder\n    {\n        [Fact]\n        public void Should_Return_Safe_Border()\n        {\n            // Given, When\n            var border = BoxExtensions.GetSafeBorder(BoxBorder.Rounded, safe: true);\n\n            // Then\n            border.ShouldBeSameAs(BoxBorder.Square);\n        }\n\n        [Fact]\n        [Expectation(\"RoundedBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().RoundedBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class SquareBorder\n    {\n        [Fact]\n        public void Should_Return_Safe_Border()\n        {\n            // Given, When\n            var border = BoxExtensions.GetSafeBorder(BoxBorder.Square, safe: true);\n\n            // Then\n            border.ShouldBeSameAs(BoxBorder.Square);\n        }\n\n        [Fact]\n        [Expectation(\"SquareBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var panel = Fixture.GetPanel().SquareBorder();\n\n            // When\n            console.Write(panel);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    private static class Fixture\n    {\n        public static Panel GetPanel()\n        {\n            return new Panel(\"Hello World\")\n                .Header(\"Greeting\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Rendering/Borders/TableBorderTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Rendering/Borders/Table\")]\npublic sealed class TableBorderTests\n{\n    public sealed class NoBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.None.Visible;\n\n            // Then\n            visibility.ShouldBeFalse();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.None.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.None);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"NoBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().NoBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class AsciiBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Ascii.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Ascii.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Ascii);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"AsciiBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().AsciiBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class Ascii2Border\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Ascii2.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Ascii2.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Ascii2);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"Ascii2Border\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().Ascii2Border();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class AsciiDoubleHeadBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.AsciiDoubleHead.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.AsciiDoubleHead.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.AsciiDoubleHead);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"AsciiDoubleHeadBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().AsciiDoubleHeadBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class SquareBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Square.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Square.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"SquareBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().SquareBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class RoundedBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Rounded.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Rounded.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"RoundedBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().RoundedBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class MinimalBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Minimal.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Minimal.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Minimal);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"MinimalBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().MinimalBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class MinimalHeavyHeadBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.MinimalHeavyHead.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.MinimalHeavyHead.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Minimal);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"MinimalHeavyHeadBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().MinimalHeavyHeadBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class MinimalDoubleHeadBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.MinimalDoubleHead.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.MinimalDoubleHead.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.MinimalDoubleHead);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"MinimalDoubleHeadBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().MinimalDoubleHeadBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class SimpleBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Simple.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Simple.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Simple);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"SimpleBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().SimpleBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class HorizontalBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Horizontal.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Horizontal.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Horizontal);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"HorizontalBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().HorizontalBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class SimpleHeavyBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.SimpleHeavy.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.SimpleHeavy.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Simple);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"SimpleHeavyBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().SimpleHeavyBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class HeavyBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Heavy.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Heavy.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"HeavyBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().HeavyBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class HeavyEdgeBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.HeavyEdge.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.HeavyEdge.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"HeavyEdgeBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().HeavyEdgeBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class HeavyHeadBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.HeavyHead.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.HeavyHead.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Square);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"HeavyHeadBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().HeavyHeadBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class DoubleBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Double.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Double.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Double);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"DoubleBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().DoubleBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class DoubleEdgeBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.DoubleEdge.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.DoubleEdge.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.DoubleEdge);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"DoubleEdgeBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().DoubleEdgeBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class MarkdownBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Markdown.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Markdown.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Markdown);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"MarkdownBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().MarkdownBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"MarkdownBorder_LeftAligned\")]\n        public Task Should_Render_Left_Aligned_Table_Columns_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable(header2: Justify.Left).MarkdownBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"MarkdownBorder_Centered\")]\n        public Task Should_Render_Center_Aligned_Table_Columns_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable(header2: Justify.Center).MarkdownBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"MarkdownBorder_RightAligned\")]\n        public Task Should_Render_Right_Aligned_Table_Columns_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable(header2: Justify.Right).MarkdownBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class MinimalistBorder\n    {\n        [Fact]\n        public void Should_Return_Correct_Visibility()\n        {\n            // Given, When\n            var visibility = TableBorder.Minimalist.Visible;\n\n            // Then\n            visibility.ShouldBeTrue();\n        }\n\n        public sealed class TheSafeGetBorderMethod\n        {\n            [Fact]\n            public void Should_Return_Safe_Border()\n            {\n                // Given, When\n                var border = TableBorder.Minimalist.GetSafeBorder(safe: true);\n\n                // Then\n                border.ShouldBeSameAs(TableBorder.Minimalist);\n            }\n        }\n\n        [Fact]\n        [Expectation(\"MinimalistBorder\")]\n        public Task Should_Render_As_Expected()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = Fixture.GetTable().MinimalistBorder();\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    private static class Fixture\n    {\n        public static Table GetTable(Justify? header1 = null, Justify? header2 = null)\n        {\n            var table = new Table();\n            table.AddColumn(\"Header 1\", c => c.Alignment(header1).Footer(\"Footer 1\"));\n            table.AddColumn(\"Header 2\", c => c.Alignment(header2).Footer(\"Footer 2\"));\n            table.AddRow(\"Cell\", \"Cell\");\n            table.AddRow(\"Cell\", \"Cell\");\n            return table;\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Rendering/RenderHookTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class RenderHookTests\n{\n    private sealed class HelloRenderHook : IRenderHook\n    {\n        public IEnumerable<IRenderable> Process(RenderOptions options, IEnumerable<IRenderable> renderables)\n        {\n            return new IRenderable[] { new Text(\"Hello\\n\") }.Concat(renderables);\n        }\n    }\n\n    [Fact]\n    public void Should_Inject_Renderable_Before_Writing_To_Console()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Pipeline.Attach(new HelloRenderHook());\n\n        // When\n        console.Write(new Text(\"World\"));\n\n        // Then\n        console.Lines[0].ShouldBe(\"Hello\");\n        console.Lines[1].ShouldBe(\"World\");\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Rendering/SegmentShapeTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class SegmentShapeTests\n{\n    [Fact]\n    public void Calculate_Should_Return_Zero_Size_When_No_Lines()\n    {\n        // Given\n        var capabilities = new TestCapabilities();\n        var options = new RenderOptions(capabilities, new Size(80, 24));\n        var lines = new List<SegmentLine>();\n\n        // When\n        var shape = SegmentShape.Calculate(options, lines);\n\n        // Then\n        shape.Width.ShouldBe(0);\n        shape.Height.ShouldBe(0);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Rendering/SegmentTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class SegmentTests\n{\n    public sealed class TheSplitMethod\n    {\n        [Theory]\n        [InlineData(\"Foo Bar\", 0, \"\", \"Foo Bar\")]\n        [InlineData(\"Foo Bar\", 1, \"F\", \"oo Bar\")]\n        [InlineData(\"Foo Bar\", 2, \"Fo\", \"o Bar\")]\n        [InlineData(\"Foo Bar\", 3, \"Foo\", \" Bar\")]\n        [InlineData(\"Foo Bar\", 4, \"Foo \", \"Bar\")]\n        [InlineData(\"Foo Bar\", 5, \"Foo B\", \"ar\")]\n        [InlineData(\"Foo Bar\", 6, \"Foo Ba\", \"r\")]\n        [InlineData(\"Foo Bar\", 7, \"Foo Bar\", null)]\n        [InlineData(\"Foo 测试 Bar\", 0, \"\", \"Foo 测试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 1, \"F\", \"oo 测试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 2, \"Fo\", \"o 测试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 3, \"Foo\", \" 测试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 4, \"Foo \", \"测试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 5, \"Foo 测\", \"试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 6, \"Foo 测\", \"试 Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 7, \"Foo 测试\", \" Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 8, \"Foo 测试\", \" Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 9, \"Foo 测试 \", \"Bar\")]\n        [InlineData(\"Foo 测试 Bar\", 10, \"Foo 测试 B\", \"ar\")]\n        [InlineData(\"Foo 测试 Bar\", 11, \"Foo 测试 Ba\", \"r\")]\n        [InlineData(\"Foo 测试 Bar\", 12, \"Foo 测试 Bar\", null)]\n        public void Should_Split_Segment_Correctly(string text, int offset, string expectedFirst, string? expectedSecond)\n        {\n            // Given\n            var style = new Style(Color.Red, Color.Green, Decoration.Bold);\n            var segment = new Segment(text, style);\n\n            // When\n            var (first, second) = segment.Split(offset);\n\n            // Then\n            first.Text.ShouldBe(expectedFirst);\n            first.Style.ShouldBe(style);\n            second?.Text.ShouldBe(expectedSecond);\n            second?.Style.ShouldBe(style);\n        }\n    }\n\n    public sealed class TheSplitLinesMethod\n    {\n        [Fact]\n        public void Should_Split_Segment()\n        {\n            // Given, When\n            var lines = Segment.SplitLines(\n            [\n                new Segment(\"Foo\"),\n                        new Segment(\"Bar\"),\n                        new Segment(\"\\n\"),\n                        new Segment(\"Baz\"),\n                        new Segment(\"Qux\"),\n                        new Segment(\"\\n\"),\n                        new Segment(\"Corgi\")\n            ]);\n\n            // Then\n            lines.Count.ShouldBe(3);\n\n            lines[0].Count.ShouldBe(2);\n            lines[0][0].Text.ShouldBe(\"Foo\");\n            lines[0][1].Text.ShouldBe(\"Bar\");\n\n            lines[1].Count.ShouldBe(2);\n            lines[1][0].Text.ShouldBe(\"Baz\");\n            lines[1][1].Text.ShouldBe(\"Qux\");\n\n            lines[2].Count.ShouldBe(1);\n            lines[2][0].Text.ShouldBe(\"Corgi\");\n        }\n\n        [Fact]\n        public void Should_Split_Segment_With_Windows_LineBreak()\n        {\n            // Given, When\n            var lines = Segment.SplitLines(\n            [\n                new Segment(\"Foo\"),\n                        new Segment(\"Bar\"),\n                        new Segment(\"\\r\\n\"),\n                        new Segment(\"Baz\"),\n                        new Segment(\"Qux\"),\n                        new Segment(\"\\r\\n\"),\n                        new Segment(\"Corgi\")\n            ]);\n\n            // Then\n            lines.Count.ShouldBe(3);\n\n            lines[0].Count.ShouldBe(2);\n            lines[0][0].Text.ShouldBe(\"Foo\");\n            lines[0][1].Text.ShouldBe(\"Bar\");\n\n            lines[1].Count.ShouldBe(2);\n            lines[1][0].Text.ShouldBe(\"Baz\");\n            lines[1][1].Text.ShouldBe(\"Qux\");\n\n            lines[2].Count.ShouldBe(1);\n            lines[2][0].Text.ShouldBe(\"Corgi\");\n        }\n\n        [Fact]\n        public void Should_Split_Segments_With_Linebreak_In_Text()\n        {\n            // Given, Given\n            var lines = Segment.SplitLines(\n            [\n                new Segment(\"Foo\\n\"),\n                        new Segment(\"Bar\\n\"),\n                        new Segment(\"Baz\"),\n                        new Segment(\"Qux\\n\"),\n                        new Segment(\"Corgi\")\n            ]);\n\n            // Then\n            lines.Count.ShouldBe(4);\n\n            lines[0].Count.ShouldBe(1);\n            lines[0][0].Text.ShouldBe(\"Foo\");\n\n            lines[1].Count.ShouldBe(1);\n            lines[1][0].Text.ShouldBe(\"Bar\");\n\n            lines[2].Count.ShouldBe(2);\n            lines[2][0].Text.ShouldBe(\"Baz\");\n            lines[2][1].Text.ShouldBe(\"Qux\");\n\n            lines[3].Count.ShouldBe(1);\n            lines[3][0].Text.ShouldBe(\"Corgi\");\n        }\n    }\n\n    public sealed class TheSplitLinesWithMaxWidthMethod\n    {\n        [Fact]\n        [GitHubIssue(\"https://github.com/spectreconsole/spectre.console/issues/2033\")]\n        public void Should_Split_Fullwidth_Segment_Without_Exception()\n        {\n            // Given (reproduces GitHub issue #2033)\n            var segments = new List<Segment>\n            {\n                new Segment(\"测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试\"),\n            };\n\n            // When\n            var lines = Segment.SplitLines(segments, maxWidth: 10);\n\n            // Then\n            lines.Count.ShouldBe(7);\n            lines[0].CellCount().ShouldBe(10);\n            lines[1].CellCount().ShouldBe(10);\n            lines[2].CellCount().ShouldBe(10);\n            lines[3].CellCount().ShouldBe(10);\n            lines[4].CellCount().ShouldBe(10);\n            lines[5].CellCount().ShouldBe(10);\n            lines[6].CellCount().ShouldBe(4);\n        }\n\n        [Fact]\n        public void Should_Split_Fullwidth_Segment_At_Correct_Boundary()\n        {\n            // Given\n            var segments = new List<Segment>\n            {\n                new Segment(\"测试测试\"), // 8 cells\n            };\n\n            // When\n            var lines = Segment.SplitLines(segments, maxWidth: 6);\n\n            // Then\n            lines.Count.ShouldBe(2);\n            lines[0][0].Text.ShouldBe(\"测试测\"); // 6 cells\n            lines[1][0].Text.ShouldBe(\"试\"); // 2 cells\n        }\n\n        [Fact]\n        public void Should_Split_Fullwidth_Segment_With_Odd_MaxWidth()\n        {\n            // Given\n            var segments = new List<Segment>\n            {\n                new Segment(\"测试测试\"), // 8 cells\n            };\n\n            // When\n            var lines = Segment.SplitLines(segments, maxWidth: 5);\n\n            // Then\n            lines.Count.ShouldBe(2);\n            lines[0][0].Text.ShouldBe(\"测试测\"); // 6 cells\n            lines[1][0].Text.ShouldBe(\"试\"); // 2 cells\n        }\n    }\n\n    public sealed class TheSplitOverflowMethod\n    {\n        [Fact]\n        public void Should_Handle_Fullwidth_Text_When_Using_Ellipsis()\n        {\n            // Given\n            var text = \"神様達が下界に来る前は、魔法は特定の種族の専売特許に過ぎなかった。\";\n            var segment = new Segment(text);\n\n            // When\n            var result = Segment.SplitOverflow(segment, Overflow.Ellipsis, 10);\n\n            // Then\n            result.Count.ShouldBe(1);\n            result[0].CellCount().ShouldBeLessThanOrEqualTo(10);\n            result[0].Text.EndsWith(\"…\", StringComparison.Ordinal).ShouldBeTrue();\n        }\n\n        [Fact]\n        public void Should_Handle_Fullwidth_Text_When_Using_Crop()\n        {\n            // Given\n            var text = \"神様達が下界に来る前は、魔法は特定の種族の専売特許に過ぎなかった。\";\n            var segment = new Segment(text);\n\n            // When\n            var result = Segment.SplitOverflow(segment, Overflow.Crop, 10);\n\n            // Then\n            result.Count.ShouldBe(1);\n            result[0].CellCount().ShouldBeLessThanOrEqualTo(10);\n            result[0].Text.EndsWith(\"…\", StringComparison.Ordinal).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/AlignTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Align\")]\npublic sealed class AlignTests\n{\n    public sealed class Left\n    {\n        [Fact]\n        [Expectation(\"Left_Top\")]\n        public Task Should_Render_Panel_Left_Aligned_At_Top()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Left(new Panel(\"Hello World!\"), VerticalAlignment.Top).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Left_Middle\")]\n        public Task Should_Render_Panel_Left_Aligned_At_Middle()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Left(new Panel(\"Hello World!\"), VerticalAlignment.Middle).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Left_Bottom\")]\n        public Task Should_Render_Panel_Left_Aligned_At_Bottom()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Left(new Panel(\"Hello World!\"), VerticalAlignment.Bottom).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class Center\n    {\n        [Fact]\n        [Expectation(\"Center_Top\")]\n        public Task Should_Render_Panel_Center_Aligned_At_Top()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Center(new Panel(\"Hello World!\"), VerticalAlignment.Top).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Center_Middle\")]\n        public Task Should_Render_Panel_Center_Aligned_At_Middle()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Center(new Panel(\"Hello World!\"), VerticalAlignment.Middle).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Center_Bottom\")]\n        public Task Should_Render_Panel_Center_Aligned_At_Bottom()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Center(new Panel(\"Hello World!\"), VerticalAlignment.Bottom).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class Right\n    {\n        [Fact]\n        [Expectation(\"Right_Top\")]\n        public Task Should_Render_Panel_Right_Aligned_At_Top()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Right(new Panel(\"Hello World!\"), VerticalAlignment.Top).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Right_Middle\")]\n        public Task Should_Render_Panel_Right_Aligned_At_Middle()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Right(new Panel(\"Hello World!\"), VerticalAlignment.Middle).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Right_Bottom\")]\n        public Task Should_Render_Panel_Right_Aligned_At_Bottom()\n        {\n            // Given\n            var console = new TestConsole().Size(new Size(40, 15));\n            var align = Align.Right(new Panel(\"Hello World!\"), VerticalAlignment.Bottom).Height(15);\n\n            // When\n            console.Write(align);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/BarChartTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/BarChart\")]\npublic sealed class BarChartTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public async Task Should_Render_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new BarChart()\n            .Width(60)\n            .Label(\"Number of fruits\")\n            .AddItem(\"Apple\", 12)\n            .AddItem(\"Orange\", 54)\n            .AddItem(\"Banana\", 33));\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Zero_Value\")]\n    public async Task Should_Render_Correctly_2()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new BarChart()\n            .Width(60)\n            .Label(\"Number of fruits\")\n            .AddItem(\"Apple\", 0)\n            .AddItem(\"Orange\", 54)\n            .AddItem(\"Banana\", 33));\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Fixed_Max_Value\")]\n    public async Task Should_Render_Correctly_3()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new BarChart()\n            .Width(60)\n            .WithMaxValue(100)\n            .Label(\"Number of fruits\")\n            .AddItem(\"Apple\", 12)\n            .AddItem(\"Orange\", 54)\n            .AddItem(\"Banana\", 33));\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/BreakdownChartTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/BreakdownChart\")]\npublic sealed class BreakdownChartTests\n{\n    [Fact]\n    [Expectation(\"Default\")]\n    public async Task Should_Render_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart();\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Width\")]\n    public async Task Should_Render_With_Specific_Width()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart().Width(60);\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"TagFormat\")]\n    public async Task Should_Render_Correctly_With_Specific_Value_Formatter()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart()\n            .Width(60)\n            .Culture(\"sv-SE\")\n            .UseValueFormatter((v, c) => string.Format(c, \"{0}%\", v));\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"HideTags\")]\n    public async Task Should_Render_Correctly_Without_Tags()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart().Width(60).HideTags();\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"HideTagValues\")]\n    public async Task Should_Render_Correctly_Without_Tag_Values()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart().Width(60).HideTagValues();\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Culture\")]\n    public async Task Should_Render_Correctly_With_Specific_Culture()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart().Width(60).Culture(\"sv-SE\");\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"FullSize\")]\n    public async Task Should_Render_FullSize_Mode_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var chart = Fixture.GetChart().Width(60).FullSize();\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Ansi\")]\n    public async Task Should_Render_Correct_Ansi()\n    {\n        // Given\n        var console = new TestConsole().EmitAnsiSequences();\n        var chart = Fixture.GetChart().Width(60).FullSize();\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"ValueColor\")]\n    public async Task Should_Render_Correct_ValueColor()\n    {\n        // Given\n        var console = new TestConsole().EmitAnsiSequences();\n        var chart = Fixture.GetChart().Width(60).WithValueColor(Color.Red);\n\n        // When\n        console.Write(chart);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    public static class Fixture\n    {\n        public static BreakdownChart GetChart()\n        {\n            return new BreakdownChart()\n                .AddItem(\"SCSS\", 37, Color.Red)\n                .AddItem(\"HTML\", 28.3, Color.Blue)\n                .AddItem(\"C#\", 22.6, Color.Green)\n                .AddItem(\"JavaScript\", 6, Color.Yellow)\n                .AddItem(\"Ruby\", 6, Color.LightGreen)\n                .AddItem(\"Shell\", 0.1, Color.Aqua);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/CalendarTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Calendar\")]\npublic sealed class CalendarTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Calendar_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var calendar = new Calendar(2020, 10)\n            .AddCalendarEvent(new DateTime(2020, 9, 1))\n            .AddCalendarEvent(new DateTime(2020, 10, 3))\n            .AddCalendarEvent(new DateTime(2020, 10, 12));\n\n        // When\n        console.Write(calendar);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Centered\")]\n    public Task Should_Center_Calendar_Correctly_Using_Aligner()\n    {\n        // Given\n        var console = new TestConsole();\n        var calendar = new Align(\n            new Calendar(2020, 10)\n                .AddCalendarEvent(new DateTime(2020, 9, 1))\n                .AddCalendarEvent(new DateTime(2020, 10, 3))\n                .AddCalendarEvent(new DateTime(2020, 10, 12)),\n            HorizontalAlignment.Center);\n\n        // When\n        console.Write(calendar);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"LeftAligned\")]\n    public Task Should_Left_Align_Calendar_By_Default()\n    {\n        // Given\n        var console = new TestConsole();\n        var calendar = new Calendar(2020, 10)\n            .AddCalendarEvent(new DateTime(2020, 9, 1))\n            .AddCalendarEvent(new DateTime(2020, 10, 3))\n            .AddCalendarEvent(new DateTime(2020, 10, 12));\n\n        // When\n        console.Write(calendar);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"RightAligned\")]\n    public Task Should_Right_Align_Calendar_Correctly_Using_Aligner()\n    {\n        // Given\n        var console = new TestConsole();\n        var calendar = new Align(\n            new Calendar(2020, 10)\n                .AddCalendarEvent(new DateTime(2020, 9, 1))\n                .AddCalendarEvent(new DateTime(2020, 10, 3))\n                .AddCalendarEvent(new DateTime(2020, 10, 12)),\n            HorizontalAlignment.Right);\n\n        // When\n        console.Write(calendar);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Culture\")]\n    public Task Should_Render_Calendar_Correctly_For_Specific_Culture()\n    {\n        // Given\n        var console = new TestConsole();\n        var calendar = new Calendar(2020, 10, 15)\n            .Culture(\"de-DE\")\n            .AddCalendarEvent(new DateTime(2020, 9, 1))\n            .AddCalendarEvent(new DateTime(2020, 10, 3))\n            .AddCalendarEvent(new DateTime(2020, 10, 12));\n\n        // When\n        console.Write(calendar);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/CanvasTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Canvas\")]\npublic class CanvasTests\n{\n    public sealed class TheConstructor\n    {\n        [Fact]\n        public void Should_Throw_If_Width_Is_Less_Than_Zero()\n        {\n            // Given, When\n            var result = Record.Exception(() => new Canvas(0, 1));\n\n            // Then\n            result.ShouldBeOfType<ArgumentException>()\n                .And(ex => ex.ParamName.ShouldBe(\"width\"));\n        }\n\n        [Fact]\n        public void Should_Throw_If_Height_Is_Less_Than_Zero()\n        {\n            // Given, When\n            var result = Record.Exception(() => new Canvas(1, 0));\n\n            // Then\n            result.ShouldBeOfType<ArgumentException>()\n                .And(ex => ex.ParamName.ShouldBe(\"height\"));\n        }\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    [Expectation(\"Render\")]\n    public async Task Should_Render_Canvas_Correctly(bool supportsUnicode)\n    {\n        // Given\n        var console = new TestConsole()\n            .Colors(ColorSystem.Standard)\n            .SupportsUnicode(supportsUnicode)\n            .EmitAnsiSequences();\n\n        var canvas = new Canvas(width: 5, height: 5);\n        canvas.SetPixel(0, 0, Color.Red);\n        canvas.SetPixel(4, 0, Color.Green);\n        canvas.SetPixel(0, 4, Color.Blue);\n        canvas.SetPixel(4, 4, Color.Yellow);\n\n        // When\n        console.Write(canvas);\n\n        // Then\n        await Verifier\n            .Verify(console.Output)\n            .UseMethodName(supportsUnicode ? \"Unicode\" : \"NonUnicode\");\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    [Expectation(\"Render_Nested\")]\n    public async Task Simple_Measure(bool supportsUnicode)\n    {\n        // Given\n        var console = new TestConsole()\n            .Colors(ColorSystem.Standard)\n            .SupportsUnicode(supportsUnicode)\n            .EmitAnsiSequences();\n\n        var panel = new Panel(new Canvas(width: 2, height: 2)\n            .SetPixel(0, 0, Color.Aqua)\n            .SetPixel(1, 1, Color.Grey));\n\n        // When\n        console.Write(panel);\n\n        // Then\n        await Verifier\n            .Verify(console.Output)\n            .UseMethodName(supportsUnicode ? \"Unicode\" : \"NonUnicode\");\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    [Expectation(\"Render_NarrowTerminal\")]\n    public async Task Should_Scale_Down_Canvas_Is_Bigger_Than_Terminal(bool supportsUnicode)\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(10)\n            .Colors(ColorSystem.Standard)\n            .SupportsUnicode(supportsUnicode)\n            .EmitAnsiSequences();\n\n        var canvas = new Canvas(width: 20, height: 10);\n        canvas.SetPixel(0, 0, Color.Aqua);\n        canvas.SetPixel(19, 9, Color.Grey);\n\n        // When\n        console.Write(canvas);\n\n        // Then\n        await Verifier\n            .Verify(console.Output)\n            .UseMethodName(supportsUnicode ? \"Unicode\" : \"NonUnicode\");\n    }\n\n    [Theory]\n    [InlineData(true)]\n    [InlineData(false)]\n    [Expectation(\"Render_MaxWidth\")]\n    public async Task Should_Scale_Down_Canvas_If_MaxWidth_Is_Set(bool supportsUnicode)\n    {\n        // Given\n        var console = new TestConsole()\n            .Colors(ColorSystem.Standard)\n            .SupportsUnicode(supportsUnicode)\n            .EmitAnsiSequences();\n\n        var canvas = new Canvas(width: 20, height: 10)\n        {\n            MaxWidth = 10\n        };\n        canvas.SetPixel(0, 0, Color.Aqua);\n        canvas.SetPixel(19, 9, Color.Aqua);\n\n        // When\n        console.Write(canvas);\n\n        // Then\n        await Verifier\n            .Verify(console.Output)\n            .UseMethodName(supportsUnicode ? \"Unicode\" : \"NonUnicode\");\n    }\n\n    [Theory]\n    [InlineData(true, 5)]\n    [InlineData(false, 10)]\n    public void Should_Not_Render_Canvas_If_Canvas_Cannot_Be_Scaled_Down(\n        bool supportsUnicode, int consoleWidth)\n    {\n        // Given\n        var console = new TestConsole()\n            .Width(consoleWidth)\n            .Colors(ColorSystem.Standard)\n            .SupportsUnicode(supportsUnicode)\n            .EmitAnsiSequences();\n\n        var canvas = new Canvas(width: 20, height: 2);\n        canvas.SetPixel(0, 0, Color.Aqua);\n        canvas.SetPixel(19, 1, Color.Grey);\n\n        // When\n        console.Write(canvas);\n\n        // Then\n        console.Output.ShouldBeEmpty();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/ColumnsTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Columns\")]\npublic sealed class ColumnsTests\n{\n    private sealed class User\n    {\n        public required string Name { get; init; }\n        public required string Country { get; init; }\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Columns_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(61);\n        var users = new[]\n        {\n            new User { Name = \"Savannah Thompson\", Country = \"Australia\" },\n            new User { Name = \"Sophie Ramos\", Country = \"United States\" },\n            new User { Name = \"Katrin Goldberg\", Country = \"Germany\" },\n        };\n\n        var cards = new List<Panel>();\n        foreach (var user in users)\n        {\n            cards.Add(\n                new Panel($\"[b]{user.Name}[/]\\n[yellow]{user.Country}[/]\")\n                    .RoundedBorder().Expand());\n        }\n\n        // When\n        console.Write(new Columns(cards));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/FigletTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Figlet\")]\npublic sealed class FigletTests\n{\n    [Theory]\n    [InlineData(\"starwars.flf\")]\n    [InlineData(\"poison.flf\")]\n    [Expectation(\"Load_Stream\")]\n    public async Task Should_Load_Font_From_Stream(string fontfile)\n    {\n        // Given\n        var console = new TestConsole().Width(180);\n        var font = FigletFont.Load(EmbeddedResourceReader.LoadResourceStream($\"Spectre.Console.Tests/Data/{fontfile}\"));\n        var text = new FigletText(font, \"Patrik was here\");\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output)\n            .UseParameters(fontfile);\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public async Task Should_Render_Text_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(70);\n        var text = new FigletText(FigletFont.Default, \"Patrik was here\");\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Wrapped\")]\n    public async Task Should_Render_Wrapped_Text_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(70);\n        var text = new FigletText(FigletFont.Default, \"Spectre.Console\");\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_LeftAligned\")]\n    public async Task Should_Render_Left_Aligned_Text_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(120);\n        var text = new FigletText(FigletFont.Default, \"Spectre.Console\")\n            .Justify(Justify.Left);\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Centered\")]\n    public async Task Should_Render_Centered_Text_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(120);\n        var text = new FigletText(FigletFont.Default, \"Spectre.Console\")\n            .Justify(Justify.Center);\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_RightAligned\")]\n    public async Task Should_Render_Right_Aligned_Text_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(120);\n        var text = new FigletText(FigletFont.Default, \"Spectre.Console\")\n            .Justify(Justify.Right);\n\n        // When\n        console.Write(text);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/GridTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Grid\")]\npublic sealed class GridTests\n{\n    public sealed class TheAddColumnMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Rows_Are_Not_Empty()\n        {\n            // Given\n            var grid = new Grid();\n            grid.AddColumn();\n            grid.AddRow(\"Hello World!\");\n\n            // When\n            var result = Record.Exception(() => grid.AddColumn());\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Cannot add new columns to grid with existing rows.\");\n        }\n    }\n\n    public sealed class TheAddRowMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Rows_Are_Null()\n        {\n            // Given\n            var grid = new Grid();\n\n            // When\n            var result = Record.Exception(() => grid.AddRow(null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"columns\");\n        }\n\n        [Fact]\n        public void Should_Add_Empty_Items_If_User_Provides_Less_Row_Items_Than_Columns()\n        {\n            // Given\n            var grid = new Grid();\n            grid.AddColumn();\n            grid.AddColumn();\n\n            // When\n            grid.AddRow(\"Foo\");\n\n            // Then\n            grid.Rows.Count.ShouldBe(1);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Row_Columns_Are_Greater_Than_Number_Of_Columns()\n        {\n            // Given\n            var grid = new Grid();\n            grid.AddColumn();\n\n            // When\n            var result = Record.Exception(() => grid.AddRow(\"Foo\", \"Bar\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"The number of row columns are greater than the number of grid columns.\");\n        }\n    }\n\n    [ExpectationPath(\"AddEmptyRow\")]\n    public sealed class TheAddEmptyRowMethod\n    {\n        [Fact]\n        [Expectation(\"Render\")]\n        public Task Should_Add_Empty_Row()\n        {\n            // Given\n            var console = new TestConsole();\n            var grid = new Grid();\n            grid.AddColumns(2);\n            grid.AddRow(\"Foo\", \"Bar\");\n            grid.AddEmptyRow();\n            grid.AddRow(\"Qux\", \"Corgi\");\n            grid.AddEmptyRow();\n\n            // When\n            console.Write(grid);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Grid_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var grid = new Grid();\n        grid.AddColumn();\n        grid.AddColumn();\n        grid.AddColumn();\n        grid.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        grid.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_2\")]\n    public Task Should_Render_Grid_Correctly_2()\n    {\n        var console = new TestConsole();\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { NoWrap = true });\n        grid.AddColumn(new GridColumn { Padding = new Padding(2, 0, 0, 0) });\n        grid.AddRow(\"[bold]Options[/]\", string.Empty);\n        grid.AddRow(\"  [blue]-h[/], [blue]--help[/]\", \"Show command line help.\");\n        grid.AddRow(\"  [blue]-c[/], [blue]--configuration[/]\", \"The configuration to run for.\\nThe default for most projects is [green]Debug[/].\");\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Alignment\")]\n    public Task Should_Render_Grid_Column_Alignment_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Alignment = Justify.Right });\n        grid.AddColumn(new GridColumn { Alignment = Justify.Center });\n        grid.AddColumn(new GridColumn { Alignment = Justify.Left });\n        grid.AddRow(\"Foo\", \"Bar\", \"Baz\");\n        grid.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        grid.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Padding\")]\n    public Task Should_Use_Default_Padding()\n    {\n        // Given\n        var console = new TestConsole();\n        var grid = new Grid();\n        grid.AddColumns(3);\n        grid.AddRow(\"Foo\", \"Bar\", \"Baz\");\n        grid.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        grid.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_ExplicitPadding\")]\n    public Task Should_Render_Explicit_Grid_Column_Padding_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Padding = new Padding(3, 0, 0, 0) });\n        grid.AddColumn(new GridColumn { Padding = new Padding(0, 0, 0, 0) });\n        grid.AddColumn(new GridColumn { Padding = new Padding(0, 0, 3, 0) });\n        grid.AddRow(\"Foo\", \"Bar\", \"Baz\");\n        grid.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        grid.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Crop\")]\n    public Task Should_Respect_Cell_Content_Overflow_Crop()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Crop),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Ellipsis\")]\n    public Task Should_Respect_Cell_Content_Overflow_Ellipsis()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Ellipsis),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Fold\")]\n    public Task Should_Respect_Cell_Content_Overflow_Fold()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Fold),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Markup_Overflow\")]\n    public Task Should_Respect_Markup_Content_Overflow_In_Cell()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Width = 18 });\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddRow(\n            new Markup(\"[yellow]foo[/] [red]pneumonoultramicroscopicsilicovolcanoconiosis[/] [blue]bar[/]\").Overflow(Overflow.Ellipsis),\n            new Markup(\"[green]Short text[/]\"));\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_With_NoWrap\")]\n    public Task Should_Respect_Cell_Content_Overflow_With_NoWrap_Column()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn { Width = 15, NoWrap = true });\n        grid.AddColumn(new GridColumn { Width = 15 });\n        grid.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Ellipsis),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(grid);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/JsonTextTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Json\")]\npublic sealed class JsonTextTests\n{\n    [Fact]\n    [Expectation(\"Render_Json\")]\n    public Task Should_Render_Json()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(80, 15));\n        var json = EmbeddedResourceReader\n            .LoadResourceStream(\"Spectre.Console.Tests/Data/example.json\")\n            .ReadText();\n\n        // When\n        console.Write(new Panel(new JsonText(json)).Header(\"Some JSON\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Compact_Json\")]\n    public Task Should_Render_Compact_Json()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(80, 15));\n        var json = EmbeddedResourceReader\n            .LoadResourceStream(\"Spectre.Console.Tests/Data/example.json\")\n            .ReadText();\n\n        // When\n        console.Write(\n            new Panel(\n                    new JsonText(json)\n                        .Indentation(\" \"))\n                .Header(\"Some JSON\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/LayoutTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Layout\")]\npublic sealed class LayoutTests\n{\n    [Fact]\n    [Expectation(\"Render_Empty_Layout\")]\n    public Task Should_Render_Empty_Layout()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout();\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout\")]\n    public Task Should_Render_Empty_Layout_With_Renderable()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout().Update(new Panel(\"Hello\").DoubleBorder().Expand());\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Columns\")]\n    public Task Should_Render_Layout_With_Columns()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitColumns(\n                new Layout(\"Left\"),\n                new Layout(\"Right\"));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Rows\")]\n    public Task Should_Render_Layout_With_Rows()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitRows(\n                new Layout(\"Top\"),\n                new Layout(\"Bottom\"));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Nested_Columns\")]\n    public Task Should_Render_Layout_With_Nested_Columns()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitColumns(\n                new Layout(\"Left\")\n                    .SplitColumns(\n                        new Layout(\"L1\"),\n                        new Layout(\"L2\")),\n                new Layout(\"Right\")\n                    .SplitColumns(\n                        new Layout(\"R1\"),\n                        new Layout(\"R2\")));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Nested_Rows\")]\n    public Task Should_Render_Layout_With_Nested_Rows()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitRows(\n                new Layout(\"Top\")\n                    .SplitRows(\n                        new Layout(\"T1\"),\n                        new Layout(\"T2\")),\n                new Layout(\"Bottom\")\n                    .SplitRows(\n                        new Layout(\"B1\"),\n                        new Layout(\"B2\")));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Nested_Rows_And_Columns\")]\n    public Task Should_Render_Layout_With_Nested_Rows_And_Columns()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitRows(\n                new Layout(\"Top\")\n                    .SplitRows(\n                        new Layout(\"T1\")\n                            .SplitColumns(\n                                new Layout(\"A\"),\n                                new Layout(\"B\")),\n                        new Layout(\"T2\")\n                            .SplitColumns(\n                                new Layout(\"C\"),\n                                new Layout(\"D\"))),\n                new Layout(\"Bottom\")\n                    .SplitRows(\n                        new Layout(\"B1\")\n                            .SplitColumns(\n                                new Layout(\"E\"),\n                                new Layout(\"F\")),\n                        new Layout(\"B2\")\n                            .SplitColumns(\n                                    new Layout(\"G\"),\n                                    new Layout(\"H\"))));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Theory]\n    [InlineData(17, \"17\")]\n    [InlineData(20, \"20\")]\n    [InlineData(23, \"23\")]\n    [InlineData(28, \"28\")]\n    [InlineData(31, \"31\")]\n    [Expectation(\"Render_Layout_With_Nested_Three_Rows_In_One_Column\")]\n    public Task Should_Render_Layout_With_Three_And_One_Columns(int height, string expectationPrefix)\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, height));\n\n        // Layout with 2 columns, left column has 3 rows and right column has 1 row\n        var layout = new Layout(new Panel(\"Hello, World!\") { Expand = true })\n            .SplitColumns(\n                new Layout(new Panel(\"Hello, World!\") { Expand = true })\n                    .SplitRows(\n                        new Layout(new Panel(\"Hello, World!\") { Expand = true }),\n                        new Layout(new Panel(\"Hello, World!\") { Expand = true }),\n                        new Layout(new Panel(\"Hello, World!\") { Expand = true })),\n                new Layout(new Panel(\"Hello, World!\") { Expand = true }));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output).UseTextForParameters(expectationPrefix);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_Without_Invisible_Children\")]\n    public Task Should_Render_Layout_Without_Invisible_Children()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitRows(\n                new Layout(\"Top\")\n                    .SplitRows(\n                        new Layout(\"T1\")\n                            .SplitColumns(\n                                new Layout(\"A\").Invisible(),\n                                new Layout(\"B\")),\n                        new Layout(\"T2\")\n                            .SplitColumns(\n                                new Layout(\"C\"),\n                                new Layout(\"D\"))),\n                new Layout(\"Bottom\")\n                    .SplitRows(\n                        new Layout(\"B1\")\n                            .SplitColumns(\n                                new Layout(\"E\"),\n                                new Layout(\"F\")),\n                        new Layout(\"B2\")\n                            .SplitColumns(\n                                    new Layout(\"G\"),\n                                    new Layout(\"H\").Invisible())));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Respect_To_Ratio\")]\n    public Task Should_Render_Layout_With_Respect_To_Ratio()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitColumns(\n                new Layout(\"Left\").Ratio(3),\n                new Layout(\"Right\"));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Respect_To_Size\")]\n    public Task Should_Render_Layout_With_Respect_To_Size()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitColumns(\n                new Layout(\"Left\").Size(28),\n                new Layout(\"Right\"));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Layout_With_Respect_To_Minimum_Size\")]\n    public Task Should_Render_Layout_With_Respect_To_Minimum_Size()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitColumns(\n                new Layout(\"Left\").Size(28).MinimumSize(30),\n                new Layout(\"Right\"));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Fallback_Layout\")]\n    public Task Should_Fall_Back_To_Parent_Layout_If_All_Children_Are_Invisible()\n    {\n        // Given\n        var console = new TestConsole().Size(new Size(40, 15));\n        var layout = new Layout()\n            .SplitRows(\n                new Layout(\"T1\").SplitColumns(\n                    new Layout(\"A\").Invisible(),\n                    new Layout(\"B\").Invisible()),\n                new Layout(\"T2\").SplitColumns(\n                    new Layout(\"C\").Invisible(),\n                    new Layout(\"D\").Invisible()));\n\n        // When\n        console.Write(layout);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/MarkupTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class MarkupTests\n{\n    public sealed class TheLengthProperty\n    {\n        [Theory]\n        [InlineData(\"Hello\", 5)]\n        [InlineData(\"Hello\\nWorld\", 11)]\n        [InlineData(\"[yellow]Hello[/]\", 5)]\n        public void Should_Return_The_Number_Of_Characters(string input, int expected)\n        {\n            // Given\n            var markup = new Markup(input);\n\n            // When\n            var result = markup.Length;\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheLinesProperty\n    {\n        [Theory]\n        [InlineData(\"Hello\", 1)]\n        [InlineData(\"Hello\\nWorld\", 2)]\n        [InlineData(\"[yellow]Hello[/]\\nWorld\", 2)]\n        public void Should_Return_The_Number_Of_Lines(string input, int expected)\n        {\n            // Given\n            var markup = new Markup(input);\n\n            // When\n            var result = markup.Lines;\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheEscapeMethod\n    {\n        [Theory]\n        [InlineData(\"Hello World\", \"Hello World\")]\n        [InlineData(\"Hello World [\", \"Hello World [[\")]\n        [InlineData(\"Hello World ]\", \"Hello World ]]\")]\n        [InlineData(\"Hello [World]\", \"Hello [[World]]\")]\n        [InlineData(\"Hello [[World]]\", \"Hello [[[[World]]]]\")]\n        public void Should_Escape_Markup_As_Expected(string input, string expected)\n        {\n            // Given, When\n            var result = Markup.Escape(input);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheRemoveMethod\n    {\n        [Theory]\n        [InlineData(\"Hello World\", \"Hello World\")]\n        [InlineData(\"Hello [blue]World\", \"Hello World\")]\n        [InlineData(\"Hello [blue]World[/]\", \"Hello World\")]\n        public void Should_Remove_Markup_From_Text(string input, string expected)\n        {\n            // Given, When\n            var result = Markup.Remove(input);\n\n            // Then\n            result.ShouldBe(expected);\n        }\n\n        [Theory]\n        [InlineData(\"Hello\", \"World\", \"\\x1B[38;5;11mHello\\x1B[0m \\x1B[38;5;9mWorld\\x1B[0m 2021-02-03\")]\n        [InlineData(\"Hello\", \"World [\", \"\\x1B[38;5;11mHello\\x1B[0m \\x1B[38;5;9mWorld [\\x1B[0m 2021-02-03\")]\n        [InlineData(\"Hello\", \"World ]\", \"\\x1B[38;5;11mHello\\x1B[0m \\x1B[38;5;9mWorld ]\\x1B[0m 2021-02-03\")]\n        [InlineData(\"[Hello]\", \"World\", \"\\x1B[38;5;11m[Hello]\\x1B[0m \\x1B[38;5;9mWorld\\x1B[0m 2021-02-03\")]\n        [InlineData(\"[[Hello]]\", \"[World]\", \"\\x1B[38;5;11m[[Hello]]\\x1B[0m \\x1B[38;5;9m[World]\\x1B[0m 2021-02-03\")]\n        public void Should_Escape_Markup_When_Using_MarkupInterpolated(string input1, string input2, string expected)\n        {\n            // Given\n            var console = new TestConsole().EmitAnsiSequences();\n            var date = new DateTime(2021, 2, 3);\n\n            // When\n            console.MarkupInterpolated($\"[yellow]{input1}[/] [red]{input2}[/] {date:yyyy-MM-dd}\");\n\n            // Then\n            console.Output.ShouldBe(expected);\n        }\n    }\n\n    [Theory]\n    [InlineData(\"Hello [[ World ]\")]\n    [InlineData(\"Hello [[ World ] !\")]\n    public void Should_Throw_If_Closing_Tag_Is_Not_Properly_Escaped(string input)\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        var result = Record.Exception(() => new Markup(input));\n\n        // Then\n        result.ShouldNotBeNull();\n        result.ShouldBeOfType<InvalidOperationException>();\n        result.Message.ShouldBe(\"Encountered unescaped ']' token at position 16\");\n    }\n\n    [Fact]\n    public void Should_Escape_Markup_Blocks_As_Expected()\n    {\n        // Given\n        var console = new TestConsole();\n        var markup = new Markup(\"Hello [[ World ]] !\");\n\n        // When\n        console.Write(markup);\n\n        // Then\n        console.Output.ShouldBe(\"Hello [ World ] !\");\n    }\n\n    [Theory]\n    [InlineData(\"Hello [link=http://example.com]example.com[/]\", \"Hello example.com\")]\n    [InlineData(\"Hello [link=http://example.com]http://example.com[/]\", \"Hello http://example.com\")]\n    public void Should_Render_Links_As_Expected(string input, string output)\n    {\n        // Given\n        var console = new TestConsole();\n        var markup = new Markup(input);\n\n        // When\n        console.Write(markup);\n\n        // Then\n        console.Output.ShouldBe(output);\n    }\n\n    [Fact]\n    public void Should_Not_Fail_With_Brackets_On_Calls_Without_Args()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.MarkupLine(\"{\");\n\n        // Then\n        console.Output.NormalizeLineEndings()\n            .ShouldBe(\"{\\n\");\n    }\n\n    [Fact]\n    public void Can_Use_Interpolated_Markup_As_IRenderable()\n    {\n        // Given\n        var console = new TestConsole();\n        const string Num = \"[value[\";\n        var table = new Table().AddColumns(\"First Column\");\n        table.AddRow(Markup.FromInterpolated($\"Result: {Num}\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        console.Output.NormalizeLineEndings().ShouldBe(@\"┌─────────────────┐\n│ First Column    │\n├─────────────────┤\n│ Result: [value[ │\n└─────────────────┘\n\".NormalizeLineEndings());\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/PadderTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Padder\")]\npublic sealed class PadderTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Padded_Object_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table();\n        table.AddColumn(\"Foo\");\n        table.AddColumn(\"Bar\");\n        table.AddRow(\"Baz\", \"Qux\");\n        table.AddRow(\"Corgi\", \"Waldo\");\n\n        // When\n        console.Write(new Padder(table).Padding(1, 2, 3, 4));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Expanded\")]\n    public Task Should_Render_Expanded_Padded_Object_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table();\n        table.AddColumn(\"Foo\");\n        table.AddColumn(\"Bar\");\n        table.AddRow(\"Baz\", \"Qux\");\n        table.AddRow(\"Corgi\", \"Waldo\");\n\n        // When\n        console.Write(new Padder(table)\n            .Padding(1, 2, 3, 4)\n            .Expand());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Nested\")]\n    public Task Should_Render_Padded_Object_Correctly_When_Nested_Within_Other_Object()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table();\n        table.AddColumn(\"Foo\");\n        table.AddColumn(\"Bar\", c => c.PadLeft(0).PadRight(0));\n        table.AddRow(\"Baz\", \"Qux\");\n        table.AddRow(new Text(\"Corgi\"), new Padder(new Panel(\"Waldo\"))\n            .Padding(2, 1));\n\n        // When\n        console.Write(new Padder(table)\n            .Padding(1, 2, 3, 4)\n            .Expand());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/PanelTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Panel\")]\npublic sealed class PanelTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\")));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_ZeroPadding\")]\n    public Task Should_Render_Panel_With_Padding_Set_To_Zero()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\"))\n        {\n            Padding = new Padding(0, 0, 0, 0),\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Padding\")]\n    public Task Should_Render_Panel_With_Padding()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\"))\n        {\n            Padding = new Padding(3, 1, 5, 2),\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header\")]\n    public Task Should_Render_Panel_With_Header()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(\"Hello World\")\n        {\n            Header = new PanelHeader(\"Greeting\"),\n            Expand = true,\n            Padding = new Padding(2, 0, 2, 0),\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_LeftAligned\")]\n    public Task Should_Render_Panel_With_Left_Aligned_Header()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(\"Hello World\")\n        {\n            Header = new PanelHeader(\"Greeting\").LeftJustified(),\n            Expand = true,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_Centered\")]\n    public Task Should_Render_Panel_With_Centered_Header()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(\"Hello World\")\n        {\n            Header = new PanelHeader(\"Greeting\").Centered(),\n            Expand = true,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_RightAligned\")]\n    public Task Should_Render_Panel_With_Right_Aligned_Header()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(\"Hello World\")\n        {\n            Header = new PanelHeader(\"Greeting\").RightJustified(),\n            Expand = true,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_Collapse\")]\n    public Task Should_Collapse_Header_If_It_Will_Not_Fit()\n    {\n        // Given\n        var console = new TestConsole().Width(10);\n\n        // When\n        console.Write(new Panel(\"Hello World\")\n        {\n            Header = new PanelHeader(\"Greeting\"),\n            Expand = true,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Unicode\")]\n    public Task Should_Render_Panel_With_Unicode_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\" \\n💩\\n \")));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Multiline\")]\n    public Task Should_Render_Panel_With_Multiple_Lines()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\\nFoo Bar\")));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_LineEndings\")]\n    public Task Should_Preserve_Explicit_Line_Ending()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Panel(\n            new Markup(\"I heard [underline on blue]you[/] like 📦\\n\\n\\n\\nSo I put a 📦 in a 📦\"));\n\n        // When\n        console.Write(text);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Expand\")]\n    public Task Should_Expand_Panel_If_Enabled()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\"))\n        {\n            Expand = true,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Width\")]\n    public Task Should_Render_To_Specified_Width()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\"))\n        {\n            Width = 25,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Width_MaxWidth\")]\n    public Task Should_Use_Max_Width_If_Specified_Width_Is_Too_Large()\n    {\n        // Given\n        var console = new TestConsole();\n        console.Profile.Width = 20;\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\"))\n        {\n            Width = 25,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Height\")]\n    public Task Should_Render_To_Specified_Height()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Text(\"Hello World\\nHello Hello Hello\"))\n        {\n            Height = 25,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Width_Height\")]\n    public Task Should_Render_To_Specified_Width_And_Height()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(\"Hello World\\nHello Hello Hello\")\n        {\n            Width = 50,\n            Height = 25,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Child_RightAligned\")]\n    public Task Should_Justify_Child_To_Right_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(25);\n\n        // When\n        console.Write(\n            new Panel(new Text(\"Hello World\").RightJustified())\n            {\n                Expand = true,\n            });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Child_Centered\")]\n    public Task Should_Center_Child_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(25);\n\n        // When\n        console.Write(\n            new Panel(new Text(\"Hello World\").Centered())\n            {\n                Expand = true,\n            });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Child_Panel\")]\n    public Task Should_Render_Panel_Inside_Panel_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Panel(new Panel(new Text(\"Hello World\"))));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Wrap\")]\n    public Task Should_Wrap_Content_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(84);\n        var rows = new List<IRenderable>();\n        var grid = new Grid();\n        grid.AddColumn(new GridColumn().PadLeft(2).PadRight(0));\n        grid.AddColumn(new GridColumn().PadLeft(1).PadRight(0));\n        grid.AddRow(\"at\", \"[grey]System.Runtime.CompilerServices.TaskAwaiter.[/][yellow]HandleNonSuccessAndDebuggerNotification[/]([blue]Task[/] task)\");\n        rows.Add(grid);\n\n        var panel = new Panel(grid)\n            .Expand().RoundedBorder()\n            .BorderStyle(new Style().Foreground(Color.Grey))\n            .Header(\"[grey]Short paths[/]\");\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_CJK\")]\n    public Task Should_Wrap_Table_With_CJK_Tables_In_Panel_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        var table = new Table();\n        table.AddColumn(\"测试\");\n        table.AddRow(\"测试\");\n        var panel = new Panel(table);\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Text_Overflow_Crop\")]\n    public Task Should_Respect_Text_Overflow_Crop_In_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(Overflow.Crop);\n        var panel = new Panel(text)\n        {\n            Width = 20,\n        };\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Text_Overflow_Ellipsis\")]\n    public Task Should_Respect_Text_Overflow_Ellipsis_In_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(Overflow.Ellipsis);\n        var panel = new Panel(text)\n        {\n            Width = 20,\n        };\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Text_Overflow_Fold\")]\n    public Task Should_Respect_Text_Overflow_Fold_In_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(Overflow.Fold);\n        var panel = new Panel(text)\n        {\n            Width = 20,\n        };\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Markup_Overflow_Ellipsis\")]\n    public Task Should_Respect_Markup_Overflow_Ellipsis_In_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n        var markup = new Markup(\"[yellow]foo[/] [red]pneumonoultramicroscopicsilicovolcanoconiosis[/] [blue]bar qux[/]\")\n            .Overflow(Overflow.Ellipsis);\n        var panel = new Panel(markup)\n        {\n            Width = 20,\n        };\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Text_Overflow_With_Padding\")]\n    public Task Should_Respect_Text_Overflow_In_Panel_With_Padding()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(Overflow.Ellipsis);\n        var panel = new Panel(text)\n        {\n            Width = 25,\n            Padding = new Padding(2, 0, 2, 0),\n        };\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Nested_Panel_With_Overflow\")]\n    public Task Should_Respect_Text_Overflow_In_Nested_Panel()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(Overflow.Crop);\n        var innerPanel = new Panel(text)\n        {\n            Width = 15,\n        };\n        var outerPanel = new Panel(innerPanel)\n        {\n            Width = 25,\n        };\n\n        // When\n        console.Write(outerPanel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/ProgressBarTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/ProgressBar\")]\npublic class ProgressBarTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public async Task Should_Render_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        var bar = new ProgressBar()\n        {\n            Width = 60,\n            Value = 9000,\n            MaxValue = 9000,\n            ShowValue = true,\n        };\n\n        // When\n        console.Write(bar);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Formatted\")]\n    public async Task Should_Render_ValueFormatted()\n    {\n        // Given\n        var console = new TestConsole();\n\n        var bar = new ProgressBar()\n        {\n            Width = 60,\n            Value = 9000,\n            MaxValue = 9000,\n            ShowValue = true,\n            ValueFormatter = (value, _) => value.ToString(\"N0\", CultureInfo.InvariantCulture),\n        };\n\n        // When\n        console.Write(bar);\n\n        // Then\n        await Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/RowsTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Rows\")]\npublic sealed class RowsTests\n{\n    [Fact]\n    [Expectation(\"GH-1188-Rows\")]\n    [GitHubIssue(\"https://github.com/spectreconsole/spectre.console/issues/1188\")]\n    public Task Should_Render_Rows_In_Panel_Without_Breaking_Lines()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var rows = new Rows(\n            new IRenderable[]\n            {\n                new Text(\"1\"),\n                new Text(\"22\"),\n                new Text(\"333\"),\n            });\n        var panel = new Panel(rows);\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Rows()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var rows = new Rows(\n            new IRenderable[]\n            {\n                    new Markup(\"Hello\"),\n                    new Table()\n                        .AddColumns(\"Foo\", \"Bar\")\n                        .AddRow(\"Baz\", \"Qux\"),\n                    new Markup(\"World\"),\n            });\n\n        // When\n        console.Write(rows);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Nested\")]\n    public Task Should_Render_Rows_Correctly_Inside_Other_Widget()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table()\n            .AddColumns(\"Foo\", \"Bar\")\n            .AddRow(\"HELLO WORLD\")\n            .AddRow(\n            new Rows(new IRenderable[]\n            {\n                    new Markup(\"Hello\"),\n                    new Markup(\"World\"),\n            }), new Text(\"Qux\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Empty\")]\n    public Task Should_Not_Throw_Exception_On_Empty_Rows()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table()\n            .AddColumns(\"Foo\", \"Bar\")\n            .AddRow(\"HELLO WORLD\")\n            .AddRow(\n                new Rows(), new Text(\"Qux\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Expanded_And_Nested\")]\n    public Task Should_Render_Rows_Correctly_Inside_Other_Widget_When_Expanded()\n    {\n        // Given\n        var console = new TestConsole().Width(60);\n        var table = new Table()\n            .AddColumns(\"Foo\", \"Bar\")\n            .AddRow(\"HELLO WORLD\")\n            .AddRow(\n            new Rows(new IRenderable[]\n            {\n                    new Markup(\"Hello\"),\n                    new Markup(\"World\"),\n            }).Expand(), new Text(\"Qux\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/RuleTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Rule\")]\npublic sealed class RuleTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Default_Rule_Without_Title()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Border_NoHeader\")]\n    public Task Should_Render_Default_Rule_With_Specified_Border()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule().DoubleBorder());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Border_Header\")]\n    public Task Should_Render_With_Specified_Box()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"Hello World\").DoubleBorder());\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_DefaultAlignment\")]\n    public Task Should_Render_Default_Rule_With_Title_Centered_By_Default()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"Hello World\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_LeftAligned\")]\n    public Task Should_Render_Default_Rule_With_Title_Left_Aligned()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"Hello World\")\n        {\n            Justification = Justify.Left,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Header_RightAligned\")]\n    public Task Should_Render_Default_Rule_With_Title_Right_Aligned()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"Hello World\")\n        {\n            Justification = Justify.Right,\n        });\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Linebreaks\")]\n    public Task Should_Convert_Line_Breaks_In_Title_To_Spaces()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"Hello\\nWorld\\r\\n!\"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Truncate\")]\n    public Task Should_Truncate_Title()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new Rule(\"          Hello World    \"));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Theory]\n    [InlineData(1, \"Hello World Hello World Hello World Hello World Hello World\", \"─\")]\n    [InlineData(2, \"Hello World Hello World Hello World Hello World Hello World\", \"──\")]\n    [InlineData(3, \"Hello World Hello World Hello World Hello World Hello World\", \"───\")]\n    [InlineData(4, \"Hello World Hello World Hello World Hello World Hello World\", \"────\")]\n    [InlineData(5, \"Hello World Hello World Hello World Hello World Hello World\", \"─────\")]\n    [InlineData(6, \"Hello World Hello World Hello World Hello World Hello World\", \"──────\")]\n    [InlineData(7, \"Hello World Hello World Hello World Hello World Hello World\", \"───────\")]\n    [InlineData(8, \"Hello World Hello World Hello World Hello World Hello World\", \"── H… ──\")]\n    [InlineData(8, \"A\", \"── A ───\")]\n    [InlineData(8, \"AB\", \"── AB ──\")]\n    [InlineData(8, \"ABC\", \"── A… ──\")]\n    [InlineData(40, \"Hello World Hello World Hello World Hello World Hello World\", \"──── Hello World Hello World Hello… ────\")]\n    public void Should_Truncate_Too_Long_Title(int width, string input, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(width);\n\n        // When\n        console.Write(new Rule(input));\n\n        // Then\n        console.Lines.Count.ShouldBe(1);\n        console.Lines[0].ShouldBe(expected);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionExtensionsTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Table/Rows/Extensions\")]\npublic sealed class TableRowCollectionExtensionsTests\n{\n    public sealed class TheAddRowMethod\n    {\n        [Fact]\n        [Expectation(\"Add\", \"Renderables\")]\n        public Task Should_Add_Renderables()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddRow(new[] { new Text(\"1\"), new Text(\"1-2\") });\n            table.AddRow(new[] { new Text(\"2\"), new Text(\"2-2\") });\n            table.AddRow(new[] { new Text(\"3\"), new Text(\"3-2\") });\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Add\", \"Strings\")]\n        public Task Should_Add_Strings()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddRow(\"1\", \"1-2\");\n            table.AddRow(\"2\", \"2-2\");\n            table.AddRow(\"3\", \"3-2\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class TheInsertRowMethod\n    {\n        [Fact]\n        [Expectation(\"Insert\", \"Renderables\")]\n        public Task Should_Insert_Renderables()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddRow(new[] { new Text(\"1\"), new Text(\"1-2\") });\n            table.AddRow(new[] { new Text(\"2\"), new Text(\"2-2\") });\n\n            // When\n            table.InsertRow(1, new[] { new Text(\"3\"), new Text(\"3-2\") });\n\n            // Then\n            console.Write(table);\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Insert\", \"Strings\")]\n        public Task Should_Insert_Strings()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddRow(\"1\", \"1-2\");\n            table.AddRow(\"2\", \"2-2\");\n\n            // When\n            table.InsertRow(1, \"3\", \"3-2\");\n\n            // Then\n            console.Write(table);\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class TheRemoveRowMethod\n    {\n        [Fact]\n        [Expectation(\"Remove\")]\n        public Task Should_Remove_Row()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddRow(new[] { new Text(\"1\"), new Text(\"1-2\") });\n            table.AddRow(new[] { new Text(\"2\"), new Text(\"2-2\") });\n            table.AddRow(new[] { new Text(\"3\"), new Text(\"3-2\") });\n\n            // When\n            table.RemoveRow(1);\n\n            // Then\n            console.Write(table);\n            return Verifier.Verify(console.Output);\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/Table/TableRowCollectionTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Table/Rows\")]\npublic sealed class TableRowCollectionTests\n{\n    public sealed class TheAddMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Columns_Are_Null()\n        {\n            // Given\n            var table = new Table();\n\n            // When\n            var result = Record.Exception(() => table.Rows.Add(null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"columns\");\n        }\n\n        [Fact]\n        public void Should_Add_Row_To_Collection()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n\n            // When\n            table.Rows.Add([Text.Empty]);\n\n            // Then\n            table.Rows.Count.ShouldBe(1);\n        }\n\n        [Fact]\n        public void Should_Return_Index_Of_Added_Row()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([Text.Empty]);\n\n            // When\n            var result = table.Rows.Add([Text.Empty]);\n\n            // Then\n            result.ShouldBe(1);\n        }\n\n        [Fact]\n        [Expectation(\"Add\")]\n        public Task Should_Add_Item_At_Correct_Place()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\")]);\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class TheInsertMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Columns_Are_Null()\n        {\n            // Given\n            var table = new Table();\n\n            // When\n            var result = Record.Exception(() => table.Rows.Insert(0, null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"columns\");\n        }\n\n        [Fact]\n        public void Should_Insert_Row()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([Text.Empty]);\n\n            // When\n            table.Rows.Insert(0, [Text.Empty]);\n\n            // Then\n            table.Rows.Count.ShouldBe(2);\n        }\n\n        [Fact]\n        public void Should_Return_Index_Of_Inserted_Row()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n\n            // When\n            var result = table.Rows.Insert(1, [new Text(\"3\")]);\n\n            // Then\n            result.ShouldBe(1);\n        }\n\n        [Fact]\n        [Expectation(\"Insert\")]\n        public Task Should_Insert_Item_At_Correct_Place()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Insert(1, [new Text(\"3\")]);\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class TheRemoveMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Index_Is_Negative()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n\n            // When\n            var result = Record.Exception(() => table.Rows.RemoveAt(-1));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table row index cannot be negative.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Index_Is_Larger_Than_Number_Of_Rows()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\")]);\n\n            // When\n            var result = Record.Exception(() => table.Rows.RemoveAt(3));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table row index cannot exceed the number of rows in the table.\");\n        }\n\n        [Fact]\n        [Expectation(\"Remove\")]\n        public Task Should_Remove_Row()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\")]);\n            table.Rows.RemoveAt(1);\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    public sealed class TheClearMethod\n    {\n        [Fact]\n        public void Should_Remove_All_Rows()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\")]);\n            table.Rows.Clear();\n\n            // When\n            var result = table.Rows.Count;\n\n            // Then\n            result.ShouldBe(0);\n        }\n    }\n\n    public sealed class TheUpdateMethod\n    {\n        [Fact]\n        public Task Should_Update_Row_With_String()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n\n            table.UpdateCell(2, 2, \"5\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        public Task Should_Update_Row_With_Renderable()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n\n            table.UpdateCell(2, 2, new Markup(\"5\"));\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Index_Is_Larger_Than_Number_Of_Rows()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n            table.UpdateCell(2, 2, \"5\");\n\n            // When\n            var result = Record.Exception(() => table.UpdateCell(5, 2, \"5\"));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table row index cannot exceed the number of rows in the table.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Index_Is_Larger_Than_Number_Of_Columns()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n            table.UpdateCell(2, 2, \"5\");\n\n            // When\n            var result = Record.Exception(() => table.UpdateCell(2, 5, \"5\"));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table column index cannot exceed the number of rows in the table.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Index_Row_Is_Negative()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n            table.UpdateCell(2, 2, \"5\");\n\n            // When\n            var result = Record.Exception(() => table.UpdateCell(-1, 2, \"5\"));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table row index cannot be negative.\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Index_Column_Is_Negative()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumn(\"Column #1\");\n            table.AddColumn(\"Column #2\");\n            table.AddColumn(\"Column #3\");\n            table.Rows.Add([new Text(\"1\")]);\n            table.Rows.Add([new Text(\"2\")]);\n            table.Rows.Add([new Text(\"3\"), new Text(\"4\"), new Text(\"8\")]);\n            table.UpdateCell(2, 2, \"5\");\n\n            // When\n            var result = Record.Exception(() => table.UpdateCell(2, -1, \"5\"));\n\n            // Then\n            result.ShouldBeOfType<IndexOutOfRangeException>()\n                .Message.ShouldBe(\"Table column index cannot be negative.\");\n        }\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/Table/TableTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Table\")]\npublic sealed class TableTests\n{\n    public sealed class TheAddColumnMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Column_Is_Null()\n        {\n            // Given\n            var table = new Table();\n\n            // When\n            var result = Record.Exception(() => table.AddColumn((string)null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"column\");\n        }\n\n        [Fact]\n        public void Should_Throw_If_Rows_Are_Not_Empty()\n        {\n            // Given\n            var grid = new Table();\n            grid.AddColumn(\"Foo\");\n            grid.AddRow(\"Hello World\");\n\n            // When\n            var result = Record.Exception(() => grid.AddColumn(\"Bar\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>()\n                .Message.ShouldBe(\"Cannot add new columns to table with existing rows.\");\n        }\n    }\n\n    public sealed class TheAddColumnsMethod\n    {\n        [Fact]\n        public void Should_Throw_If_Columns_Are_Null()\n        {\n            // Given\n            var table = new Table();\n\n            // When\n            var result = Record.Exception(() => table.AddColumns((string[])null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"columns\");\n        }\n    }\n\n    public sealed class TheAddRowMethod\n    {\n        [Fact]\n        public void Should_Throw_If_String_Rows_Are_Null()\n        {\n            // Given\n            var table = new Table();\n\n            // When\n            var result = Record.Exception(() => table.AddRow((string[])null!));\n\n            // Then\n            result.ShouldBeOfType<ArgumentNullException>()\n                .ParamName.ShouldBe(\"columns\");\n        }\n\n        [Fact]\n        public void Should_Add_Empty_Items_If_User_Provides_Less_Row_Items_Than_Columns()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Hello\");\n            table.AddColumn(\"World\");\n\n            // When\n            table.AddRow(\"Foo\");\n\n            // Then\n            table.Rows.Count.ShouldBe(1);\n        }\n\n        [Fact]\n        public void Should_Throw_If_Row_Columns_Are_Greater_Than_Number_Of_Columns()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumn(\"Hello\");\n\n            // When\n            var result = Record.Exception(() => table.AddRow(\"Foo\", \"Bar\"));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldBe(\"The number of row columns (including spans) are greater than the number of table columns. Expected 1 but got 2.\");\n        }\n    }\n\n    public sealed class TheAddEmptyRowMethod\n    {\n        [Fact]\n        [Expectation(\"AddEmptyRow\")]\n        public Task Should_Render_Table_Correctly()\n        {\n            // Given\n            var console = new TestConsole();\n            var table = new Table();\n            table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n            table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n            table.AddEmptyRow();\n            table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Table_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    public sealed class ColumnSpanning\n    {\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_2\")]\n        public Task Should_Render_Table_With_2_Column_Span()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\", \"Col4\");\n            table.AddRow(new IRenderable[] { new Markup(\"A\"), new TableCell(\"B spans 2\").Span(2), new Markup(\"D\") });\n            table.AddRow(\"E\", \"F\", \"G\", \"H\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_3\")]\n        public Task Should_Render_Table_With_3_Column_Span()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumns(\"Item\", \"Qty\", \"Unit Price\", \"Total\");\n            table.AddRow(\"Item A\", \"5\", \"20\", \"100\");\n            table.AddRow(new IRenderable[] { new Markup(\"Item B\"), new TableCell(\"Note: deliver after 5pm\").Span(3) });\n            table.AddRow(\"Item C\", \"3\", \"15\", \"45\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_All\")]\n        public Task Should_Render_Table_With_Full_Row_Span()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\");\n            table.AddRow(\"A\", \"B\", \"C\");\n            table.AddRow(new TableCell(\"Full width spanning cell\").Span(3));\n            table.AddRow(\"D\", \"E\", \"F\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_LeftAligned\")]\n        public Task Should_Render_Spanned_Cell_LeftAligned()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumn(new TableColumn(\"Left\") { Alignment = Justify.Left });\n            table.AddColumn(new TableColumn(\"Center\") { Alignment = Justify.Center });\n            table.AddColumn(new TableColumn(\"Right\") { Alignment = Justify.Right });\n            table.AddRow(new IRenderable[] { new Markup(\"A\"), new TableCell(\"Spanned\").Span(2) });\n            table.AddRow(\"D\", \"E\", \"F\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_Multiple\")]\n        public Task Should_Render_Table_With_Multiple_Spans_In_Row()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\", \"Col4\", \"Col5\");\n            table.AddRow(new IRenderable[] { new TableCell(\"Span1\").Span(2), new TableCell(\"Span2\").Span(2), new Markup(\"E\") });\n            table.AddRow(\"A\", \"B\", \"C\", \"D\", \"E\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        public void Should_Throw_When_Span_Exceeds_Column_Count()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\");\n\n            // When\n            var result = Record.Exception(() => table.AddRow(new TableCell(\"Too wide\").Span(4)));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldContain(\"greater than the number of table columns\");\n        }\n\n        [Fact]\n        public void Should_Throw_When_Span_Is_Less_Than_1()\n        {\n            // Given, When\n            var result = Record.Exception(() => new TableCell(\"Test\").Span(0));\n\n            // Then\n            result.ShouldBeOfType<ArgumentException>();\n            result.Message.ShouldContain(\"Column span must be at least 1\");\n        }\n\n        [Fact]\n        public void Should_Throw_When_Spanning_In_Header()\n        {\n            // Given/When\n            var result = Record.Exception(() => new TableColumn(new TableCell(\"Header\").Span(2)));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldContain(\"Column spanning is not supported in table header rows\");\n        }\n\n        [Fact]\n        public void Should_Throw_When_Spanning_In_Footer()\n        {\n            // Given\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\");\n            var column = table.Columns[0];\n\n            // When\n            var result = Record.Exception(() => column.Footer = new TableCell(\"Footer\").Span(2));\n\n            // Then\n            result.ShouldBeOfType<InvalidOperationException>();\n            result.Message.ShouldContain(\"Column spanning is not supported in table footer rows\");\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_NoBorder\")]\n        public Task Should_Render_Spanned_Cells_Without_Border()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.Border = TableBorder.None;\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\");\n            table.AddRow(new IRenderable[] { new Markup(\"A\"), new TableCell(\"Spanned\").Span(2) });\n            table.AddRow(\"D\", \"E\", \"F\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n\n        [Fact]\n        [Expectation(\"Render_ColumnSpan_Multiline\")]\n        public Task Should_Render_Multiline_Spanned_Cell()\n        {\n            // Given\n            var console = new TestConsole().Width(80);\n            var table = new Table();\n            table.AddColumns(\"Col1\", \"Col2\", \"Col3\");\n            table.AddRow(new IRenderable[] { new Markup(\"A\"), new TableCell(\"Line 1\\nLine 2\\nLine 3\").Span(2) });\n            table.AddRow(\"D\", \"E\", \"F\");\n\n            // When\n            console.Write(table);\n\n            // Then\n            return Verifier.Verify(console.Output);\n        }\n    }\n\n    [Fact]\n    [Expectation(\"Render_Row_Separators\")]\n    public Task Should_Render_Table_With_Row_Separators_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.ShowRowSeparators();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Row_Separators_No_Header\")]\n    public Task Should_Render_Table_With_Row_Separators_No_Header_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n\n        table.ShowRowSeparators();\n        table.HideHeaders();\n\n        table.AddColumns(\"Foo\", \"Bar\");\n        table.AddRow(\"Qux\", \"Corgi\");\n        table.AddRow(\"Waldo\", \"Grault\");\n        table.AddRow(\"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_EA_Character\")]\n    public Task Should_Render_Table_With_EA_Character_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(48);\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"中文\", \"日本語\", \"한국어\");\n        table.AddRow(\"这是中文测试字符串\", \"これは日本語のテスト文字列です\", \"이것은한국어테스트문자열입니다\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Footers\")]\n    public Task Should_Render_Table_With_Footers_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Foo\").Footer(\"Oof\").RightAligned());\n        table.AddColumn(\"Bar\");\n        table.AddColumns(new TableColumn(\"Baz\").Footer(\"Zab\"));\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_LeftAligned\")]\n    public Task Should_Left_Align_Table_By_Default()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table()\n            .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n            .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n            .AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_LeftAligned\", \"Align_Widget\")]\n    public Task Should_Left_Align_Table_Correctly_When_Wrapped_In_Align_Widget()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(Align.Left(table));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Centered\")]\n    public Task Should_Center_Table_Correctly_Using_Aligner()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Align(\n            new Table()\n                .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n                .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n                .AddRow(\"Grault\", \"Garply\", \"Fred\"),\n            HorizontalAlignment.Center);\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Centered\", \"Align_Widget\")]\n    public Task Should_Center_Table_Correctly_When_Wrapped_In_Align_Widget()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(Align.Center(table));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_RightAligned\")]\n    public Task Should_Right_Align_Table_Correctly_Using_Aligner()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Align(\n            new Table()\n                .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n                .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n                .AddRow(\"Grault\", \"Garply\", \"Fred\"),\n            HorizontalAlignment.Right);\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_RightAligned\", \"Align_Widget\")]\n    public Task Should_Right_Align_Table_Correctly_When_Wrapped_In_Align_Widget()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(Align.Right(table));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Nested\")]\n    public Task Should_Render_Table_Nested_In_Panels_Correctly()\n    {\n        // A simple table\n        var console = new TestConsole();\n        var table = new Table()\n        {\n            Border = TableBorder.Rounded\n        };\n        table.AddColumn(\"Foo\");\n        table.AddColumn(\"Bar\");\n        table.AddColumn(new TableColumn(\"Baz\")\n        {\n            Alignment = Justify.Right\n        });\n        table.AddRow(\"Qux\\nQuuuuuux\", \"[blue]Corgi[/]\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // Render a table in some panels.\n        console.Write(new Panel(new Panel(table)\n        {\n            Border = BoxBorder.Ascii,\n        }));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_ColumnJustification\")]\n    public Task Should_Render_Table_With_Column_Justification_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Foo\")\n        {\n            Alignment = Justify.Left\n        });\n        table.AddColumn(new TableColumn(\"Bar\")\n        {\n            Alignment = Justify.Right\n        });\n        table.AddColumn(new TableColumn(\"Baz\")\n        {\n            Alignment = Justify.Center\n        });\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Lorem ipsum dolor sit amet\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Expand\")]\n    public Task Should_Expand_Table_To_Available_Space_If_Specified()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table()\n        {\n            Expand = true\n        };\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    public void Should_Not_Expand_Fixed_Width_Columns()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n        var table = new Table()\n            .Expand()\n            .HideHeaders()\n            .HideFooters();\n\n        table.AddColumn(new TableColumn(\"Time\").Width(12));\n        table.AddColumn(\"Message\");\n        table.AddRow(\"12:00\", \"Hello\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        var line = console.Lines.Single(l => l.Contains(\"12:00\"));\n        var firstSeparator = line.IndexOf('│');\n        var secondSeparator = line.IndexOf('│', firstSeparator + 1);\n\n        var firstColumnWidth = secondSeparator - firstSeparator - 1;\n        firstColumnWidth.ShouldBe(14);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Multiline\")]\n    public Task Should_Render_Table_With_Multiple_Rows_In_Cell_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\\nQuuux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_CellPadding\")]\n    public Task Should_Render_Table_With_Cell_Padding_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\");\n        table.AddColumn(new TableColumn(\"Baz\")\n        {\n            Padding = new Padding(3, 0, 2, 0)\n        });\n        table.AddRow(\"Qux\\nQuuux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_NoRows\")]\n    public Task Should_Render_Table_Without_Rows()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\");\n        table.AddColumn(new TableColumn(\"Baz\")\n        {\n            Padding = new Padding(3, 0, 2, 0)\n        });\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Impossible\")]\n    public Task Should_Not_Draw_Tables_That_Are_Impossible_To_Draw()\n    {\n        // Given\n        var console = new TestConsole().Width(25);\n\n        var first = new Table().Border(TableBorder.Rounded).BorderColor(Color.Red);\n        first.AddColumn(new TableColumn(\"[u]PS1[/]\").Centered());\n        first.AddColumn(new TableColumn(\"[u]PS2[/]\"));\n        first.AddColumn(new TableColumn(\"[u]PS3[/]\"));\n        first.AddRow(\"Hello\", \"[red]World[/]\", string.Empty);\n        first.AddRow(\"[blue]Bonjour[/]\", \"[white]le[/]\", \"[red]monde![/]\");\n        first.AddRow(\"[blue]Hej[/]\", \"[yellow]Världen[/]\", string.Empty);\n\n        var second = new Table().Border(TableBorder.Square).BorderColor(Color.Green);\n        second.AddColumn(new TableColumn(\"[u]Foo[/]\"));\n        second.AddColumn(new TableColumn(\"[u]Bar[/]\"));\n        second.AddColumn(new TableColumn(\"[u]Baz[/]\"));\n        second.AddRow(\"Hello\", \"[red]World[/]\", string.Empty);\n        second.AddRow(first, new Text(\"Whaaat\"), new Text(\"Lolz\"));\n        second.AddRow(\"[blue]Hej[/]\", \"[yellow]Världen[/]\", string.Empty);\n\n        var table = new Table().Border(TableBorder.Rounded);\n        table.AddColumn(new TableColumn(new Panel(\"[u]ABC[/]\").BorderColor(Color.Red)));\n        table.AddColumn(new TableColumn(new Panel(\"[u]DEF[/]\").BorderColor(Color.Green)));\n        table.AddColumn(new TableColumn(new Panel(\"[u]GHI[/]\").BorderColor(Color.Blue)));\n        table.AddRow(new Text(\"Hello\").Centered(), new Markup(\"[red]World[/]\"), Text.Empty);\n        table.AddRow(second, new Text(\"Whaat\"), new Text(\"Lol\").RightJustified());\n        table.AddRow(new Markup(\"[blue]Hej[/]\"), new Markup(\"[yellow]Världen[/]\"), Text.Empty);\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Title_Caption\")]\n    public Task Should_Render_Table_With_Title_And_Caption_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table\n        {\n            Border = TableBorder.Rounded\n        };\n        table.Title = new TableTitle(\"Hello World\");\n        table.Caption = new TableTitle(\"Goodbye World\");\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Title_Caption_LeftAligned\")]\n    public Task Should_Left_Align_Table_With_Title_And_Caption_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table()\n            .RoundedBorder()\n            .Title(new TableTitle(\"Hello World\"))\n            .Caption(new TableTitle(\"Goodbye World\"))\n            .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n            .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n            .AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Title_Caption_Centered\")]\n    public Task Should_Center_Table_With_Title_And_Caption_Correctly_Using_Aligner()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Align(\n            new Table()\n                .RoundedBorder()\n                .Title(new TableTitle(\"Hello World\"))\n                .Caption(new TableTitle(\"Goodbye World\"))\n                .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n                .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n                .AddRow(\"Grault\", \"Garply\", \"Fred\"),\n            HorizontalAlignment.Center);\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Title_Caption_RightAligned\")]\n    public Task Should_Right_Align_Table_With_Title_And_Caption_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Align(\n            new Table()\n                .RoundedBorder()\n                .Title(new TableTitle(\"Hello World\"))\n                .Caption(new TableTitle(\"Goodbye World\"))\n                .AddColumns(\"Foo\", \"Bar\", \"Baz\")\n                .AddRow(\"Qux\", \"Corgi\", \"Waldo\")\n                .AddRow(\"Grault\", \"Garply\", \"Fred\"),\n            HorizontalAlignment.Right);\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Title_Caption_LowerCase\")]\n    public Task Should_Render_Table_Without_Capitalizing_First_Letter()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table\n        {\n            Border = TableBorder.Rounded\n        };\n        table.Title = new TableTitle(\"hello world\");\n        table.Caption = new TableTitle(\"goodbye world\");\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Fold\")]\n    public Task Should_Render_With_Folded_Text_Table_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(30);\n        var table = new Table();\n        table.AddColumns(\"Foo\", \"Bar\", \"Baz\");\n        table.AddRow(\"Qux With A Long Description\", \"Corgi\", \"Waldo\");\n        table.AddRow(\"Grault\", \"Garply\", \"Fred On A Long Long Walk\");\n\n        var panel = new Panel(table);\n        panel.Border = BoxBorder.Double;\n\n        // When\n        console.Write(panel);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Empty_Column\")]\n    public Task Should_Render_Empty_Column_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(30);\n        var table = new Table();\n        table.AddColumns(string.Empty, string.Empty);\n        table.AddRow(string.Empty, \"A\");\n        table.AddRow(string.Empty, \"B\");\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Crop\")]\n    public Task Should_Respect_Cell_Content_Overflow_Crop()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(15));\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Crop),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Ellipsis\")]\n    public Task Should_Respect_Cell_Content_Overflow_Ellipsis()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(15));\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Ellipsis),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Fold\")]\n    public Task Should_Respect_Cell_Content_Overflow_Fold()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(15));\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Fold),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Markup_Overflow\")]\n    public Task Should_Respect_Markup_Content_Overflow_In_Cell()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(18));\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Markup(\"[yellow]foo[/] [red]pneumonoultramicroscopicsilicovolcanoconiosis[/] [blue]bar[/]\").Overflow(\n                Overflow.Ellipsis),\n            new Markup(\"[green]Short text[/]\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_Multiple_Rows\")]\n    public Task Should_Respect_Cell_Content_Overflow_In_Multiple_Rows()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(15));\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis\").Overflow(Overflow.Crop),\n            new Text(\"First row\"));\n        table.AddRow(\n            new Text(\"bar supercalifragilisticexpialidocious\").Overflow(Overflow.Ellipsis),\n            new Text(\"Second row\"));\n        table.AddRow(\n            new Text(\"qux antidisestablishmentarianism\").Overflow(Overflow.Fold),\n            new Text(\"Third row\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_Cell_Overflow_With_NoWrap\")]\n    public Task Should_Respect_Cell_Content_Overflow_With_NoWrap_Column()\n    {\n        // Given\n        var console = new TestConsole();\n        var table = new Table();\n        table.AddColumn(new TableColumn(\"Column1\").Width(15).NoWrap());\n        table.AddColumn(new TableColumn(\"Column2\").Width(15));\n        table.AddRow(\n            new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar\").Overflow(Overflow.Ellipsis),\n            new Text(\"Short text\"));\n\n        // When\n        console.Write(table);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [GitHubIssue(\"https://github.com/spectreconsole/spectre.console/issues/2033\")]\n    public void Should_Not_Throw_When_Rendering_Long_CJK_Header_In_Narrow_Console()\n    {\n        // Given\n        var console = new TestConsole().Width(50);\n        var table = new Table()\n            .AddColumn(\"测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试\");\n\n        // When\n        var result = Record.Exception(() => console.Write(table));\n\n        // Then\n        result.ShouldBeNull();\n    }\n\n    [Fact]\n    [GitHubIssue(\"https://github.com/spectreconsole/spectre.console/issues/2033\")]\n    public void Should_Not_Throw_When_Rendering_Multiple_Long_CJK_Headers_In_Narrow_Console()\n    {\n        // Given\n        var console = new TestConsole().Width(50);\n        var table = new Table()\n            .AddColumn(\"测试测试测试测试测试测试测试测试\")\n            .AddColumn(\"测试测试测试测试测试测试测试测试\")\n            .AddColumn(\"测试测试测试测试测试测试测试测试\");\n\n        // When\n        var result = Record.Exception(() => console.Write(table));\n\n        // Then\n        result.ShouldBeNull();\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/TextPathTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/TextPath\")]\npublic sealed class TextPathTests\n{\n    [Theory]\n    [InlineData(8, \"1234567890\", \"…4567890\")]\n    [InlineData(9, \"1234567890\", \"…34567890\")]\n    public void Should_Use_Last_Segments_If_Less_Than_Three(int width, string input, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(width);\n\n        // When\n        console.Write(new TextPath(input));\n\n        // Then\n        console.Output.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(\"C:/Foo/Bar/Baz.txt\", \"C:/Foo/Bar/Baz.txt\")]\n    [InlineData(\"/Foo/Bar/Baz.txt\", \"/Foo/Bar/Baz.txt\")]\n    [InlineData(\"Foo/Bar/Baz.txt\", \"Foo/Bar/Baz.txt\")]\n    public void Should_Render_Full_Path_If_Possible(string input, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new TextPath(input));\n\n        // Then\n        console.Output.ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(17, \"C:/My documents/Bar/Baz.txt\", \"C:/…/Bar/Baz.txt\")]\n    [InlineData(15, \"/My documents/Bar/Baz.txt\", \"/…/Bar/Baz.txt\")]\n    [InlineData(14, \"My documents/Bar/Baz.txt\", \"…/Bar/Baz.txt\")]\n    public void Should_Pop_Segments_From_Left(int width, string input, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(width);\n\n        // When\n        console.Write(new TextPath(input));\n\n        // Then\n        console.Output.ShouldBe(expected);\n    }\n\n    [Fact]\n    public void Should_Right_Align_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new TextPath(\"C:/My documents/Bar/Baz.txt\").RightJustified());\n\n        // Then\n        console.Output.ShouldBe(\"             C:/My documents/Bar/Baz.txt\");\n    }\n\n    [Fact]\n    public void Should_Center_Align_Correctly()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(new TextPath(\"C:/My documents/Bar/Baz.txt\").Centered());\n\n        // Then\n        console.Output.ShouldBe(\"      C:/My documents/Bar/Baz.txt       \");\n    }\n\n    [Fact]\n    [Expectation(\"GH-1307\")]\n    [GitHubIssue(\"https://github.com/spectreconsole/spectre.console/issues/1307\")]\n    public Task Should_Behave_As_Expected_When_Rendering_Inside_Panel_Columns()\n    {\n        // Given\n        var console = new TestConsole().Width(40);\n\n        // When\n        console.Write(\n            new Columns(\n                new Panel(new Text(\"Baz\")),\n                new Panel(new TextPath(\"Qux\"))));\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/TextTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\npublic sealed class TextTests\n{\n    public sealed class TheLengthProperty\n    {\n        [Theory]\n        [InlineData(\"Hello\", 5)]\n        [InlineData(\"Hello\\nWorld\", 11)]\n        public void Should_Return_The_Number_Of_Characters(string input, int expected)\n        {\n            // Given\n            var markup = new Text(input);\n\n            // When\n            var result = markup.Length;\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    public sealed class TheLinesProperty\n    {\n        [Theory]\n        [InlineData(\"Hello\", 1)]\n        [InlineData(\"Hello\\nWorld\", 2)]\n        public void Should_Return_The_Number_Of_Lines(string input, int expected)\n        {\n            // Given\n            var markup = new Text(input);\n\n            // When\n            var result = markup.Lines;\n\n            // Then\n            result.ShouldBe(expected);\n        }\n    }\n\n    [Fact]\n    public void Should_Consider_The_Longest_Word_As_Minimum_Width()\n    {\n        // Given\n        var console = new TestConsole();\n        var caps = new TestCapabilities { Unicode = true };\n        var text = new Text(\"Foo Bar Baz\\nQux\\nLol mobile\");\n\n        // When\n        var result = ((IRenderable)text).Measure(\n            caps.CreateRenderContext(console), 80);\n\n        // Then\n        result.Min.ShouldBe(6);\n    }\n\n    [Fact]\n    public void Should_Consider_The_Longest_Line_As_Maximum_Width()\n    {\n        // Given\n        var console = new TestConsole();\n        var caps = new TestCapabilities { Unicode = true };\n        var text = new Text(\"Foo Bar Baz\\nQux\\nLol mobile\");\n\n        // When\n        var result = ((IRenderable)text).Measure(\n            caps.CreateRenderContext(console), 80);\n\n        // Then\n        result.Max.ShouldBe(11);\n    }\n\n    [Fact]\n    public void Should_Render_Unstyled_Text_As_Expected()\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(\"Hello World\");\n\n        // When\n        console.Write(text);\n\n        // Then\n        console.Output.ShouldBe(\"Hello World\");\n    }\n\n    [Theory]\n    [InlineData(\"Hello\\n\\nWorld\\n\\n\")]\n    [InlineData(\"Hello\\r\\n\\r\\nWorld\\r\\n\\r\\n\")]\n    public void Should_Write_Line_Breaks(string input)\n    {\n        // Given\n        var console = new TestConsole();\n        var text = new Text(input);\n\n        // When\n        console.Write(text);\n\n        // Then\n        console.Output.ShouldBe(\"Hello\\n\\nWorld\\n\\n\");\n    }\n\n    [Fact]\n    public void Should_Render_Panel_2()\n    {\n        // Given\n        var console = new TestConsole();\n\n        // When\n        console.Write(new Markup(\"[b]Hello World[/]\\n[yellow]Hello World[/]\"));\n\n        // Then\n        console.Lines.Count.ShouldBe(2);\n        console.Lines[0].ShouldBe(\"Hello World\");\n        console.Lines[1].ShouldBe(\"Hello World\");\n    }\n\n    [Theory]\n    [InlineData(5, \"Hello World\", \"Hello\\nWorld\")]\n    [InlineData(10, \"Hello Sweet Nice World\", \"Hello \\nSweet Nice\\nWorld\")]\n    public void Should_Split_Unstyled_Text_To_New_Lines_If_Width_Exceeds_Console_Width(\n        int width, string input, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(width);\n        var text = new Text(input);\n\n        // When\n        console.Write(text);\n\n        // Then\n        console.Output\n            .NormalizeLineEndings()\n            .ShouldBe(expected);\n    }\n\n    [Theory]\n    [InlineData(Overflow.Fold, \"foo \\npneumonoultram\\nicroscopicsili\\ncovolcanoconio\\nsis bar qux\")]\n    [InlineData(Overflow.Crop, \"foo \\npneumonoultram\\nbar qux\")]\n    [InlineData(Overflow.Ellipsis, \"foo \\npneumonoultra…\\nbar qux\")]\n    public void Should_Overflow_Text_Correctly(Overflow overflow, string expected)\n    {\n        // Given\n        var console = new TestConsole().Width(14);\n        var text = new Text(\"foo pneumonoultramicroscopicsilicovolcanoconiosis bar qux\")\n            .Overflow(overflow);\n\n        // When\n        console.Write(text);\n\n        // Then\n        console.Output\n            .NormalizeLineEndings()\n            .ShouldBe(expected);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Unit/Widgets/TreeTests.cs",
    "content": "namespace Spectre.Console.Tests.Unit;\n\n[ExpectationPath(\"Widgets/Tree\")]\npublic class TreeTests\n{\n    [Fact]\n    [Expectation(\"Render\")]\n    public Task Should_Render_Tree_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n\n        var tree = new Tree(new Text(\"Root node\")).Guide(TreeGuide.DoubleLine);\n\n        var nestedChildren = Enumerable.Range(0, 10).Select(x => new Text($\"multiple\\nline {x}\"));\n        var child2 = new TreeNode(new Text(\"child2\"));\n        var child2Child = new TreeNode(new Text(\"child2-1\"));\n        child2.AddNode(child2Child);\n        child2Child.AddNode(new TreeNode(new Text(\"Child2-1-1\\nchild\")));\n        var child3 = new TreeNode(new Text(\"child3\"));\n        var child3Child = new TreeNode(new Text(\"single leaf\\nmultiline\"));\n        child3Child.AddNode(new TreeNode(new Calendar(2021, 01)));\n        child3.AddNode(child3Child);\n\n        tree.AddNode(\"child1\").AddNodes(nestedChildren);\n        tree.AddNode(child2);\n        tree.AddNode(child3);\n        tree.AddNode(\"child4\");\n\n        // When\n        console.Write(tree);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    [Expectation(\"Render_NoChildren\")]\n    public Task Should_Render_Tree_With_No_Child_Nodes_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var tree = new Tree(new Text(\"Root node\"));\n\n        // When\n        console.Write(tree);\n\n        // Then\n        return Verifier.Verify(console.Output);\n    }\n\n    [Fact]\n    public void Should_Throw_If_Tree_Contains_Cycles()\n    {\n        // Given\n        var console = new TestConsole();\n\n        var child2 = new TreeNode(new Text(\"child 2\"));\n        var child3 = new TreeNode(new Text(\"child 3\"));\n        var child1 = new TreeNode(new Text(\"child 1\"));\n        child1.AddNodes(child2, child3);\n        var root = new TreeNode(new Text(\"Branch Node\"));\n        root.AddNodes(child1);\n        child2.AddNode(root);\n\n        var tree = new Tree(\"root node\");\n        tree.AddNodes(root);\n\n        // When\n        var result = Record.Exception(() => console.Write(tree));\n\n        // Then\n        result.ShouldBeOfType<CircularTreeException>();\n    }\n\n    [Fact]\n    [Expectation(\"Render_NoChildren_OfCollapsed\")]\n    public void Should_Render_Tree_With_No_Child_Of_Collapsed_Nodes_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var tree = new Tree(new Text(\"Root node\"));\n        var node1 = new TreeNode(new Text(\"Node level 1\"));\n        node1.AddNode(new TreeNode(new Text(\"Node level 2\")));\n        tree.AddNode(node1);\n        node1.Expanded = false;\n\n        // When\n        console.Write(tree);\n\n        // Then\n        console.Output.SplitLines()\n            .Select(x => x.Trim())\n            .ToArray()\n            .ShouldBeEquivalentTo(new[]\n            {\n                \"Root node\",\n                \"└── Node level 1\",\n                string.Empty,\n            });\n    }\n\n    [Fact]\n    [Expectation(\"Render_NoChildren_IfRouteCollapsed\")]\n    public void Should_Render_Tree_With_No_Child_If_Route_Collapsed_Correctly()\n    {\n        // Given\n        var console = new TestConsole();\n        var tree = new Tree(new Text(\"Root node\"));\n        var node1 = new TreeNode(new Text(\"Node level 1\"));\n        node1.AddNode(new TreeNode(new Text(\"Node level 2\")));\n        tree.AddNode(node1);\n        tree.Expanded = false;\n\n        // When\n        console.Write(tree);\n\n        // Then\n        console.Output.SplitLines()\n            .Select(x => x.Trim())\n            .ToArray()\n            .ShouldBeEquivalentTo(new[]\n            {\n                \"Root node\",\n                string.Empty,\n            });\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Utilities/EmbeddedResourceReader.cs",
    "content": "namespace Spectre.Console.Tests;\n\npublic static class EmbeddedResourceReader\n{\n    public static Stream LoadResourceStream(string resourceName)\n    {\n        ArgumentNullException.ThrowIfNull(resourceName);\n\n        var assembly = Assembly.GetCallingAssembly();\n        resourceName = resourceName.Replace(\"/\", \".\");\n\n        var stream = assembly.GetManifestResourceStream(resourceName);\n        if (stream == null)\n        {\n            throw new InvalidOperationException($\"Could not load embedded resource '{resourceName}'\");\n        }\n\n        return stream;\n    }\n\n    public static Stream LoadResourceStream(Assembly assembly, string resourceName)\n    {\n        ArgumentNullException.ThrowIfNull(assembly);\n\n        ArgumentNullException.ThrowIfNull(resourceName);\n\n        resourceName = resourceName.Replace(\"/\", \".\");\n        var stream = assembly.GetManifestResourceStream(resourceName);\n        if (stream == null)\n        {\n            throw new InvalidOperationException($\"Could not load embedded resource '{resourceName}'\");\n        }\n\n        return stream;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Utilities/FakeTimeProvider.cs",
    "content": "namespace Spectre.Console.Tests;\n\ninternal sealed class FakeTimeProvider : TimeProvider\n{\n    private DateTime _utcNow;\n\n    public FakeTimeProvider(DateTime startTime)\n    {\n        _utcNow = startTime;\n    }\n\n    public override DateTimeOffset GetUtcNow() => new DateTimeOffset(_utcNow, TimeSpan.Zero);\n    public override TimeZoneInfo LocalTimeZone => TimeZoneInfo.Utc;\n\n    public void Advance(TimeSpan timeSpan) => _utcNow += timeSpan;\n}\n"
  },
  {
    "path": "src/Spectre.Console.Tests/Utilities/GitHubIssueAttribute.cs",
    "content": "namespace Spectre.Console.Tests;\n\n[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]\npublic sealed class GitHubIssueAttribute : Attribute\n{\n    public string Url { get; }\n\n    public GitHubIssueAttribute(string url)\n    {\n        Url = url;\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/Utilities/ModuleInitializerAttribute.cs",
    "content": "#if !NET6_0_OR_GREATER\nnamespace System.Runtime.CompilerServices;\n\n[AttributeUsage(AttributeTargets.Method, Inherited = false)]\npublic sealed class ModuleInitializerAttribute : Attribute\n{\n}\n#endif"
  },
  {
    "path": "src/Spectre.Console.Tests/Utilities/TestConsoleExtensions.cs",
    "content": "namespace Spectre.Console.Tests;\n\npublic static class TestConsoleExtensions\n{\n    private static readonly Regex _lineNumberRegex = new Regex(\":\\\\d+\", RegexOptions.Singleline);\n    private static readonly Regex _filenameRegex = new Regex(\"\\\\sin\\\\s.*cs:nn\", RegexOptions.Multiline);\n    private static readonly Regex _pathSeparatorRegex = new Regex(@\"[/\\\\]+\");\n\n    public static string WriteNormalizedException(this TestConsole console, Exception ex, ExceptionFormats formats = ExceptionFormats.Default)\n    {\n        if (!string.IsNullOrWhiteSpace(console.Output))\n        {\n            throw new InvalidOperationException(\"Output buffer is not empty.\");\n        }\n\n        console.WriteException(ex, formats);\n\n        return string.Join(\"\\n\", NormalizeStackTrace(console.Output)\n            .NormalizeLineEndings()\n            .Split(['\\n'])\n            .Select(line => line.TrimEnd()))\n            .Replace(Path.DirectorySeparatorChar, '/');\n    }\n\n    public static string NormalizeStackTrace(string text)\n    {\n        // First normalize line numbers\n        text = _lineNumberRegex.Replace(text, \":nn\");\n\n        // Then normalize paths and filenames\n        text = _filenameRegex.Replace(text, match =>\n        {\n            var value = match.Value;\n            var index = value.LastIndexOfAny(['\\\\', '/']);\n            var filename = value.Substring(index + 1, value.Length - index - 1);\n\n            return $\" in /xyz/{filename}\";\n        });\n\n        // Finally normalize any remaining path separators\n        return _pathSeparatorRegex.Replace(text, \"/\");\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.Tests/VerifyConfiguration.cs",
    "content": "namespace Spectre.Console.Tests;\n\npublic static class VerifyConfiguration\n{\n    [ModuleInitializer]\n    public static void Init()\n    {\n        Verifier.DerivePathInfo(Expectations.Initialize);\n    }\n}"
  },
  {
    "path": "src/Spectre.Console.slnx",
    "content": "<Solution>\n  <Configurations>\n    <Platform Name=\"Any CPU\" />\n    <Platform Name=\"x64\" />\n    <Platform Name=\"x86\" />\n  </Configurations>\n  <Folder Name=\"/Build/\">\n    <File Path=\"../dotnet-tools.json\" />\n    <File Path=\"../global.json\" />\n    <File Path=\"..\\build.cs\" />\n    <File Path=\".editorconfig\" />\n    <File Path=\"Directory.Build.props\" />\n    <File Path=\"Directory.Packages.props\" />\n  </Folder>\n  <Folder Name=\"/Build/GitHub/\">\n    <File Path=\"../.github/workflows/ci.yaml\" />\n    <File Path=\"../.github/workflows/publish.yaml\" />\n  </Folder>\n  <Folder Name=\"/Extensions/\">\n    <Project Path=\"Extensions/Spectre.Console.ImageSharp/Spectre.Console.ImageSharp.csproj\" />\n    <Project Path=\"Extensions/Spectre.Console.Json/Spectre.Console.Json.csproj\" />\n  </Folder>\n  <Project Path=\"Benchmarks/Benchmarks.csproj\" />\n  <Project Path=\"Spectre.Console.Ansi.Tests/Spectre.Console.Ansi.Tests.csproj\" />\n  <Project Path=\"Spectre.Console.Ansi/Spectre.Console.Ansi.csproj\" />\n  <Project Path=\"Spectre.Console.SourceGenerator/Spectre.Console.SourceGenerator.csproj\" />\n  <Project Path=\"Spectre.Console.Testing/Spectre.Console.Testing.csproj\" />\n  <Project Path=\"Spectre.Console.Tests/Spectre.Console.Tests.csproj\" />\n  <Project Path=\"Spectre.Console/Spectre.Console.csproj\" />\n</Solution>"
  }
]